Vin*_*ent 1 c x86 assembly multiplying fma
经典的Multiply-Accumulate操作是a = a + b*c.但我目前想知道是否存在允许在1个时钟周期内对整数执行以下操作的ASM指令:(a和b是无符号的64位整数:unsigned long long int)
a = a*2-1
a = a*2+b
目前,我使用:
a *= 2
--a
对于第一个和
a *= 2
a += b
对于第二个.我认为每个都被转换为ASM中的2条指令.但有没有办法使用1 ASM指令(以及在Intel CPU上使用哪个指令集扩展)?
(我搜索那个因为我这次操作数十亿次)
对于Intel CPU,请参阅LEA说明.它可以在一个指令中完成两个任务(不确定周期).(例如LEA EAX, [EAX*2+EBX]).请注意,这并非真正意味着乘法加法,因此它有趣的名称(加载有效地址).
在C和C++中,你不应该打扰.编译器会做它认为最好的事情,你可能只是阻碍它的努力.我会保持良好的年龄a = a*2-1.
PS:如果你认为某些内容被翻译为两个指令,那么没有什么比查看程序集更容易了.然后你就会知道.
| 归档时间: | 
 | 
| 查看次数: | 863 次 | 
| 最近记录: |