1

C#を使用して.NETFramework4.5を操作しています

コードのパフォーマンスを測定したいのですが、マシン(異なるハードウェア)間で比較したいという追加の複雑さがあります。

主要な目標の1つは、アルゴリズム(データセットZを使用するアルゴリズムXとアルゴリズムY)を比較するベンチマークを作成することです。これは、まったく同じハードウェアを一貫して使用する場合は問題ありませんが、これらのパフォーマンステストを全体に分散するオプションも必要です。多くのマシン-ほとんどが異なります。

特定のマシンのパフォーマンスを効率的に測定するにはどうすればよいですか?

私は現在、System.Diagnostics.StopWatchクラスをフィボナッチスイートと組み合わせて使用​​しており、Xティック/ミリ秒を使用するためにマシンが処理できるシーケンスの数を測定しようとしています。ただし、すでにご存知かもしれませんが、この手法はあまり正確ではありません。

答えはStopwatch.Frequencyにありますか?

誰かもっと良い提案がありますか?

追加情報-----

例:マルチスレッドではない(コアの数は関係ありません)アルゴリズムを比較すると、シーケンシャルスキャンを実行する場合と赤黒木を使用する場合の違いのようになります。

4

3 に答える 3

1

単純に:できません。または、少なくとも、確実ではありません。

たとえば、私はかつて.NETの静的メソッドとスレッド化について誰かと話し合ったことがあり、いくつかのマシンのテストを実行しました。同じ実行可能ファイルを実行すると、シングルコアのマシンがデュアルコアマシンよりもパフォーマンスが向上しました。明らかに、安全性を判断するためにさまざまな内部アルゴリズムを使用する.NETランタイムが問題でした(つまり、シングルコアで必要とされるよりも多くのロックをデュアルコアマシンに配置したか、ランタイムがシングルコアワークステーションとデュアルコアサーバー)。重要なのは、同じ実行可能ファイルを実行して別のベースラインを取得することさえできないということです。

したがって、マシンAとBでアルゴリズムXを実行し、その差を記録した場合(たとえば、マシンBが2倍高速だった場合)、マシンAでアルゴリズムYを実行することはできず、マシンで実行した場合にアルゴリズムが2倍高速になると想定できます。 B。

考慮しなければならない要素の複雑さは大きすぎるでしょう。マシンのパフォーマンスをテストしている場合は、異なるマシンで同じことを比較するか、同じマシンで異なることを比較するだけです。

于 2012-11-22T18:18:25.207 に答える
0

残念ながら、あるコンピューターのアルゴXでのAの時間と別のコンピューターのアルゴYでのBの時間を比較する正確なメトリックを考え出すことは実際には不可能です。たとえば、アルゴXがYよりもメモリを大量に消費し、コンピューターAの速度が遅い場合メモリとBに比べて高速なCPUを備えているため、コンピュータBではYよりも高速に実行される可能性がありますが、アルゴXはひどく見えます。

あなたができることは、各マシンで各アルゴリズムを実行し、どのアルゴリズムが最高の平均実行時間、メモリ使用量などを持っているかを確認することです。

また、あなたがやろうとしているように、マシンを比較するためのメトリックを考え出すこともできます。数秒間持続させ、すべてのアルゴリズムがほぼ同じ比率のCPU、ディスク、メモリ、およびさまざまなCPUキャッシュレベルに依存している場合、これはかなり正確であるはずです。

于 2012-11-22T18:20:07.177 に答える
0

機械だけではありません。それがどれほど忙しいのか、そして何であるのか。

最小限のハードウェア推奨事項を探しているのか、環境の調整を検討しているのかによって異なります。

1台のマシンで2つのバージョンのアルゴリズムを何度も実行することは、一般的に「遅い」または「速い」ことを除いて、アルゴリズムに依存していると仮定します。

シングルコアとマルチコアのような大きな違いを超えて異なるマシンを比較することは、無駄の練習です。

于 2012-11-22T18:27:21.990 に答える