説明不足の質問で申し訳ありません。もう一度質問を言い換えさせてください:
セットアップ:
SSEを使用して、ADDと、4つの配列からの4つの32ビット値のビット単位の操作を同時に実行する必要があります。これら 4 つの配列の要素はすべて整数サイズ (32 ビット) です。結果は 5 番目の配列に移動します。
だから私の質問は:
- C を使用して SSE を実行できるようにするには、どのヘッダー ファイルとコンパイラ フラグを含める必要がありますか?
- Paul が提供するサンプル コードはまだ機能しますか?
別の質問ですが、整数 A から最後のビットを読み取り、整数 B から最初のビットを読み取り、整数 C の最後のビットと最初のビットを読み取った値で置き換える必要がある場合、ここで SSE を使用できますか? または、それを行うための高速な方法はありますか?通常の場合の 3 アクセスの代わりに?
ポール提供のコード
#include <stdint.h>
#include <emmintrin.h>
const size_t N = 4096; // size of input/output arrays
int32_t array0[N]; // 4 x input arrays
int32_t array1[N];
int32_t array2[N];
int32_t array3[N];
int32_t array_sum[N]; // output array
for (size_t i = 0; i < N; i += 4)
{
__m128i v0 = _mm_load_si128(&array0[i]); // load 4 x vectors of 4 x int
__m128i v1 = _mm_load_si128(&array1[i]);
__m128i v2 = _mm_load_si128(&array2[i]);
__m128i v3 = _mm_load_si128(&array3[i]);
__m128i vsum = _mm_add_epi32(v0, v1); // sum vectors
__m128i vsum = _mm_add_epi32(vsum, v2);
__m128i vsum = _mm_add_epi32(vsum, v3);
_mm_store_si128(&array_out[i], vsum); // store sum
}