多维 __m256i 数据类型对齐问题

Multidimensional __m256i datatype alignment issues

我希望有人能够帮助解决这个问题,这个问题已经困扰我一个多小时了。

我有这段代码(在 C 中):

#include <immintrin.h>

void test_vectors(__m256i state[5][2]);
void test() {
    __m256i state[5][2];

    for (int i = 0; i < 5; i++) {
        state[i][0] = _mm256_setzero_si256();
        state[i][1] = _mm256_setzero_si256();
    }

    test_vectors(state);
}

void test_vectors(__m256i state[5][2]) {
            __m256i some_new_vector = _mm256_xor_si256(state[0][0], state[0][1]);
}

我无法构建它,因为出现错误:

"Error 'state': formal parameter with requested alignment of 32 won't be aligned"

我看不出来,这是什么问题。我已经指定了数组的维度,所以编译器应该能够计算出来。此外,我不明白为什么 Intel Intrinsics 库应该 return 一个未对齐的 __m256i 结构,因为它的大多数库函数都需要对齐。

我可以通过将函数的签名更改为:

来避免错误
void schwabe_bitsliced_primate(__m256i *state[5]);

然而,一旦我访问数组(我在 test_vector 方法的唯一行中执行此操作),我就会得到一个异常 "struct at NULL"。 如果 state 数组参数是一维的(即只有 state[5]),它工作正常。

在签名中使用“__m256i (*state)[2]”而不是上述变体,解决了我的对齐问题。 John Bollinger 在评论中提出了这个建议,所以应该首先给他投票。