我正在寻找最有效的方法来翻转包装在 SSE 寄存器中的所有四个浮点数上的符号。
我在英特尔架构软件开发手册中没有找到这样做的内在因素。以下是我已经尝试过的事情。
对于每种情况,我都循环了代码 100 亿次,并得到了指示的挂墙时间。我试图至少匹配 4 秒,这需要我的非 SIMD 方法,它只使用一元减号运算符。
[48 秒]
_mm_sub_ps( _mm_setzero_ps(), vec );
[32 秒]
_mm_mul_ps( _mm_set1_ps( -1.0f ), vec );
[9 秒]
联合 NegativeMask { 诠释intRep; 浮动 fltRep; } 负掩码; negMask.intRep = 0x80000000; _mm_xor_ps(_mm_set1_ps(negMask.fltRep),vec);
编译器是带有 -O3 的 gcc 4.2。CPU 是 Intel Core 2 Duo。