如何確定程序的CPE? 例如,我有這樣的彙編代碼爲一個循環:如何確定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。如果一條指令需要兩個時鐘週期,另一條指令需要一條指令,那麼後者可以在前一個時鐘週期之後啓動?任何幫助,將不勝感激。謝謝
這是一個難以回答的問題,因爲所需的週期非常依賴於目標CPU。對於單個指令,不同的cpus可能需要不同的週期數。某些CPU可能能夠在並行流水線中亂序執行某些指令(如line5 + 6,而4正在等待3的結果),而另一些則不能。 –