プロセスに関連付けられているprocessIDがあります。私はこのプロセスをCreateProcess()
関数を使って作成しました。実行中に、実行されているプロセッサの数と、この実行可能ファイルがマルチコアマシンで使用された時間を追跡したいと思います。特定のプロセスが実行されているプロセッサの数を取得
同じもののC++コードを記述したいと思います。誰も私にこれを助けることができますか?
私はWindows XPマルチコアマシンを使用しています。
プロセスに関連付けられているprocessIDがあります。私はこのプロセスをCreateProcess()
関数を使って作成しました。実行中に、実行されているプロセッサの数と、この実行可能ファイルがマルチコアマシンで使用された時間を追跡したいと思います。特定のプロセスが実行されているプロセッサの数を取得
同じもののC++コードを記述したいと思います。誰も私にこれを助けることができますか?
私はWindows XPマルチコアマシンを使用しています。
は、指定されたプロセスのプロセスアフィニティマスクとシステムのシステムアフィニティマスクを取得します。
は、指定されたプロセスのためのタイミング情報を取得します。
これは、プロセスが*実行できるプロセッサーを私が知っている限り、実際にスケジューリングされているプロセッサーに関する情報は提供しません。 –
Windowsのイベントトレース(ETW)と(すべてのコンテキストスイッチで発行される)CSwitchイベントを使用して、このレベルの詳細をVista以降で取得できます。
さまざまなツール(例:Windows Performance Toolkit)がこのデータをキャプチャして視覚化します。
ただし、これはWindows XPではサポートされていません。
一般的な同時実行性(つまり、指定した時間に実行されているスレッドの数)を知りたい場合は、HKEY_PERFORMANCE_DATAのperfmonスレッドデータを定期的にサンプリングできます。 「スレッド状態」カウンタは、プロセス内のすべてのスレッドの瞬時の状態(つまり、各スレッドが実行中かどうか)を表示します。明らかに、このサンプリングプロセスは最大並行性を(プロセッサ数-1)に制限します。
本当に詳細が必要ですか?通常、GetProcessTimesで十分です。
更新
あなたは、テストマシン上でアプリケーションを実行すると、単純にパフォーマンスモニタを使用して、各CPUの使用率を測定することができます。また、予期せず実行されるものがないように、各プロセスのCPU使用率を測定する必要があります。
レポートのデータを取得するには、perfmonを管理者として実行します。
これだけです。
アプリケーションのパフォーマンスを分析するために、自分のマルチスレッドアプリケーションが稼働しているオペレーティングシステムやプロセッサのコア使用率に関係なく、マシンのすべてのコアを確実に活用するプログラムが必要です。 – psp
これは単なるテスト用の場合(つまり制御された環境にある場合)、アイドル状態のマシンを取り出し、perfmonを使用して、マシンがアイドリングしている間に各CPUのパフォーマンスを測定します。それはごくわずかです。その後、あなたのアプリを実行し、各CPUの性能を測定します。すべてのプロセスのCPU使用率を測定し、バックグラウンドプロセス(インデックスサービスやウィルスチェッカーなど)が実行されていないことを確認したい場合もあります。問題がある場合は、それらを無効にします。 – arx
okですが、そのデータを何らかの方法でファイルに取得して、そこからレポートを生成できる方法はありますか? – psp
コードを表示してください。 – gideon