私はプログラムを持っており、異なる入力サイズの実行時間(壁掛け)を測定したいと思っています。実行時間の測定 - プログラムコードまたはシェルでの測定?
私は、CPU分岐予測子、レジスタ名変更、投機実行、アウトオブオーダー実行などの理由で、ソースコード内でclock_gettime
を使用しても信頼性がないと読んでいます。私が置いた場所以外のどこかでclock_gettime
コールを移動することができます。
しかし、私が読んだこれらの質問は、特定の機能の時間を測定することに関するものでした。プログラム全体(すなわち、main
機能)を測定している場合、これらの問題は依然として存在するでしょうか?私は絶対的な値ではなく、異なる入力サイズに対して実行時間がどのように変化するか、相対的な測定を探しています。
どうすればより良い結果が得られますか?コード内のタイミング機能を使用:
bash
で
start = clock_gettime();
do_stuff();
end = clock_gettime();
execution_time = end - start;
またはtime
コマンドで:
time ./program
「隔離して数秒かかる」とはどういう意味ですか?すべての繰り返しをスリープコールに追加する必要がありますか? – devil0150
@ devil0150間違いなく!私は、実行時間がランダム遅延/コンテキストスイッチ/キャッシュを満たす/よりも長いことを意味するループを十分に繰り返します。測定されたコードの実行時間が通常10msで異なる場合、または何かの理由で10msだけ遅延することがあります同時にスワップすることに決めた場合は、コードを1秒間実行してエラーを無視してください。また、何百回も実行することができ、各実行を正確に測定し、最低の時間を選択することもできます。 – viraptor