簡體   English   中英

SSE的整數/浮點值

[英]Integer/Floating points values with SSE

我必須將一個整數向量與另一個整數向量相乘,然后將結果(一個整數向量)與一個浮點值向量相加。

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

確實,我經常在__m128寄存器中使用整數,而且我不知道我是在浪費時間(隱式轉換值)還是同一件事。

我正在使用-O3選項進行編譯。

您可能應該只對所有內容都使用SSE(MMX只是SSE的過時版本)。 如果要主要針對較新的CPU,那么您甚至可以考慮使用AVX / AVX2。

首先在標量代碼中清晰,穩健地實現所有內容,然后對其進行基准測試。 標量實現可能會足夠快,而您無需執行其他任何操作。 此外,gcc和其他編譯器(例如clang,ICC甚至Visual Studio)在自動矢量化方面已相當不錯,因此您可以“免費”獲得滿足性能需求的SIMD矢量化代碼。 但是,如果此時仍需要更好的性能,則可以開始將標量代碼轉換為SSE。 不過,請保留原始的標量實現以進行驗證和基准測試-在優化代碼時很容易引入錯誤,並且知道優化后的代碼比基線代碼快多少很有用(您可能正在尋找2倍至4倍之間的某個值) SSE與標量代碼相比更快)。

盡管先前的答案是合理的,但有一個顯着差異-數據組織。 對於直接的SSE使用,最好將數據組織為數組結構(SoA)。 通常,您的標量代碼可能具有圍繞結構數組(AoS)布局制作的數據。 如果是這種情況,則很難從標量轉換為矢量形式

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM