c语言中mw shl code,c – 使用SHLD / SHRD指令

博客讨论了如何通过调整GCC的-mtune和-march选项来影响其为现代Intel CPU生成的代码。文章指出,虽然GCC不倾向于使用SHRD指令,但在某些情况下,如BMI2可用时,它能生成更高效的代码序列。对比了GCC和Clang在特定指令集下的性能,显示了编译器选择对代码性能的影响。
摘要由CSDN通过智能技术生成

不,我看不到让gcc使用SHRD指令的方法.

您可以通过更改

-mtune and -march选项来操纵gcc生成的输出.

Or are there any gcc -mtune or other options that would encourage gcc to tune better for modern Intel CPUs?

是的,你可以让gcc生成BMI2 code:

例如:X86-64 GCC6.2 -O3 -march = znver1 // AMD Zen

生成:( Haswell时间).

code critical path latency reciprocal throughput

---------------------------------------------------------------

mov eax, 32 * 0.25

sub eax, edx 1 0.25

shlx eax, esi, eax 1 0.5

shrx esi, edi, edx * 0.5

or eax, esi 1 0.25

ret

TOTAL: 3 1.75

与clang 3.8.1相比:

mov cl, dl 1 0.25

shrd edi, esi, cl 4 2

mov eax, edi * 0.25

ret

TOTAL 5 2.25

鉴于这里的依赖关系链:Haswell上的SHRD较慢,与Sandybridge相关,在Skylake上较慢.

shrx序列的倒数吞吐量更快.

所以这取决于,在后BMI处理器gcc产生更好的代码,前BMI clang胜利.

SHRD在不同的处理器上有不同的时序,我可以看出为什么gcc并不过分喜欢它.

即使使用-Os(针对大小进行优化),gcc仍然不会选择SHRD.

*)不是时序的一部分,因为要么不在关键路径上,要么变成零延迟寄存器重命名.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值