プログラムの 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 を決定する明確な方法はないようです。ある命令が 2 クロック サイクルかかり、別の命令が 1 クロック サイクルかかる場合、後者は前者の最初のクロック サイクルの後に開始できますか? どんな助けでも大歓迎です。ありがとう