あなたの助けを借りて、私は自分のコード (以下のサンプル) で SSE を使用してパフォーマンスを大幅に向上させましたが、AVX の 256 ビット レジスタを使用することでこの向上を改善できるかどうか疑問に思っていました。
int result[4] __attribute__((aligned(16))) = {0};
__m128i vresult = _mm_set1_epi32(0);
__m128i v1, v2, vmax;
for (int k = 0; k < limit; k += 4) {
v1 = _mm_load_si128((__m128i *) & myVector[positionNodeId + k]);
v2 = _mm_load_si128((__m128i *) & myVector2[k]);
vmax = _mm_add_epi32(v1, v2);
vresult = _mm_max_epi32(vresult, vmax);
}
_mm_store_si128((__m128i *) result, vresult);
return max(max(max(result[0], result[1]), result[2]), result[3]);
そこで、3 つの質問があります。上記のかなり単純な SSE コードを AVX に変換するにはどうすればよいでしょうか? そのためにどのヘッダーをインポートする必要がありますか? また、AVX が動作するように (-sse4.1 の代わりに) gcc コンパイラにどのフラグを指定する必要がありますか?
前もって感謝します。あなたの助けに。