【发布时间】:2011-03-22 15:03:01
【问题描述】:
我正在寻找最有效的方法来翻转 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。
【问题讨论】:
标签: c performance optimization sse simd