簡體   English   中英

為什么SSE設置(_mm_set_ps)反轉參數的順序

[英]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..33..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.

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