2011-05-02 38 views
0

_mm_shuffle_ps可以複製從a 2輛花車和2從b,對不對?有沒有簡單的方法來從b得到a和1 3輛花車?我也注意到_mm_move_ss可以完成這項工作的一部分,但它不會轉移。更好_mm_shuffle_ps可以從一個來源獲取3個元素?

編號:

__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8) 
+0

這取決於你是否能承擔最小的SSE版本,例如SSSE3或SSE4? – 2011-05-02 20:10:51

+0

我可以使用SSE3和SSE4。 – echo 2011-05-03 18:20:12

回答

2

如果你有SSE4然後用BLENDPS,對於其內在是:

__m128 _mm_blend_ps (__m128 v1, __m128 v2, const int mask); 
+0

_mm_shuffle_ps的優點是它可以做一些輪班工作,但_mm_blend_ps不能。 – echo 2011-05-03 19:07:44

+3

@echo:如果這就是你需要的,那麼你應該編輯你的問題來包含那個需求 – 2011-05-03 19:45:50

1

不幸的是,只有2源洗牌是movssmovsdshufpsunpckl/hps/dmovhlps以及類似的非靈活指令。

palignr might be useful,即使使用FP指令之間的int洗牌,如果你的數據移動需求,符合其模式旁路延遲。

AVX512添加2-源充分混洗(泳道交叉,與矢量選擇器),用於各種元件的尺寸。東西如vpermi2wvpermt2b

正如Paul指出的,混合是組合數據的靈活方式,無需混洗。


查看Agner Fog's Optimizing Assembly guide瞭解按數據移動類型組織的指令表。另請參閱標記wiki。

相關問題