コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
Structure of Arrays(SoA)
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
Structure of Arrays(SoA)とは、構造体の配列(Array of Structures, AoS)を ひとつの構造体にしてしまうことをいいます。 ; AoS <source lang="csharp"> public struct Vertex { public Vector3 Position; public Vector3 Normal; public Vector2 UV; } var vertices = new Vertex[1000]; </source> ; SoA <source lang="csharp"> public struct Vertices { public Vector3[] Position; public Vector3[] Normal; public Vector2[] UV; } </source> == パフォーマンス効果 == 実際のベンチマークテストでは、Vector3[10000]に対してYの最大値を求める処理において、以下の結果が得られています: 通常の実装でも2倍の高速化 SIMD処理を適用した場合は10倍の高速化 == 構造の違い == === Array of Structures(従来の配列) === 通常のC#配列では、データがXYZXYZXYZXYZという順序でメモリに配置されます。 === Structure of Arrays(SoA) === SoAでは、同じフィールドのデータがXXXXYYYYZZZZという順序で連続配置されます。 == 高速化の理由 == === CPUキャッシュの効率化 === SoAは同じ型のデータが連続してメモリに配置されるため、CPUキャッシュを効率的に活用できます。 === SIMD処理の適用 === 連続したメモリ領域により、[[SIMD]](Single Instruction, Multiple Data)処理が適用しやすくなります。例えば、Yフィールドに対する一括処理が高速化されます。 == 適用場面 == SoAは特にパフォーマンスが重要なシチュエーションで有効です。大量のデータに対して同じフィールドへの処理を繰り返し行う場合や、数値計算が多い処理において、その効果を最大限に発揮します。 [[category: プログラミング]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化