私は有限要素システムを開発しています。いつものように、シミュレーションはメッシュノードのセットで構成され、それぞれがプロパティのセット(フローティングポイント)を持ちます。たとえば、時間内に変化するいくつかの材料プロパティ、座標、または物理量などです。
次の2つの極端なアプローチを採用できます。
プロパティごと:プロパティごとに1つの配列を維持します。
double* x, *y, *z, *e_field, *b_field, *conductivity;
エントリ単位:各配列が構造体である単一の配列を維持します
struct { double x, y, z, e_field, b_field, conductivity; } *meshnodedata;
これらの間で、座標x、y、zにのみ2番目のアプローチを適用し、残りのプロパティに最初のアプローチを使用するように、混合することができます。シミュレーションが各メッシュノードに対して維持するプロパティが多いほど、混合する可能性があります。
一方では、プログラムのパフォーマンスとコードの保守性に関して、これらのアプローチ(およびそれらの組み合わせ)のどれが科学計算に最適であるかという古典的な質問があります。一方で、異なるアプローチ間の移行が容易になるようにコードを実装するにはどうすればよいのでしょうか。さらに、プログラムのさまざまな部分のさまざまなメモリレイアウト間で移行することも解決策になる可能性があります。
要点を言えば:
- これらの異なるアプローチでのあなたの経験は何でしたか?
- これらの違いはどれほど重要でしたか?
- これら2つのレイアウト間での移行の経験を積んでいますか?