最適化したいコードは基本的に単純ですが大きな算術式です。コードを自動的に分析して独立した乗算/加算を並列に計算するのはかなり簡単なはずですが、自動ベクトル化はループに対してのみ機能することを読みました。
ユニオンまたは他の方法を介したベクトル内の単一要素へのアクセスは絶対に避け、代わりに_mm_shuffle_pdに置き換える必要があることを何度も読みました(私はdoubleのみに取り組んでいます)...
__m128dベクトルのコンテンツを、ユニオンとしてアクセスせずにdoubleとして格納する方法がわからないようです。また、このような操作は、スカラーコードと比較した場合にパフォーマンスの向上をもたらしますか?
union {
__m128d v;
double d[2];
} vec;
union {
__m128d v;
double d[2];
} vec2;
vec.v = index1;
vec2.v = index2;
temp1 = _mm_mul_pd(temp1, _mm_set_pd(bvec[vec.d[1]], bvec[vec2[1]]));
また、2つの組合はばかげて醜いように見えますが、
union dvec {
__m128d v;
double d[2];
} vec;
indexXをdvecとして宣言しようとすると、コンパイラはdvecが宣言されていないと文句を言いました。