1

私は秋に計算幾何学のコースを受講しています。そこでは、CまたはC ++でいくつかのアルゴリズムを実装し、それらのベンチマークを行います。ほとんどの学生は、いくつかのデータセットを生成し、timeコマンドを使用してプログラムを測定しますが、もう少し徹底的にしたいと思います。

さまざまなデータセットを自動的に生成し、それらを使用してプログラムを実行し、Rを使用して仮説をテストし、パラメーターを推定するプログラムを作成することを考えています。

では...プログラムの実行時間をより正確に測定するにはどうすればよいですか?

測定に関連するものは何ですか?

テストするのに興味深いと思われる仮説は何ですか(分散、キャッシングによって引き起こされる影響など)?

コードを複数のマシンでテストする必要がありますか?これらのマシンはどのように異なりますか?

私の全体的な目標は、これらのアルゴリズムが実際にどのように機能するか、どの実装手法が優れているか、ハードウェアが実際にどのように機能するかを学ぶことです。

4

5 に答える 5

1

プロファイラーは素晴らしいです。Valgrindはかなり人気があります。また、いくつかにアクセスできる場合は、RISC マシンでコードを試してみることをお勧めします。それらのパフォーマンス特性は、cisc マシンのパフォーマンス特性とは興味深い点で異なります。

于 2010-07-14T21:39:57.223 に答える
0

Windows APIタイミング関数を使用でき(正確ではありません)、ナノ秒未満の正確なRDTSCインラインアセンブラコマンドを使用できます(コマンドとその周辺の命令により、数百サイクルの小さなオーバーヘッドが発生することを忘れないでください)しかし、これは大きな問題ではありません)。

于 2010-07-14T20:28:02.763 に答える
0

プログラムメトリクスの精度を高めるには、100や1000など、プログラムを何度も実行する必要があります。

詳細については、メトリクスについて、メトリクスプロファイリングをWebで検索してください。

ウイルススキャナー、音楽プレーヤー、タイマーを搭載したその他のプログラムなど、バックグラウンドで実行されているものが原因で、プログラムのパフォーマンス(時間)の測定値が異なる場合があることに注意してください。

プログラムをさまざまなマシンでテストできます。プロセッサのクロックレート、L1およびL2キャッシュサイズ、RAMサイズ、およびディスク速度はすべて(同時に実行されている他のプログラム/タスクの数と同様に)要因です。浮動小数点も要因になる可能性があります。

必要に応じて、さまざまな最適化設定のリストのアセンブリ言語を出力することにより、コンパイラーに挑戦することができます。どの設定が最も少ないまたは最も効率的なアセンブリコードを生成するかを確認してください。

データを処理しているので、データ駆動型の設計を見てください:http : //www.gamearchitect.net/Articles/DataDrivenDesign.html

于 2010-07-14T20:28:12.917 に答える
0

Windows ハイ パフォーマンス カウンターを使用して、ナノ秒の精度を得ることができます。技術的には、私の知る限り、HPC はどのような速度でもかまいませんが、1 秒あたりのカウントを照会できます。私の知る限り、ほとんどの CPU は非常に高いパフォーマンスのカウントを行います。

あなたがすべきことは、プロのプロファイラーを取得することです. それが彼らの目的です。ただし、より現実的に。

アルゴリズムのみを比較する場合、マシンが 1 つの領域 (Pentium D、SSD のようなもの) で優れていない限り、1 つのマシンでそれを行うことはそれほど重要ではありません。キャッシュの影響を調べたい場合は、マシンの起動直後にアルゴリズムを実行してみてください (Windows 7 のコピーを入手してください。CS の学生には無料で提供されているはずです)。 、画像処理のように、OSにキャッシュするように24時間または何かを説得します。次に、アルゴリズムを再度実行します。比較。

于 2010-07-14T20:28:26.973 に答える
0

プラットフォームを指定しませんでした。POSIX システム (Linux など) を使用している場合は、 を参照してくださいclock_gettime。これにより、ウォール クロック時間や CPU 時間など、さまざまな種類のクロックにアクセスできます。また、時計の精度についても知ることができます。

あなたは自分の数値について良い統計をとろうとしているので、統計テストが十分な信頼を与えるように、十分な頻度で実験を繰り返す必要があります.

測定値がきめが細かすぎず、分散が小さい場合、これは多くの場合、10 個程度のプローブに適しています。しかし、規模が小さい、短い関数などになると、さらに高くする必要があるかもしれません。

また、再現可能な実験条件、マシンに他の負荷がないこと、十分なメモリが利用可能であることなどを確認する必要があります。

于 2010-07-14T20:58:27.373 に答える