我正在尋找最有效的方法來翻轉包裝在SSE註冊中的所有四個浮標上的標誌。在包裝好的SSE浮標上翻轉標誌
我還沒有在英特爾架構軟件開發手冊中找到這樣做的內在原因。以下是我已經嘗試過的事情。
對於每種情況,我循環遍歷代碼100億次,並獲得指定的掛牆時間。我試圖至少匹配4秒,這需要使用我的非SIMD方法,即使用一元減法運算符。
[48秒]
_mm_sub_ps(_mm_setzero_ps(), vec);
[32秒]
_mm_mul_ps(_mm_set1_ps(-1.0f), vec);
[9秒]
union NegativeMask { int intRep; float fltRep; } negMask; negMask.intRep = 0x80000000; _mm_xor_ps(_mm_set1_ps(negMask.fltRep), vec);
編譯器是gcc 4.2 -O3 。 CPU是Intel Core 2 Duo。
要小心的是 - 使用特定的GCC的擴展這樣的,這使得代碼不可移植。 – 2010-08-02 21:18:15
你看過這個代碼生成了嗎? – Aktau 2014-09-30 19:23:58