C ++アプリケーションのパフォーマンスの最適化(Windows)

誰もがすでに知っていると思いますが、それでもです。 特定のプログラム機能を実行するのに必要なプロセッサー時間を評価する必要がある場合があります(主にC ++について説明しています)。 まあ、以下では、私自身の方法を簡単に説明しますが、私には非常にうまくいきます。



さまざまな特別なツールを使用してコードを指示できます(試したことはありません。そのうちの1つがDevPartnerであるように、今では多くのツールがあると思います)。

時間に関連する関数は、WinAPIまたは他のAPIでは見つかりませんでした。



私が本当に気に入った2つの機能:



QueryPerformanceFrequency

QueryPerformanceCounter



一般に、ここで記事を読み終えることができます。Googleで少しすれば十分です:)



この2つの関数を使用すると、ソフトウェア計算の動作時間のかなり正確な推定値を取得できます。



実際、 QueryPerformanceFrequencyは、プロセッサが1秒間に実行できる基本操作の数を返します。

QueryPerformanceCounterは、コンピューターが起動してから既に実行された基本操作の数を返します。



「GetTickCount」は一種の代替手段ですが、どういうわけか十分な精度を持っていなかったか、その動作に満足していませんでした。MSDNであまり明確に説明されていません。



QueryPerformanceFrequency / QueryPerformanceCounterを使用して関数(クラスメソッド)DoWork()を呼び出すのにかかる秒数の計算は、実際には非常に簡単です。



 LARGE_INTEGER performanceCounter;
 :: QueryPerformanceFrequency(&performanceCounter);

 LARGE_INTEGER performanceCounterStart;
 :: QueryPerformanceCounter(&performanceCounterStart);

 DoWork();

 LARGE_INTEGER performanceCounterEnd;
 :: QueryPerformanceFrequency(&performanceCounterEnd);

 double timeElapsed =(double *)(performanceCounterEnd)-(double *)(performanceCounterEnd)





もちろん、罪深いコードは、アイデアを示しただけで、誰かが役に立つかもしれません。

一般に、QueryPerformanceCounterは「ReaDタイムスタンプカウンター(RDTSC)」アセンブラー命令です(私はo5に横たわっています。命令の名前は#0f、#31です。



脅威。 パフォーマンスと私が時々使用する最も単純なテストを評価するとき、コンパイラに注意を払う価値があります。ほとんどの健全なコンパイラは、



 CalculateSinus(cobstダブル&x)
 {
     return sin(x);
 }

 static const double x = PI / 4;
 double y = CalculateSinus(x)




一般に、実行時にカウントする必要がなく、y = sin(PI / 4)がコンパイル段階で計算されるように変換します。



All Articles