コンピューティングにおいて、データ指向設計は、 CPU キャッシュの効率的な使用を動機とするプログラム最適化アプローチであり、ビデオゲーム開発でよく使用されます。[ 1 ]このアプローチは、データのレイアウトに焦点を当て、必要に応じてフィールドを分離およびソートし、データの変換について考えることです。支持者には、Mike Acton、[ 2 ] Scott Meyers、[ 3 ]、Jonathan Blowなどがいます。
並列配列(または配列の構造)は、データ指向設計の代表的な例である。これは、オブジェクト指向設計に典型的な構造体の配列とは対照的である。
データ指向設計をプログラミングパラダイムとして定義することは議論の余地がある。多くの人が、他のパラダイムと並行して使用できると考えているが[ 4 ]、データレイアウトを重視しているため、他のほとんどのパラダイムとは互換性がないとも考えられている[ 1 ] 。
これらの手法は、 IBM PowerPCベースのPlayStation 3 (PS3) やXbox 360コンソールを含む第 7 世代のビデオゲームコンソールの2000 年代半ばから後半にかけて特に普及しました。歴史的に、ゲームコンソールは、最高級のデスクトップ コンピュータと比較して、中央処理装置(CPU) の性能が比較的低い場合が多いです。これは、グラフィックス処理装置(GPU) により多くの電力とトランジスタ予算を割り当てるための設計上の選択です。たとえば、第 7 世代の CPU は、最新のアウト オブ オーダー実行プロセッサではなく、クロック速度が高くパイプラインが深いイン オーダー プロセッサを使用して製造されました。さらに、ほとんどのタイプのコンピューティング システムでは、メイン メモリが処理要素から数百クロック サイクル離れた場所に配置されています。また、CPU の高速化とメイン メモリ容量の大幅な増加に伴い、大量のデータ消費が発生し、 共有バスでのキャッシュ ミスの可能性が高まります。これは、フォン ノイマン ボトルネックとして知られています。そのため、パフォーマンスを制御するために参照の局所性手法が使用され、ボトルネックを解消するためにメモリ アクセス パターンの改善が必要となりました。ソフトウェアの問題の中には、Itaniumで発生した問題と類似したものもあり、事前スケジューリングのためにループアンローリングが必要となるものもあった。
従来のオブジェクト指向プログラミング(OOP) の設計原則ではデータ局所性が低くなるという主張がある。 [ 5 ] [ 6 ]特に実行時ポリモーフィズム (動的ディスパッチ) が使用される場合 (これは一部のプロセッサで特に問題となる) は顕著である。[ 7 ] [ 1 ] OOP は「データを中心にコードを整理する」ように見えるが、実際には、特定の関数によるアクセスを効率的にするために個々のフィールドや配列を物理的にグループ化するのではなく、データ型を中心にソースコードを整理している。さらに、レイアウトの詳細を抽象化レイヤーの下に隠すことが多いが、データ指向プログラマはまず最初にこれを考慮したいと考えている。