我應該選擇哪種方法編寫SIMD指令?xmmintrin.h vs gcc向量擴展
mm *方法形式* mmintrin.h在編譯器中似乎更具可移植性。
但gcc vector extensions似乎產生更簡單的代碼,並支持更多的體系結構。
那麼哪種方法最好?
我應該選擇哪種方法編寫SIMD指令?xmmintrin.h vs gcc向量擴展
mm *方法形式* mmintrin.h在編譯器中似乎更具可移植性。
但gcc vector extensions似乎產生更簡單的代碼,並支持更多的體系結構。
那麼哪種方法最好?
如果您使用gcc向量擴展,您將只能使用SSE功能的有限子集,因爲有許多SSE內在函數不適合通用向量模型(如gcc's)。如果你只想做相當基本的東西,例如向量上的浮點運算,那麼你可能會忽略它,但是如果你有興趣利用SIMD來獲得最大的性能好處,那麼你需要使用本地內在函數。
* mmintrin.h文件中的內部函數僅適用於SSE機器,但它們可在不同的編譯器中使用。 GCC矢量擴展更加有限,但在更廣泛的平臺上實現,顯然GCC特定。
和所有一樣,沒有「最好」的答案;你將不得不選擇一個適合你的需求。
您可以同時使用兩者。我就是做這個的。矢量擴展涵蓋了大多數垂直操作,這是大部分時間應該使用的操作。當你需要其他操作時你可以施放。例如,如果你有一個16字節的矢量'x',你可以執行'_mm_movemask_epi8((__ m128i)x)'。 – 2018-01-17 14:07:48