[英]How can I check if my installed numpy is compiled with SSE/SSE2 instruction set?
[英]SSE2 Instruction, PMULUDQ Multiplication Question
在我調試的代碼中,有一個匯編指令,如下所示:
pmuludq xmm6, xmm1
xmm6 = 0x3736353433323130
xmm1 = 0x7D35343332313938
如果使用Python將上述2個數字相乘,結果如下所示:
>>> hex(0x3736353433323130 * 0x7D35343332313938)
'0x1b00f1758e3c83508a9f69982a1e7280L'
但是,當我調試代碼時,乘法操作后的xmm6寄存器值為:0x0A09A5A82A1E7280
為什么結果不同? 以及如何使用Python模擬此指令?
請查看手冊中“操作”部分的偽代碼: http : //felixcloutier.com/x86/PMULUDQ.html 。
它進行兩個32x32 => 64(dword x dword => qword)的乘法,在16字節寄存器的每一半中都一個。 (它忽略輸入的奇數雙字元素)。 您只顯示了16個十六進制數字作為輸入,因此我認為您只是在查看輸入寄存器的低qword。
如果只關心低64位,那么等效操作很簡單
result = (a & 0xFFFFFFFF) * (b & 0xFFFFFFFF)
它對高64位重復相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.