2

私は組み込み関数を使用して私のプログラムを最適化しています。しかし、結果を浮動小数点値と比較するために、__m128ベクトルにある4つの要素を合計したいと思います。たとえば、次の128ビットベクトルがあるとします:{a、bc、d}。a + b + c + dをeと比較するにはどうすればよいですか?eはfloatタイプです。

SSE2またはSSE3はそれを簡単に行う方法を提供しますか、それとも私を助けることができるコードスニペットがありますか?ありがとう !

4

1 に答える 1

1

私ができる最善のことはこれです:

; assumes    xmm0 = [0, B, 0, A] or similar
mulps xmm0,xmm0   ; [0, B*B, 0, A*A]
xorps xmm1,xmm1
movhlps xmm1,xmm0 ; [0, 0, 0, B * B]
addps xmm0,xmm1   ; [0, 0, 0, A * A + B * B]

AとBが絶対に低いクワッドワードに含まれている必要がある場合、私が知る限り、シャッフルが必要です。これは、ペンリン以前では遅くなります(ペンリンでは、DPPSソリューションが利用可能です)。

于 2012-04-15T17:12:44.060 に答える