x86-64 マシン コードにコンパイルする C++ 関数があり、特定の入力での実行時間を測定したいと考えています。コードを変更するとパフォーマンスが低下する時期を知りたいので、このベンチマークを CI で実行し、関数の実行に最大 X ミリ秒かかることをテストします。
ただし、実行時間は非決定論的であるため、そのようなテストは不安定になります。
このテストを決定論的にするために使用できるツールはありますか? そのようなツールは、エミュレーターでコードを実行し、ヒューリスティックを使用して合計を概算することにより、(特定のクロック レートで特定の CPU モデル上で、特定の RAM クロック/レイテンシで) 実行時間の決定論的な見積もりを提供すると想像します。実行時間。
(単純なヒューリスティックは、リタイアしたマシン命令をカウントし、命令ごとに Y ns を想定することですが、より洗練されたアプローチでは、メモリ アクセスを調べてキャッシュ ヒット/ミスをモデル化することもできます。そのようなツールを使用できなかった技術的な理由はわかりません。最新の CPU アーキテクチャの複雑さと、それらがサポートする命令セットのサイズを考えると、正確に近い推定値を取得するものを書くのは難しいということを除けば、存在しません。)