兩個相關的問題。SSE:將__m128和__m128i轉換爲兩個__m128d
這是我的代碼需要處理大量數據。它在內部循環內完成,性能很重要。
- 將__int32和數組轉換爲雙精度(或將__m128i轉換爲兩個__m128d)。
- 將浮點數和浮點數轉換爲雙精度(或將__m128轉換爲兩個__m128d)。
基本上,我需要函數具有以下簽名:
void convert_int_to_double(__int32 const * input, double * output);
void convert_float_to_double(float const * input, double * output);
輸入和輸出指針對準和元件的數量是4的倍數的主要問題是如何快速解壓__m128成兩個__m128d。
爲什麼,到底是什麼?我的意思是,我沒有看到預先計算整數和浮點數的雙重版本有什麼優勢。最終,由於有更多的數據被移動,所以FPU加載比浮點數或整數加倍更慢。 – Skizz 2010-12-13 16:19:17
你爲什麼要在內循環內進行轉換?只需要在線性時間內將所有數據轉換爲「double」,在嵌套循環內部僅使用「double」(無需轉換),並在線性時間之後轉換爲結果類型。 – 2010-12-13 16:19:58