2016-05-05 16 views
0

誰かがこの問題を助けることができたら嬉しいです。多次元__m256iデータ型のアラインメントの問題

私は(それがCである)このコードを持っている:私は見ることができないんだ

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

何の問題:私はエラーを取得するよう、私は、これを構築することはできません

#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]); 
} 

ここにある。私は配列の次元を指定したので、コンパイラはそれを理解できるはずです。さらに、なぜインテルイントリンシクスライブラリが、そのライブラリ関数の大部分にアライメントが必要なので、整列していない__m256i構造体が返されるのか分かりません。すぐに私はラインだけでで行う配列を、(アクセスしているため、これに伴っしかし

void schwabe_bitsliced_primate(__m256i *state[5]); 

:私がする関数のシグネチャを変更することで、エラーを回避することができる午前

私のtest_vectorメソッド)、私は "struct at NULL"例外が発生します。 状態配列のパラメータが1次元(つまり状態[5]のみ)であれば問題ありません。

+0

説明した回避策を明確にすることができますか?つまり、実際のコードで関数の署名を変更することですか?関数パラメータの宣言として、 '__m256i state [5] [2]'は '__m256i(* state)[2]'と同等で、 '__m256i * state [2]'とは完全に異なっています。 –

+0

さらに、あなたのコードは[mcve]ではないようです。これは、非標準データ型の宣言および/またはヘッダー、およびそれらを操作する関数を省略します。 –

+0

関連:http://stackoverflow.com/questions/28488986/c-opengl-formal-parameter-with-declspecalign16-wont-be-aligned。 –

答えて

0

上記のバリエーションの代わりに「__m256i(* state)[2]」を使用すると、アライメントの問題が修正されました。ジョン・ボリンジャーはこれをコメントで提案したので、アップフォースはまず第一に彼に行くべきです。