用 MMX 与 SIMD 寄存器哪个速度快?
颇有意义的探讨在x86上128位二进制乘法最快速算法征解中,大家发现一个现象:同样用 SSE2 指令,但用 MM0~7 寄存器反比 XMM0~7 要快!
我查阅了一些资料,有说整数的乘法是基于FPU的,而MMX的 MM0~7 寄存器与FPU的 ST(0~7) 寄存器物理上是共用的,
而 SSE2 的整数乘法指令在 P4、P4E 及 AMD64 上也是用FPU单元实现的(Core2 的未知),
所以在做乘法运算时,用 MM0~7 寄存器有先天优势,而用 XMM0~7 寄存器要多一个数据搬运(我的理解)。
问题:
1、不知我上述推理是否合理?
2、除乘法外,其它指令用哪套寄存器最快?
3、未来的CPU的整型乘法是否会有区别于浮点的专用电路?
4、未来的SIMD的整型乘法是否可无需借助浮点计算单元?
欢迎讨论。。。 都存在数据搬运吧
现代CPU运算单元和寄存器单元是分离的吧
否则无法做到扩展
我想关键是XMM是128位的
某些操作要比MM寄存器多做一倍的工作
比如paddq mm只加一次 xmm要多加高64一次
乘法类似
所以延迟就多了 而且据我的知识
整乘法和浮点乘法是不同的
可能电路公用一些部分
但后部处理不同
整乘法存在并行的逻辑算法 我看到的说法是,SSE指令的延迟高一些,所以在小规模的指令群中,
还是MMX的要快一些,但是MMX要用EMMS清除,SSE可以不用
尤其是在乘除法只能在一个端口(乱序执行)中运算,延迟高必然总体速度快不了 emms占的比例如果问题规模大
是很小的吧 或者这么理解,在前后寄存器相关性比较紧密的时候,
操作XMM0~7的SSE指令延迟较高,导致流水线等待的时间多长,
而MMX延迟低,虽指令数多,但等待的时间短,更利于乱序执行 也许在未来CPU上SIMD系列指令进一步提速,
使每个指令执行的周期更小,延时更少,吞吐量更大,
倒有可能扭转当前的局面,不知对否? SSE除非发展出128位计算引擎
否则在大整数计算上XMM无法和MM寄存器抗衡的 到目前为止,对于大整数乘法的种种尝试表明,不管是PIV还是PM,使用 MMX 64bit 寄存器的指令总是具有优势。我想,主要原因是:使用 MMX 64bit寄存器的指令在打包/解包相对较为简单。如果使用SSE2 128bit 寄存器需要 更多的 打包/解包指令,引起指令条数的增加。128bit指令的高数据处理能力不足 抵消 额外的打包解包指令的开销,而且128bit指令具有更多的延时。
也许,将后的SSE2指令更加快速,敏捷。那时,我们可以尝试使用SSE2指令优化我们的程序。 如果64位流行了
在64位情况下
肯定有另外的结果
=====================
另外,早在2004(或者2005年,我不记得了)年我就在第一次发乘法汇编代码的时候说过
似乎MM寄存器比XMM快,可是你们还在96X96那帖子里用XMM寄存器
:P
页:
[1]
2