[英]In SIMD, SSE2,many instructions named as "_mm_set_epi8","_mm_cmpgt_epi8 " and so on,what does "mm" "epi" mean?
[英]Why does does SSE set (_mm_set_ps) reverse the order of arguments
我最近注意到了
_m128 m = _mm_set_ps(0,1,2,3);
在轉換為float數組時,將4個浮點數置於相反的順序:
(float*) p = (float*)(&m);
// p[0] == 3
// p[1] == 2
// p[2] == 1
// p[3] == 0
union { _m128 m; float[4] a; }
union { _m128 m; float[4] a; }
union { _m128 m; float[4] a; }
也。
為什么SSE操作使用這種排序? 這不是什么大問題,但有點令人困惑。
還有一個后續問題:
當通過索引訪問數組中的元素時,是否應該按0..3
或3..0
的順序3..0
?
根據您的想法,您可以使用_mm_set_ps或_mm_setr_ps。
__m128 _mm_setr_ps(float z,float y,float x,float w)以相反的順序將四個SP FP值設置為四個輸入。
這與x86硬件的little-endian性質不一致嗎? 它存儲long long字節的方式。
這只是一個慣例; 他們必須選擇一些訂單,只要每個人都遵循它,訂單是什么並不重要。 英特爾恰好喜歡小端。
至於按索引訪問...最好的辦法是盡量避免這樣做。 沒有什么能像元素訪問一樣殺死矢量性能。 如果必須,請嘗試進行設置,以使索引與硬件矢量通道匹配; 這就是大多數矢量程序員(根據我的經驗)所期望的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.