隨着4包裝float
(__m128
),我可以使用上證所內在如何將__m256d中的所有元素設置爲另一個__m256d的第三個元素?
__m128 X;
__m128 H = _mm_shuffle_ps(X,X,_MM_SHUFFLE(3,3,3,3));
到H
所有元素設置爲X
第三個元素(這是最快的方法是什麼?)
現在,我想用4個包裝double
(__m256d
)做同樣的事情。我天真地編碼
__m256d X;
__m256d H = _mm256_shuffle_pd(X,X,_MM_SHUFFLE(3,3,3,3));
但這並沒有做正確的事情!相反,它設置H = {X [1],X [1],X [3],X [3]}。
那麼,怎麼做對不對?
使用英特爾(R)至強(R)CPU E5-2670 0 @ 2.60GHz 編輯
看到這個問題:[使用單個AVX內部函數反轉一個包含雙精度的AVX寄存器](http://stackoverflow.com/questions/13422747/reverse-a-avx-register-containing-doubles-using-a-single -avx-intrinsic) – Mysticial
對於256位向量沒有等價物。您需要使用兩個shuffle/permute instrinsics,因爲一個只能在128位塊中置換,另一個不能在128位的邊界上置換。 – Mysticial
@Mysticial好。那麼你能提供所需的代碼嗎(作爲答案)?否則,我會自己弄清楚(並回答我自己的問題)。 – Walter