Performance 每个指令的周期数-汇编中的一行代码对不同的cpi操作求和吗?

Performance 每个指令的周期数-汇编中的一行代码对不同的cpi操作求和吗?,performance,assembly,x86,Performance,Assembly,X86,假设在汇编中有两条指令: movl $10, %ecx movl 0(%eax), %edx 移动的CPI为1,访问内存的CPI为2 对于第1行,CPI=1。对于第二个,CPI=2还是3?我们是不是把内存和2个周期加上移动成本,或者仅仅考虑内存消耗?循环计数实际上已经不起作用了,自从奔腾4进入市场以来。深层管道、三级内存缓存层次结构、无序执行的多个执行单元、分支预测 通常可以很好地猜测一段较大代码的时间,但对于两条独立的指令,这几乎是不可能的(除非一条指令恰好是DIV或IDIV,否则我们知道它

假设在汇编中有两条指令:

movl $10, %ecx
movl 0(%eax), %edx
移动的CPI为1,访问内存的CPI为2


对于第1行,CPI=1。对于第二个,CPI=2还是3?我们是不是把内存和2个周期加上移动成本,或者仅仅考虑内存消耗?

循环计数实际上已经不起作用了,自从奔腾4进入市场以来。深层管道、三级内存缓存层次结构、无序执行的多个执行单元、分支预测

通常可以很好地猜测一段较大代码的时间,但对于两条独立的指令,这几乎是不可能的(除非一条指令恰好是DIV或IDIV,否则我们知道它一定是坏的)。上下文很重要,因为依赖链起着重要作用(关键路径)

在实际代码中,如果两条指令在其他指令的延迟阴影中执行,则它们可能对总计时毫无贡献。另一方面,如果EAX寻址的值不在任何缓存中,则需要数百个周期,如果数据必须从磁盘分页,则需要数千个周期


电流包含您需要的一切。它包含了大多数指令的周期计数(延迟和吞吐量)表,以及数百页的简单周期计数不起作用的解释。

自从奔腾4上市以来,周期计数不再真正起作用。深层管道、三级内存缓存层次结构、无序执行的多个执行单元、分支预测

通常可以很好地猜测一段较大代码的时间,但对于两条独立的指令,这几乎是不可能的(除非一条指令恰好是DIV或IDIV,否则我们知道它一定是坏的)。上下文很重要,因为依赖链起着重要作用(关键路径)

在实际代码中,如果两条指令在其他指令的延迟阴影中执行,则它们可能对总计时毫无贡献。另一方面,如果EAX寻址的值不在任何缓存中,则需要数百个周期,如果数据必须从磁盘分页,则需要数千个周期


电流包含您需要的一切。它包含了大多数指令的周期计数(延迟和吞吐量)表,以及数百页解释为什么简单的周期计数不起作用的页面。

这不是我真正想要的,因为我正在学习基础知识。但感谢您的参与;)这两条指令的周期计数介于0和10000之间,具体取决于具体情况。寄存器到寄存器MOV的延迟和吞吐量为0.5,在理想条件下(一级缓存,地址稳定,偏移量<2048),内存访问导致延迟4;对于转发商店来说可能会少一些,但通常会多一些,或者更多。换句话说:你可以计算周期,但这些数字将完全没有意义。不,不会。它可以让你不需要任何周期,或者几十次,或者几千次。您可以将数字4.5写在两条指令的旁边,但它完全没有意义,与代码的实际运行时行为毫无关系。此外,不同CPU之间的数字差异很大。注意:在现代CPU中,不止一个执行管道,并且具有一定的指令放置顺序,如果指令之间没有依赖关系,则指令可以同时执行。因此,计算一条指令的循环并不是一个简单的数学问题。它还取决于其他指令在.Bottom周围的放置方式。Z80 CPU,具有1千字节RAM和十六进制显示。程序必须作为十六进制代码输入。教你很多关于汇编程序是如何工作的,如果你必须在纸上或头脑中完成他们的工作。。。我推荐和/或(用一键运行程序完成IDE)进行实践性实验。不过,C/C++中的内联汇编程序更方便。使用RDTSC指令,您可以读取CPU周期计数器,因此可以测量一段代码的实际周期。它在C/C++中也可用作
\uu rdtsc()
。这不是我真正想要的,因为我正在学习基础知识。但感谢您的参与;)这两条指令的周期计数介于0和10000之间,具体取决于具体情况。寄存器到寄存器MOV的延迟和吞吐量为0.5,在理想条件下(一级缓存,地址稳定,偏移量<2048),内存访问导致延迟4;对于转发商店来说可能会少一些,但通常会多一些,或者更多。换句话说:你可以计算周期,但这些数字将完全没有意义。不,不会。它可以让你不需要任何周期,或者几十次,或者几千次。您可以将数字4.5写在两条指令的旁边,但它完全没有意义,与代码的实际运行时行为毫无关系。此外,不同CPU之间的数字差异很大。注意:在现代CPU中,不止一个执行管道,并且具有一定的指令放置顺序,如果指令之间没有依赖关系,则指令可以同时执行。因此,计算一条指令的循环并不是一个简单的数学问题。它还取决于其他指令在.Bottom周围的放置方式。Z80 CPU,具有1千字节RAM和十六进制显示。程序必须作为十六进制代码输入。教你很多关于汇编程序是如何工作的,如果你必须在纸上或头脑中完成他们的工作。。。我推荐和/或(用一键运行程序完成IDE)进行实践性实验。不过,C/C++中的内联汇编程序更方便。使用RDTSC指令,您可以读取CPU周期计数器,因此可以测量一段代码的实际周期。它在C/C++中也可用作
\uu rdtsc()