これを行うための迅速で簡単な方法はありますか (少なくとも大まかな見積もりのために) ?
私はアルゴリズムのベンチマークを行っていますが、コンピューターが命令を実行する絶対速度を知り、それを漸近解析と比較するのはクールだと思いました。
これを行うための迅速で簡単な方法はありますか (少なくとも大まかな見積もりのために) ?
私はアルゴリズムのベンチマークを行っていますが、コンピューターが命令を実行する絶対速度を知り、それを漸近解析と比較するのはクールだと思いました。
CPU でできることを知りたい場合は、ドキュメントを参照してください。CPU ベンダーは、すべての命令のレイテンシとスループット、およびその他のさまざまな情報 (サイクルごとに発行またはリタイアできる命令の数、キャッシュのレイテンシなど) を指定します。これに基づいて、理論上のピーク スループットを計算できます。
CPU が実際に行っていることを実行したい場合は、独自のコードを実行してそのパフォーマンスを測定してください。
ただし、最新の CPU は非常に複雑な獣であり、そのパフォーマンスはさまざまな要因に依存することを覚えておいてください。CPU を最大限に活用し、その理由、または正確に何があなたを保持しているのかを理解することはほとんどできません。コードを戻すには、ハードウェアをかなり完全に理解する必要があります。(私の通常の経験則では、理論上のピーク FLOPS の 30 ~ 40% を維持できれば、非常にうまくやっているということです)
最新の CPU は命令処理をパイプライン処理しているため、そのような定数はありません。
ただし、アルゴの開始時と終了時に CPU ティック数を読み取ることができます。これは、このような測定で得られる限りの低レベルだと思います。
http://en.wikipedia.org/wiki/Time_Stamp_Counter
注: これが 100% 正確ではない理由はたくさんあります。いくつか挙げることができますが、コミュニティがリストに追加できると確信しています:最初は遅く実行され、その後実行されると速く実行されます) - 古い CPU では、CPU ティックは CPU 周波数に対して不変ではありません。
Linux で Perf ツールを使用できます。使いやすいです。
CPU サイクル、サイクルごとの命令 (IPC)、キャッシュ ヒット/ミスなどの統計を取得するには、Perf でプログラムを実行するだけです。サンプルコマンドは
パフォーマンス統計 -d<exename>
詳細については、http://www.brendangregg.com/perf.htmlまたはhttps://perf.wiki.kernel.org/index.php/Tutorialを参照してください。