私はマルチスレッドプログラムを持っており、すべてのスレッドを独自のコア(CPU、プロセッサなど)に入れるオプションを追加するように求められています。各スレッドが実行されているプロセッサを見つけるにはどうすればよいですか?
SetThreadAffinityMask()を使用してこれを行うコードを作成しました。プロセスのデフォルトアフィニティマスクを取得し、それを実行するのに十分なプロセッサがあることを確認してから、各スレッドのアフィニティマスクを使用可能なプロセッサの1つだけに設定します(各スレッドごとに異なります)。
これはすべて問題なくコンパイルされ実行されているようですが、実際に動作しているかどうかを確認するにはどうすればよいですか?
スレッドが実行されているCPUを示す監視ツールがあるはずですが、見つからないようです。 ProcessExplorer
はスレッドのCPU使用率を表示しますが、発生したCPUは表示しません。私はperfmon
で使用できるカウンターを調べましたが、やはり%CPUしか使用できませんでした。
私はGetThreadAffinityMask()を実行し、それを報告することを提案しましたが、SetThreadAffinityMask()を正しく呼び出したと報告するだけです。
私はちょうどSetThreadAffinity()が私が欲しいものをやっていると信じていますか?
(注:ほとんど同じような質問がSOにありますが、実際にはこの特定の質問に対する回答はありません)。
おそらく、実行中にプロセッサ番号が維持されていることを確認するには、この関数でサンプリングする必要があります。 – Tudor
Hmmm。これは、それ自身を監視するために各スレッドを変更する必要があります。私はそれを行うためにいくつかの一時的なデバッグコードを書くことができると思います。最適ではありませんが、乞食はチョーザーになれません。 –
...私はXPレベルのライブラリでコンパイルしていますが、このリンクはこの小さな問題を処理しました。 https://www.scss.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm –