SSEレジスターにパックされた4つのフロートすべてのサインを反転させる最も効率的な方法を探しています。
Intelアーキテクチャソフトウェア開発マニュアルでこれを行うための本質を見つけていません。以下は私がすでに試したことです。
いずれの場合も、コードを100億回ループして、実時間を示しました。単項マイナス演算子のみを使用する非SIMDアプローチでは、少なくとも4秒を一致させようとしています。
[48秒]
_mm_sub_ps( _mm_setzero_ps(), vec );
[32秒]
_mm_mul_ps( _mm_set1_ps( -1.0f ), vec );
[9秒]
ユニオンNegativeMask{ int intRep; float fltRep; } negMask; negMask.intRep = 0x80000000; _mm_xor_ps(_mm_set1_ps(negMask.fltRep)、vec);
コンパイラは-O3を含むgcc4.2です。CPUはIntelCore2Duoです。