こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

windows programing (multithread: CP

windows programing (multithread: CPU bind )
質問場所(ビジネス&キャリア>システムエンジニアリング)が不適切だったので、こちらで質問させてください。

windows 環境でのプログラミングに詳しい方がいらっしゃいましたら、multithread の使用方法についてご教示願えませんでしょうか。
環境は、Windows XP SP3 + gcc 3.xx (cygwin) です。
やりたい事は、CPU の core 数分のスレッドを生成して、各コアに明示的にバインド(指定したcoreで実行)したいと考えています。
windows でもこの様な事は可能なのでしょうか? 可能な場合、どの様にプログラミングするのでしょうか?
また、CPU の状態を知る、低レベルの API には、どの様なものがあるのでしょうか?
複数の質問で申し訳ありませんが、宜しくお願

投稿日時 - 2010-05-21 06:16:54

QNo.5910325

困ってます

質問者が選んだベストアンサー

GetLogicalProcessorInformation(XP SP3以降)またはGetLogicalProcessorInformationEx(Windows 7以降)を使えばどの論理コアがどの物理コアを共有しているか調べられそうです。
http://msdn.microsoft.com/ja-jp/library/ms683194.aspx
http://msdn.microsoft.com/ja-jp/library/dd405488.aspx
いずれも、試せる環境がないので確認はしていません。

投稿日時 - 2010-05-22 22:04:02

お礼

取り込みで返事が遅れ申し訳ありません。
ターゲットCPU(ATOM330)でテストしてみます。

投稿日時 - 2010-06-05 12:09:52

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

SetThreadAffinityMask()とかSetThreadIdealProcessor()を使って、スレッドを実行するプロセッサを指定してください。

http://msdn.microsoft.com/ja-jp/library/cc429346.aspx
http://msdn.microsoft.com/ja-jp/library/cc429348.aspx

投稿日時 - 2010-05-21 20:37:02

お礼

ご回答有難う御座います。 質問のまずさに気がつきました。

知りたかったのは、Hyper-Threading が有効な multi-core CPUで、各 core に hread をバインドする方法です。
つまり、Hyper-Threading が有効な dual-core なら、CPU 数は、4ですが、単純に CPU0、CPU1 に thread を割り当てると、1つの core で実行されてしまいパフォーマンスがあがらなくなる可能性がでます。
これを回避する為に、見かけ上のCPUが、物理的などのエレメントに対応しているのかを確認した上で、明示的にスレッドの割付をしたいのです。

質問の趣旨を正しく伝えられず、申し訳ありませんでした、ご存知でしたらご教示をお願いします。

投稿日時 - 2010-05-22 08:36:36

あなたにオススメの質問