|
1
|
| Gilles-Philippe Paillé · 技术社区 · 3 年前 |
|
1
8
MSVC的代码比天真的要小
使用说明
|
|
2
5
x86不幸缺少
很酷,我没有意识到任何编译器都在使用这种代码大小优化来实现寄存器中的常量。
干得好,微软风投。GCC和Clang也应该这样做,至少与
GCC/clang
英特尔自冰湖有4/时钟
所有3个读取
按时间指示
( uops are scheduled oldest-ready first ,因此,在正常情况下,前端远远领先于正在执行的最旧指令,像这样的独立工作通常会发现差距。) 如果使用这些常量的任何指令将其与来自旧指令的数据一起使用,那么很可能实现常量的延迟将不是问题。 我认为在R8/R9/RCX准备就绪之前的额外延迟不太可能在现代无序的execx86中花费周期。
它把
我想知道编译器的算法是否选择了一个中间值,以使所有值都在
如果执行端口压力相当均匀,他们可能
不
当在同一周期中发出时,所有端口都被调度到不同的端口。看见
x86_64 haswell instruction scheduled on already used port instead of unused one
有关Haswell如何在同一周期中调度多个uop的详细信息。因此,这可能会造成资源冲突
所以这不是很明确,但我的直觉是,这在实践中不会成为问题。我想(也希望)MSVC开发人员在一些现有的代码库中对其进行了分析,没有发现任何严重的性能退化,并希望平均发现一些轻微的总体加速。 |