多维__m256i数据类型对齐问题

时间:2016-05-05 13:19:02

标签: c visual-c++ struct intrinsics avx2

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

我有这个代码(它在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]);
}

我无法构建这个,因为我收到了错误:

  

“错误'状态':请求对齐为32的形式参数不会   对齐“

我无法看到,这里的问题是什么。我已经指定了数组的维度,因此编译器应该能够解决这个问题。此外,我不明白为什么Intel Intrinsics库应该返回一个未对齐的__m256i结构,因为它的大多数库函数都需要对齐。

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

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

然而有了这个,一旦我访问数组(我在test_vector方法的唯一行中执行),我得到一个“struct at NULL”的异常。 如果状态数组参数是一维的(即只有状态[5]),它可以正常工作。

1 个答案:

答案 0 :(得分:0)

使用&#34; __ m256i(*州)[2]&#34;在签名而不是上述变化中,修复了我的对齐问题。约翰·博林格(John Bollinger)在评论中提出了这一点,因此首先应该向他提出赞成票。