実行時間を取得するために、この式を使用しました。
Execution time = Cpu time + memory time
それから、
Execution time = (#instructions * average instruction execution time) +
(Misses Cache l1 * latency L2) +
(Misses Cache l2 * latency access memory).
この方程式をチェックするために簡単なプログラムを開発しました。次は擬似コードです。
ini_time = get_cepu_time();
Init_Papi_counters;
//intesive computation code (matrix mult)
End_Papi_counters();
end_time = get_cepu_time();
end_time = end_time - ini_time.
得られる値は次のとおりです。
Execution time: 194,111 sec
Cycles: 568949490685
Instructions: 676850501790
Misses L1: 30666388828
Misses L2: 1743525419
インテルのマニュアルで取得されるレイテンシーは次のとおりです。
Acces L2: 4,8 ns
Acces main memory: 110 ns
次に、方程式を適用すると、次のようになります。
Misses L1 * Latency l2 = 147 sec
Misses L2 * memory access time = 193 sec
ご覧のとおり、メモリ時間の構成要素の合計は、合計実行時間よりも長くなっています。
194 < 147 + 193 ERRORRRRR
実行時間を概算する方法を見つけるために私を助けてくれませんか。