gxqcn 发表于 2008-4-16 08:04:44

原帖由 liangbch 于 2008-4-15 21:19 发表 http://images.5d6d.net/dz60/common/back.gif
到目前为止,对于大整数乘法的种种尝试表明,不管是PIV还是PM,使用 MMX 64bit 寄存器的指令总是具有优势。我想,主要原因是:使用 MMX 64bit寄存器的指令在打包/解包相对较为简单。如果使用SSE2 128bit 寄存器需要 更多的 打包/解包指令,引起指令条数的增加。128bit指令的高数据处理能力不足 抵消 额外的打包解包指令的开销,而且128bit指令具有更多的延时。
   也许,将后的SSE2指令更加快速,敏捷。那时,我们可以尝试使用SSE2指令优化我们的程序。

liangbch 这段话给了我新的启示,让我重新对提问本身的合理性产生了怀疑。

之前得出的结论是MMX寄存器快于SIMD的寄存器,那要先问我们的测试方法是否公平?

同样一条指令,用SIMD寄存器可以做双倍于MMX寄存器的活,
所以测试时应该采用前后依赖性性小的语句,一条SIMD寄存器替换成双倍的MMX寄存器的,
然后再运行多次进行比较,这样的测试才能令人信服。

我们之前的x86上128位二进制乘法最快速算法征解,
为了进位问题,不得不额外进行打包/解包等过程,而该过程中SIMD寄存器比MMX寄存器更麻烦,
所以在相同任务下,用SIMD寄存器并没有换来指令数的成半减少,所以其落后是理所当然的了。

而有许多任务,并行度非常高,类似于DSP可同时进行的四路并行计算,
用更长的寄存器,将换来更少的执行次数,
我想,这时,前者肯定会有更优异的表现。

无心人 发表于 2008-4-16 08:11:34

此言差矣

同样的程序,只更换MM为XMM,结果你们也看到了
是绝对的时间增加,所以结论就是我说的
XMM要处理加倍的数据,而目前的CPU只能一次处理64位数据
造成了,高延迟
可能最新的一次处理128bit数据的CPU能弥合这种差异
不过我想也不能做到和MM一致吧
除非完全利用XMM,一次处理双倍数据
而此时又遇到解包的麻烦

我在SSE4里发现好多有趣的指令
可以解决这些问题
:lol
所以我们就能做的是等待
等待时间解决这一切

shshsh_0510 发表于 2008-4-16 09:47:27

原帖由 无心人 于 2008-4-16 08:11 发表 http://images.5d6d.net/dz60/common/back.gif
只更换MM为XMM,是绝对的时间增加...
美眉换成小美眉当然要等她长大了! 学习中打个岔:lol

无心人 发表于 2008-4-16 10:09:33

你厉害
你厉害

liangbch 发表于 2008-4-16 10:53:02

到目前为止,所有的实验还证实了这样一个事实,即使 XMM 128bit的版本指令数能够做到 和 MMX 64bit 版本一样少,其耗时仍然高于后者。也就是说,平均下来,执行每条SSE2 128bit的指令需要比 64bit 更多的时间。
综上(包括楼上 )所述,使用SSE2指令计算大数乘法,
   1)很难做到指令数 比 64bit 指令更少。
   2)即使做到指令数等于64bit指令,也由于128bit指令的高延时,导致速度慢于64bit 指令。
   3)SSE2 128bit 指令为我们提供了一个美丽的前景,他具有很强的数据处理能力,但实际上,我们在计算大数乘法乘法根本无法享受到它的好处。

无心人 发表于 2008-4-16 10:56:26

可以

前提是用SSE4
页: 1 [2]
查看完整版本: 用 MMX 与 SIMD 寄存器哪个速度快?