Ped*_*ino 0 performance x86 assembly
想象一下,你有两个装配说明:
movl $10, %ecx
movl 0(%eax), %edx
Run Code Online (Sandbox Code Playgroud)
移动的CPI为1,内存的CPI为2.
对于第一行CPI = 1.对于第二行,CPI = 2还是3?我们总结进入内存(2个周期)+移动成本,还是只考虑对内存的访问?
自Pentium 4上市以来,循环计数已不再适用.深度管道,三级内存缓存层次结构,多个执行单元,无序执行,分支预测......
通常可以很好地猜测更大的代码的时间,但是对于两个独立的指令,实际上是不可能的(除非一个指令恰好是DIV或IDIV,否则我们知道它一定是坏的).上下文很重要,因为依赖链起着重要的作用(关键路径).
在实际代码中,如果它们在某些其他指令的延迟阴影中执行,那么您的两条指令可能对总时序没有任何贡献.另一方面,如果EAX解决的值不在任何缓存中,那么它需要花费数百个周期,如果数据必须从磁盘中分页,则需要花费数千个...
当前的英特尔®64和IA-32架构优化参考手册包含您需要的所有内容.它包含大多数指令的循环计数(延迟和吞吐量)表,以及几百页解释为什么简单的循环计数不起作用.
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |