我正在使用 AVX2/SSE 指令并行化某个动态编程问题。
在我计算的主要迭代中,我计算矩阵中的列,其中每个单元格都是 AVX2 寄存器 ( _m256i
) 的结构。我使用前一个矩阵列中的值作为计算当前列的输入值。列可能很大,所以我要做的是我有一个结构数组(在堆栈上),其中每个结构都有两个_m256i
元素。
结构:
struct Cell {
_m256i first;
_m256i second;
};
然后我有这样的数组:Cell prevColumn [N]
。N
通常会是几百。
我知道它_m256i
基本上代表一个 avx2 寄存器,所以我想知道我应该如何看待这个数组,它的行为如何,因为 N 远大于 16(这是 avx 寄存器的数量)?创建这样一个数组是一种好习惯,还是在存储大量_m256i
即将真正重用的值时我应该使用一些更好的方法?
另外,我应该对这些结构进行任何调整吗?我读了很多关于对齐的文章,但我仍然不确定如何以及何时准确地进行对齐。