/note/tech

CPU<(我の真の力を見せるときがきた!) -Data Oriented Programming-

オブジェクト指向プログラミングはCPUに優しくないです。

データ指向プログラミングがパフォーマンス問題への解法の一つになります。

メッセージパッシングはオブジェクト指向の基本パーツです。そしてメモリ配置はいじれない言語が多いです。

つまり、高級オブジェクト指向言語は CPUに優しくない のです。

ではどうすればCPUに優しいプログラムになるのか。

ここではパラダイムの変換による根本的な解決法を提示します。

それがData Oriented Programmingです。(!= Data Driven Programming!)

さて、これがどんな影響を及ぼすのでしょうか。tmlibのアクセスが遅かった理由を考えてみましょう。

そうです、間接参照を何度も行うことで、キャッシュミスが起きたことですね。

では、DOPではどうなるのでしょうか。

DOPでは、加工関数に対して、データが直列に並んでいます。逐次アクセスです。さらに、加工関数に対して、必要最小限のデータを渡すわけです。結果、キャッシュミスはOOPに比べておきにくいです。

DOPが威力を発揮するのは、同一データに同一処理を行う場合です。例えばゲームですと、画面上に現れる移動体には、位置、姿勢、生死etc...同一のデータが大量にあります。さらに画面更新毎に実行される訳です。

まさに適任です。

ですが、画面上のUIに関しては勝手が違います。例えばボタン、OKボタンとCancelボタンは押した際の挙動が違います。似たデータですが、同一処理ではありません。ボタンという概念が、他の概念を呼び出すわけです。これはオブジェクト指向のメッセージパッシングと同じ、よって この場合、OOPが適切です。