1

Intel Core-2Duo プラットフォーム上の Microsoft VS 2005 で C コードのプロファイリングを行っています。関数で消費される時間 (秒:ミリ秒) を測定します。しかし、オペレーティングシステムはアプリケーションを継続的に実行するのではなく、コードの実行の間に他のアプリ/サービスをスケジュールするため、この測定の正確性について疑問があります.実行しても、Windowsには独自のコードがたくさんあり、アプリをプリエンプトして実行します。) このため、プロファイリング番号 (アプリの実行にかかった時間) は正確ではないと思います。

したがって、私の質問は、オペレーティング システムのオーバーヘッド、典型的な Windows システム (私は Windows XP を実行しています) でのスケジューリング オーバーヘッドを調べる方法があるということです。私のアプリで使用されます。また、OS によってスケジュールされた他のタスクによってプリエンプトされたためにアイドル状態になっていた時間はどれくらいですか?

また

同様のことをしているときに遭遇した経験に基づいて、そのようなOSオーバーヘッドを取得するための球場の数は少なくともありますか?

4

5 に答える 5

1

@Kogus: デバッガーの外部 (スタンドアロン アプリ。コマンド プロンプトから) を実行しても、OS によってプリエンプトされ、アプリの消費時間が正しく測定されない可能性があります。

ではない?

-広告

于 2008-09-09T13:41:50.433 に答える
1

粒度に問題があると思います。同様の質問GetLocalTime() API time resolutionおよび Is gettimeofday() Guarantee to be of the microsecond resolution?を参照してください。

また、timeit.exe ( unix/linux と同様)を含むWindows リソース キット ツールを参照して、経過時間と処理時間を確認することもできます。time

于 2008-09-09T13:50:39.273 に答える
0

提案

マルチ CPU システムで実行してみてください。

于 2008-09-09T13:33:49.467 に答える
0

1 - コードにデバッグ ログを入れ (もちろんタイムスタンプを含めます)、デバッガの外で実行します。

2 -デバッガー再度実行する

3 - 統計的に有効なデータを得るために、何度も繰り返します。

4 - 比較します。

スタンドアロンとデバッガーの平均実行時間に大きな違いがある場合、OS (またはデバッガー フック自体のオーバーヘッド) を疑うのは当然です。違いがない場合は、気にしないでください。

Edit0: 明らかに、デバッグ メッセージには独自のオーバーヘッドがあります。デバッガーから実行している場合でも、それらをコードに残しておきたい場合があります。そうすれば、スタンドアロンとデバッガーの両方でまったく同じコードが実行されます。

Edit1: 質問を誤解しました。あなたの懸念は、デバッグ中に、OS が通常の実行モードよりも頻繁にアプリを中断する可能性があることだと思いました。アプリが実際に作業に費やした時間を知りたい場合は、かかった時間をタスク マネージャーの「CPU 時間」と比較してください。

Edit2:プロセスのGetProcessTimesによって返された時間を実際の実行時間と比較します。違いは、CPU が他の誰かに費やした時間です。

于 2008-09-09T13:36:26.607 に答える
0

これを行う最善の方法は、専用のプロファイリング ツールです。そこにはたくさんあります。私は数年間C言語を使用していません。他の誰かがより良いアドバイスをくれることを願っています. Visual Studio 2005 を使用しているので、これは開始するのに適した場所かもしれません: AQですが、私は一度も使用したことがありません。

于 2008-09-09T13:44:14.780 に答える