• 締切済み

マルチコア上のLinux環境にて、スレッドを任意のコアに割り当てることは可能か?

こんにちは。cstepと申します。 Intel Core 2 Quad(コア数x4)のマシン上の ReaHat Linux 9(Kernel 2.4.20-8)環境で、pthread(glibc-2.3.2-11.9, NPTL 0.29, gcc 3.2.2)を使用したマルチスレッド・プログラミングをしています。 各スレッドのコア割り当てを(OSの自動スケジューリングではなくて)手動で固定的に割り当てることは可能でしょうか? 可能な場合それを実現するAPIや実現方法をご教授いただけますでしょうか。 例えば、8つのスレッドからなるプログラムだとした場合、 ・スレッド1と5 → コア1に割り当て ・スレッド2と6 → コア2に割り当て ・スレッド3と7 → コア3に割り当て ・スレッド4と8 → コア4に割り当て というふうに、各スレッド(1~8)を任意のコア(1~4)に固定的に割り当てて動作させたいと考えております。 Windowsの場合は、SetThreadAffinityMask() または SetThreadIdealProcessor() といったAPIを使うことで上記の要求は可能かと思いますが、Linuxでの方法が分からず、質問させていただきました。 よろしくお願い致します。

みんなの回答

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  直接の回答ではありませんが、インテルからツールが出ているようです。   http://www.rbbtoday.com/news/20070411/40710.html   参考にしてください。 では。

noname#42678
質問者

お礼

ご回答ありがとうございます。 今回の質問に直接関係する回答ではありませんでしたが、 後学のためになりました。

noname#42678
質問者

補足

質問者のcstepです。その後、調査しましたので結果を記します。 Linux kernel 2.6(以降?)では、ハード・アフィニティを利用することで、任意のプロセス(スレッドも?要確認)を任意のコアに割り当てることが可能なようです。となると、RedHat Linux9 (kernel 2.4) では不可ですね。 もしも、RedHat Linux9 (kernel 2.4) でも可能な方法なご存知の方いらっしゃいましたら、ご教授をお願いいたします。 ---以下、参考情報--- Linux kernel 2.6では、 - sched_get_affinity() - sched_set_affinity() といったAPIを使うことにより、CPUアフィニティを設定・取得できます。 以下のサイトが参考になりました。 プロセッサー・アフィニティーの管理 http://www-128.ibm.com/developerworks/jp/linux/library/l-affinity/ sched_setaffinity(2) を使って任意のプログラムを任意のCPU上で動かす http://d.hatena.ne.jp/naoya/20070824/1187945715 Manpage of SCHED_SETAFFINITY (linux.or.jp) http://www.linux.or.jp/JM/html/LDP_man-pages/man2/sched_setaffinity.2.html Example of sched_set_affinity and sched_get_affinity http://www.ussg.iu.edu/hypermail/linux/kernel/0202.3/att-1082/01-part

関連するQ&A