私はベクトル化をいじっています(初めての学習者)。ポイントは、ループを展開できるかどうかです。このように 4 つの連続するフロートをロードするのが好きです。Seg fault を参照してください。
el0 = _mm_load_ps(&array[0]);
el1 = _mm_load_ps(&array[1]); // Seg fault
セグフォルトが発生する理由を理解しています。私の質問は、オフセットを使用して_mm_loadingするきちんとした方法はありますか?
私はベクトル化をいじっています(初めての学習者)。ポイントは、ループを展開できるかどうかです。このように 4 つの連続するフロートをロードするのが好きです。Seg fault を参照してください。
el0 = _mm_load_ps(&array[0]);
el1 = _mm_load_ps(&array[1]); // Seg fault
セグフォルトが発生する理由を理解しています。私の質問は、オフセットを使用して_mm_loadingするきちんとした方法はありますか?
コメント投稿者はすでに解決していますが、未回答の質問リストに質問が表示されると面倒です。
_mm_load_ps(&array[0]) // load a vector of array[0..3]
_mm_load_ps(&array[1]) // load a vector of array[1..4]. different alignment than array[0]
// what you probably want is:
_mm_load_ps(&array[4]) // load a vector of array[4..7], aligned if array is aligned
インデックスのストライドは ですsizeof(vector_type)/sizeof(array[0])
。(その後、AVX 用にコードを拡張するときに、インデックスを変更する必要はありません。)