dポイントプレゼントキャンペーン実施中!

こんにちは。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での方法が分からず、質問させていただきました。

よろしくお願い致します。

A 回答 (1件)

こんにちは。



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

では。

この回答への補足

質問者の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/l …

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/man …

Example of sched_set_affinity and sched_get_affinity
http://www.ussg.iu.edu/hypermail/linux/kernel/02 …

補足日時:2007/10/18 12:47
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/18 10:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!