2014-04-20 35 views
1

有人能告诉我怎样才能算出32位无符号整数乘法的最大数量我可以通过SSE/AVX使用SIMD在Ivy Bridge CPU上同时完成的最大数量?使用SSE/AVX在Ivy Bridge上进行最大SIMD整数乘法?

我知道AVX确实有用于乘法的256位寄存器,但是这是用于浮点的(AVX2引入了256位整数寄存器)。因此,我不太确定使用浮点寄存器进行整数乘法(如果可能的话)是否会更好?

此外,我不确定它是否仅仅关注寄存器的数量,还是我需要查看CPU的端口。看起来像端口0和端口5可以处理SSE整数ALU?

+0

你可以使用double来代替。所有32位整数完全由双精度表示 –

+1

@LưuVĩnhPhúc:虽然这是真的,但它也需要更多空间,只有4个适合AVX寄存器,完全无法达到目的。您已经可以在SSE寄存器中放入四个32位整数。 –

+0

伙计们我发现了这个我需要的例子,但是它对于带符号整数,有没有人知道如何改变它为无符号? http://stackoverflow.com/questions/10500766/sse-multiplication-of-4-32-bit-integers – user997112

回答

1

您可以做一个pmulld =每个时钟4次乘法。

因此,我不是非常确定是否更好地使用浮点寄存器进行整数乘法(如果可能的话)?

没有这样的可能。你当然可以把8个整数放在ymm寄存器中,但是你会被卡住。你需要做一些有用的指令在AVX2中。

+0

有一个称为_mm_mul_ps的英特尔内在函数,它采用2个128位4字节数组,将它们相乘并使用MULPS。 MULPS和PMULLD有何区别? – user997112

+3

@ user997112'mulps'乘法浮点数,'pmulld'用于整数。 – harold

+0

我发现这个:http://stackoverflow.com/questions/10500766/sse-multiplication-of-4-32-bit-integers但他们正在寻找乘法签名整数,我想无符号。你能否告诉我们代码将如何改变? – user997112