2015-04-21 62 views
0

我必須將整數向量與其他整數向量相乘,然後將結果(所以是一個整數向量)與浮點值向量相加。使用SSE的整數/浮點值

我應該使用MMX還是SSE4作爲整數,還是我可以使用SSE和所有這些值(即使有整數?)將整數放入__m128寄存器中?

事實上,我經常在__m128寄存器中使用整數,並且我不知道是在浪費時間(隱式轉換值)還是它是相同的東西。

我正在編譯-O3選項。

+1

向我們展示你想與一些代碼做什麼。顯示Paul R建議您想要執行的標量代碼。 –

回答

1

你可能應該只使用SSE來處理所有事情(MMX只是一個非常過時的SSE前身)。如果你打算主要瞄準較新的CPU,那麼你甚至可以考慮AVX/AVX2。

首先在標量代碼中實施一切乾淨而健壯的工作,然後對其進行基準測試。標量實現可能足夠快,您不需要做其他任何事情。此外,gcc和其他編譯器(例如clang,ICC,甚至Visual Studio)在自動矢量化方面越來越合理,因此您可以「免費」獲得SIMD矢量化代碼,以滿足您的性能需求。但是,如果您現在仍然需要更好的性能,那麼您可以開始將您的標量代碼轉換爲SSE。雖然保留原始標量實現以進行驗證和基準測試,但在優化代碼時引入錯誤非常容易,而且知道優化後的代碼比基準代碼快多少(您可能正在尋找介於2到4倍之間的代碼)對於SSE和標量代碼,速度更快)。

0

雖然以前的答案是合理的,但有一個顯着的差異 - 數據組織。對於直接SSE,使用數據可以更好地組織爲陣列結構(SoA)。通常情況下,您的標量代碼可能具有圍繞陣列結構(AoS)佈局製作的數據。如果是的話,從標量轉化爲矢量形式將難以

更多閱讀https://software.intel.com/en-us/articles/creating-a-particle-system-with-streaming-simd-extensions

+1

我認爲很難說OP應該做什麼,直到他向我們展示一些代碼。 –