データ指向設計
データ指向設計
Data-Oriented Design
データを逐次処理(反復処理)することに焦点を当てた設計方針
CPUのキャッシュを最大限活用できる
局所参照性
キャッシュはメモリから一度に周辺のデータ(キャッシュブロック)もとってくる。
メモリとCPUの性能差があるので、なるべくとってくる回数は減らしたい気持ちがある
オブジェクト指向だと反復する単位がでかすぎてキャッシュミスが頻繁に発生する。
データ思考設計だと、同じ種類のデータを配列としてまとめておく。
例
Enemyに含まれるHPや攻撃力、これらのステータスはプリミティブなデータだから反復単位が小さい
Enemy全体でステータスごとに配列で集約して反復すると、キャッシュが最大限に活用される。
また、データの逐次処理のみを考えていくのでステートレス
実装するのは、関数になる。
関数はステートレスにできるので、参照透過性がある
真の意味でのユニットテストができる!!
オブジェクト指向の難しい設計や速度のボトルネックに囚われずに済む。
ただし、非直感的な設計を要するので、慣れるまでが厳しい、とされている。
参考
Bookmark:Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP)
近年Unityではこのデータ指向設計を取り込んだDOTSを開発している。
Unity ECS
Monobehaviorはこれに置き変わる....?かも?
それゆえ設計の管理が楽!
Unmanaged Memoryがある!
キャッシュも活かせるので速度が速い!
Unity Physicsを活用すると、マルチスレッドにも関わらず、決定的な物理シミュレーションを使用することができる。
これはデータ指向設計を採用したため
参考
Bookmark: たのしいDOTS〜初級から上級まで〜