AVX2/SSE 命令を使用して、特定の動的計画問題を並列化しています。
私の計算の主な反復では、各セルが AVX2 レジスタの構造体である行列の列を計算します ( _m256i
)。現在の列を計算するための入力値として、前のマトリックス列の値を使用します。列は大きくなる可能性があるため、各構造に 2 つの_m256i
要素がある構造体の配列 (スタック上) を用意します。
構造:
struct Cell {
_m256i first;
_m256i second;
};
次に、次のような配列がありますCell prevColumn [N]
。N
通常は数百になります。
基本的に avx2 レジスタを表していることはわかっている_m256i
ので、N は 16 (avx レジスタの数) よりもはるかに大きいため、この配列についてどのように考えるべきか、どのように動作するのか疑問に思っています。_m256i
そのような配列を作成することは良い習慣ですか、それともすぐに再利用される多くの値を格納するときに使用する必要があるより良いアプローチはありますか?
また、この構造で行うべき調整はありますか? アラインメントについてはよく読んでいますが、いつ、どのように正確に行うべきかはまだわかりません。