C/C++コードの正確なベンチマークのために推奨される方法論/ライブラリは何ですか?単に実行時間を測定することの不正確さ、すなわちCPU周波数およびシステム負荷が実行時間にわたって変化する可能性があることを克服するもの。私のコードのボトルネックが(おそらく)メモリアクセスになるので、実行された命令のカウントが正しいアプローチであるかどうかは分かりません。C/C++コードの単純で正確なベンチマーク
答えて
GNUプロファイラgprofは、signle-threadedコードのパフォーマンス測定を行う伝統的な方法です。コードを手動で計測する必要はありません。ビルド中にgccにオプションを追加するだけです。
-p(gprof enable)でコンパイルされないライブラリがあると、gprofを使用できないため、ライブラリ関数がベンチマークで正確に数えられない可能性があります。 –
@ e.jahandarはい、トップレベル関数のみライブラリがベンチマークされます。しかし、あなたがlibのソースコードを持っていない場合は、通常、下位レベルの関数についても気にしません。実際には、システムコールやマルチスレッド化により多くの問題が生じます。 –
あなたが求めていることは不可能に近いです。
最新のプロセッサでは、キャッシュと仮想メモリの影響により実行時間が非常に非確定的であるためです。さらに、いくつかの演算のサイクル数は、引数の特定の値に依存します。
これは、静的なベンチマーク(ソースコードを見ているだけ)は正確ではなく、プログラムの実行を避けることができないことを意味します。その後、実行時間は実行ごとに変動します。
2回目と次回の実行が最初の実行の影響を受け、現実的な状態にならないため、数回の実行を平均しても不正確です。
実際には、「実行時間」はもう存在しません。
ユーザ入力のないプログラム(私の場合)の実行時間は、確率的な方法で定義できます。 *環境*(実行前のシステム状態、入力イベントのストリーム)が与えられると、実行時間はほぼ決定的になります。したがって、実行時間は、適切な分布から選択されたランダムな環境を仮定して、予想される実行時間として定義することができます。 – fhucho
単純なベンチマークでは、測定された実行時間の改善が異なる環境または変更されたプログラムの結果であるかどうかわかりません。平均化はある程度しか助けません。私が探していたのは、ランダムな環境(CPU周波数など)の影響を最小限に抑えることでした。 – fhucho
CPU周波数は完全に非ランダムな唯一のパラメータです! –
clock()でtickとtockを使用し、forループで関数をラップすることによって少なくとも1/10秒間実行します。これにより、ほとんどのキャッシング効果が排除されます。ただし、実際に使用すると関数が部分的にキャッシュされたコンテキストで実行されるため、必ずしもキャッシュを削除する必要はありません。それに答えるのは難しいです。
X86をお使いの場合、インテルV-Tuneアンプを試してみると、CまたはC++アプリケーションの詳細なマイクロアーキテクチャ解析ができます。実行時間を測定するためのCPU組み込みのパフォーマンスカウンタと、ナンバーキャッシュミスや多数のマイクロアーキテクチャレベルの情報を使用します。
他のプログラムは、同じハードウェアパフォーマンスカウンタを使用することができます。例えばLinuxの 'perf stat。/ myprogram'は、プログラム全体のカウンタのデフォルトセットを測定します。 –
- 1. TheanoとCNTKのベンチマークGPUの単純マトリクスベクトルプロダクト
- 2. 単純なコード
- 3. の問題私はこの単純なCコードのベンチマークにしたいgooglebenchmark
- 4. リカレントニューラルネットワークの最も単純なベンチマークは何ですか?
- 5. CreateJS/Adobe Animate CC:単純な関数のテスト
- 6. 私の単純なコードは、
- 7. 単純なpythonコードのデバッグ
- 8. 単純なJavaコードでエラーを修正してください
- 9. 単純な正規表現
- 10. オープンソースデータベースソフトウェアの正式なベンチマーク?
- 11. 私のコードの単純な短縮
- 12. Pythonの単純なTensorflowコードのエラー
- 13. PHP:単純なXMLと異なるコードページとデータの正確な取得
- 14. 単純なPHPコードの構文エラー
- 15. javascriptまたはjqueryの単純なコード
- 16. 単純なEigenFacesの分類コードR
- 17. PHP - 私は単純なコード持っ
- 18. 単純なコードで作業しないまでの文
- 19. 単純なPython正規表現置換
- 20. 単純な正規表現PHP
- 21. 単純なHTML DOMが正しく
- 22. 単純な角度モジュールが正しく
- 23. 2単純な正規表現
- 24. 私のサイトのHTMLコードで動作しない単純なスクリプト
- 25. Scalaでの単純な式の不正な開始(フィボナッチ関数)
- 26. Javaでの単純で効率的なデータベースカスタムORMコードの作成
- 27. 状態が正常でない単純な反応の例
- 28. str_replaceは、私は、次の、単純なコードを持って正しく
- 29. 正確なコードは、ローカルリソースwikitude
- 30. Z3の単純化戦術は正確に何をするのですか?
C/C++コードとは何ですか? –
@LightnessRacesinOrbit googleそれで – fhucho
今私は感謝を知っている –