如何确定一个程序的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
我必须找到下界通过使用数据类型float关键路径确定的CPE的。 我认为,关键路径将指向最慢的可能的路径,从而将是一个地方的方案有,因为占用的时钟周期最长数执行mulss指令。
然而,似乎没有被任何明确的方式来确定CPE。 如果一个指令需要两个时钟周期,前者的第一个时钟周期后,另一个需要一个,能后者开始? 任何帮助,将不胜感激。 谢谢