我讀過的關於使用C/C++內在類型來處理SIMD功能(如MMX和SSE)的一切都表明,您應該將這些類型用作不透明類型,而不是直接引用內部函數。但是,當我看到很多示例時,他們通過獲取(明確對齊的)指向原始數據的指針並將其重新解釋爲指向內部類型的指針,然後再進行工作。但是,通過使用指向內部類型的指針,特別是在將其他數據別名爲這些類型時,是否違反該規則?SIMD內部函數和指針
0
A
回答
4
你似乎發現的是大多數例子都是吸引人的。
引用SSE類型的「內部」實際上相當安全(只要它編譯),並且實際上你可以在內存中將它們別名爲內存中的「正常」數據類型,並且很多的人這樣做是因爲它使得代碼更方便地編寫和使用。
但它幾乎毀了使用SIMD的要點。它阻止了很多優化,這意味着編譯器必須不斷地存儲/加載SIMD數據類型,而不是將它們保存在SIMD寄存器中。
你可以這樣做,但你應該不是。正如你發現的那樣,許多人認爲「應該」是「隨意做到這一點」。
+0
這就是我認爲的可移植性,它當然會起作用,但編譯器會爲這些特定實例生成次優代碼。 – Omaha
相關問題
- 1. C++接受成員函數指針和外部函數指針
- 2. 更改函數內部的指針
- 3. 類內部的指針方法/函數
- 4. 函數和指針
- 5. 函數指針和函子
- 6. 寫入(函數原型,函數指針,外部指針)更小
- 7. 類內的函數指針
- 8. C++函數指針內聯
- 9. C:指針內聯函數
- 10. 函數指針 - 類內外
- 11. 函數內部的C++指針創建和賦值
- 12. 英特爾內部函數 - 函數指針加載/存儲
- 13. 更改函數內部的指針函數外並不反映
- 14. 內聯函數的函數指針C
- 15. 局部指針指向全局函數
- 16. c函數指針反函數指針
- 17. 內存分配指針指向數組和指針指針
- 18. 指向內部命名空間的成員函數的指針
- 19. 函數內部的指針變量指向堆棧或堆?
- 20. 內存分配函數內指針指針
- 21. 指針?指針函數?
- 22. 函數獲取函數指針和類指針?
- 23. 在函數內部傳遞指針用於內存分配?
- 24. 在函數內部分配內存後使用雙指針
- 25. 指針,鏈表和函數
- 26. 函數指針和繼承
- 27. 文件指針和函數
- 28. 代表和函數指針
- 29. 處理函數和指針
- 30. javascript函數指針和「this」
正常情況下,指向原始數據的指針是一個'unsigned char *'或'void *',當涉及到指針混疊時它有特殊的規則。一旦你有了實際的內在類型,你就可以使用內部類型指針來引用它。 –