【发布时间】:2012-05-12 06:08:39
【问题描述】:
如何确定课程的 CPE? 例如,我有一个循环的汇编代码:
# inner4: data_t = float
# udata in %rbx, vdata in %rax, limit in %rcx,
# i in %rdx, sum in %xmm1
1 .L87: # loop:
2 movss (%rbx,%rdx,4), %xmm0 # Get udata[i]
3 mulss (%rax,%rdx,4), %xmm0 # Multiply by vdata[i]
4 addss %xmm0, %xmm1 # Add to sum
5 addq $1, %rdx # Increment i
6 cmpq %rcx, %rdx # Compare i:limit
7 jl .L87 # If <, goto loop
我必须使用浮点数据类型找到由关键路径确定的 CPE 的下限。我相信关键路径是指可能的最慢路径,因此是程序必须执行 mulss 指令的路径,因为它占用了最长的时钟周期数。
但是,似乎没有任何明确的方法来确定 CPE。如果一条指令需要两个时钟周期,而另一条需要一个时钟周期,那么后者可以在前者的第一个时钟周期之后开始吗?任何帮助,将不胜感激。谢谢
【问题讨论】:
-
这是一个很难回答的问题,因为所需的周期非常依赖于目标 CPU。对于单个指令,不同的 CPU 可能需要不同数量的周期。一些 CPU 可能能够在并行管道中乱序运行一些指令(如第 5 行 + 6 行,而 4 正在等待 3 的结果),而另一些则不能。
标签: performance architecture assembly x86 sse