2013-11-03 111 views
2

我想超級優化一些代碼,並且我想加快的地方是以下內容。我可以將存儲在_m128 SSE寄存器中的浮點數直接移動到正常寄存器嗎?

我想採取一個_m128的點積操作(_mm_dp_ps)的答案,並將答案直接保存到寄存器中。但是,使用_mm_store,這意味着我不得不寫一個完整的128位數組,然後加載該數組的第一個條目。

調用我的_m128變量「vector」。

我可以做float ans = *((float *)& vector)嗎?

如果這有效,是否它仍然有幫助的問題依然存在。是否會被加載到一個寄存器中,或者我將不得不從L1加載它?

謝謝!!!

+0

現在......你試過了嗎? –

回答

3

結果實際上已經在註冊;您只需告訴編譯器將其解釋爲標量而不是矢量。您正在尋找的_mm_cvtss_f32稟道:

float result = _mm_cvtss_f32(vector_result); 
+0

謝謝Stephen =) –

0

就值得指出的taht如果你只使用一個值,你應該取代SS內在而不是ps的,其中可用的;在這種情況下,_mm_store_ss對於將低值存儲到單精度浮點而不需要使用_mm_cvtss_f32是完全有效的。

相關問題