我閱讀了這兩個操作的手冊描述,但還不明白其中的區別。有人可以用一個例子解釋一下 shufpd 與 pshufd 的比較嗎?
uj5u.com熱心網友回復:
pshufd將 32 位作為一個單元進行隨機播放。shufpd將 64 位作為一個單元進行隨機播放。pshufd在單個暫存器中洗牌。shufpd可以合并洗牌 2 個暫存器。pshufd具有單獨的源運算元和目標運算元,因此您有時可以在暫存器之間保存副本。- 它們可用于執行相同的任務,但混合整數和浮點指令(
pshufd使用浮點或shufpd整數)可能會導致繞過延遲。
下面是來自英特爾檔案的復制粘貼,用偽代碼解釋了每個操作。當您仔細閱讀時,差異非常明顯。
pshufd a, a, imm8
DEFINE SELECT4(src, control) {
CASE(control[1:0]) OF
0: tmp[31:0] := src[31:0]
1: tmp[31:0] := src[63:32]
2: tmp[31:0] := src[95:64]
3: tmp[31:0] := src[127:96]
ESAC
RETURN tmp[31:0]
}
dst[31:0] := SELECT4(a[127:0], imm8[1:0])
dst[63:32] := SELECT4(a[127:0], imm8[3:2])
dst[95:64] := SELECT4(a[127:0], imm8[5:4])
dst[127:96] := SELECT4(a[127:0], imm8[7:6])
shufpd a, b, imm8
dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
例子?
a = [1, 1, 2, 2]
b = [3, 3, 4, 4]
shufpd a, b, 1 -> [2, 2, 3, 3]
您不能使用 來執行此操作pshufd,但有時兩者都可以用于同一任務。
a = [1, 1, 2, 2]
pshufd a, a, 0x4e -> [2, 2, 1, 1]
shufpd a, a, 1 -> [2, 2, 1, 1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/489738.html
上一篇:乘以66049如何重復位?
