または、オペレーティングシステムによって制御されていますか?私は、Googleからの新しいGo言語には、プログラマが細かく分かち書きするための機能が組み込まれている、あるいは間違って理解していると聞きましたか?スレッドが実行するマルチコアCPUのコアをプログラムで選択して選択できますか?
答えて
Linuxの場合、sched_setaffinityはあなたの答えです。これはLinuxカーネル2.5.8以降でサポートされています。
名前
sched_setaffinity、sched_getaffinity - アフィニティマスクが実際に ごとに独立して調整することができる スレッド単位の属性で設定されており、プロセスのCPUアフィニティが
#define _GNU_SOURCE
#include <sched.h>
int sched_setaffinity( pid_t pid,
size_t cpusetsize,
cpu_set_t *mask);
int sched_getaffinity( pid_t pid,
size_t cpusetsize,
cpu_set_t *mask);
をマスクしますスレッドグループ内のスレッドは です。 gettid(2)の呼び出しから返された値 は、引数pidに を渡すことができます。 0として 指定するPIDは、呼び出し側スレッドのため 属性を設定し、 スレッドグループのメインスレッドの属性 を設定します(2)GETPID呼び出し から返された値を渡します。答えはイエスである()(あなたは、代わりに sched_setaffinityの pthread_setaffinity_np(3)を使用し、POSIX スレッドAPIを使用している場合。)
オペレーティングシステムによって異なります。
pthread_attr_setaffinity_np()
でヒントを設定できます。
しかし、オペレーティングシステムがあなたを無効にできます。上記の呼び出しは、あなたのプログラムがOSに与える示唆にすぎません。
Goについては、私はまだそれを扱っていないし、あまりにも深く見ていないが、Goの私の理解は、多くの並列性がむしろ暗黙的であるということである。あなたには共同作業があります(彼らは "忙しい"と言います)。それはCPU親和性のようであり、スレッディング自体の概念はそれとは別です。つまり、言語ランタイムは、それがベストであると判断した場合、1つのCPUですべてを実行することもできます...しかし、私はそれをあまりにも深く見ていないことを覚えています。 :-)
、あなたは、プログラムのプロセスが稼働たコアを選択することができます。前述のarsaneの答えは、sched_set_affinity()、pthread_setaffinity_np()です。ここで
はプロセスでこれを行う方法についてのnifty tutorialです(this質問への回答から来ている。)
は基本的に、これはビットマスクを使用して行われます。これは、整数(例えば、32ビット)が存在し、最初のビット== 1であれば、そのプロセスはプロセッサ1上で実行することができることを意味する。第2のビット== 1であれば、そのプロセスはプロセッサー2など。
したがって、デフォルトでは、アフィニティービットマスク= 1 ... 111(32回)。これは、「プロセスはプロセッサー1、2、3、...、32で実行される可能性があります。もちろん、コアが2つしかない場合は、余分な30ビットは適用されません。
ただし、そのビットマスクを0 ... 010に設定すると、「プロセッサ2」だけがそのプロセスを実行することができます。
Linuxでサポートされているプロセッサーのmaximum numberが32である理由についても説明しています(一般に見つかっているハードウェアの多くにx86、調整なしで、クラスタリングなしなど)。
- 1. 実行時に選択ボックス内のオプションを変更して別の選択ボックスでオプションを選択する
- 2. WPF Datagrid - グループ内のすべての行をプログラムで選択できますか?
- 3. 選択値から選択した値を選択します。
- 4. は、実行時にプログラムでスタイル/テーマを選択する
- 5. プログラムでdatagridviewの行を選択
- 6. 選択したプログラム/スクリプトをselenium webdriverで実行できません
- 7. 何が良いですか:スレッドと選択しますか?
- 8. Mysqlは選択から行を選択します
- 9. FROMの後にテーブルを選択してmySQL CASEを実行できますか?
- 10. プログラムでJTableの行を選択します
- 11. IEでプログラムでオプションを選択する
- 12. WPFでコンボボックスのアイテムを選択してアクションを実行する
- 13. スライサーでの選択が選択されるたびに実行コード
- 14. HTMLで選択オプションを選択する
- 15. Sublime Textの選択に対して数学を実行できますか?
- 16. jComboBoxは、選択したアイテムを選択したときに選択項目を最初に選択します
- 17. ハイパーリンクボタンをプログラムで選択
- 18. Unityでデバイスフィルタを選択していますか?デバイスフィルタを選択する際に
- 19. 選択行が
- 20. 選択でJqueryを選択しますか?
- 21. LINQ:LinqDataSource列の選択コードビハインドで選択しますか?
- 22. dijit選択ウィジェットの選択値をプログラムで設定
- 23. Dojo:拡張グリッドのチェックボックスをプログラムで選択/非選択
- 24. グリッドコントロールを選択して、選択した行の色を変更します。
- 25. vimの選択で 'base64 --decode'を実行
- 26. DataGridViewのC#検索列を選択してその行を選択します
- 27. Android - プログラムでメニューオプションを選択する
- 28. プログラムで領域を選択する
- 29. qt4の行を選択または選択解除する
- 30. プログラムでタブ順でプログラムを選択
これは可能かもしれませんが、なぜそれをやりたいのですか?通常、オペレーティングシステムは、ユーザー空間アプリケーションよりもコードを実行するCPUをより正確に判断することができます。 –
@ Zach各CPUが何をするかをきめ細かく制御すれば、いくつかのアルゴリズムは本当にうまく動作します。たとえば、スレッドがプリエンプトされた場合、独自のスピンロックを使用するアルゴリズムは非常にうまくいかないため、各スレッドの特定のコアにバインドすることをお勧めします。それとも、CPUに非常に拘泥しているものと関連があると思います。それは言った...あなたが正しい、それは種類のニッチなものです。 – asveikau
@asveikau確かに、あなたが稼働しているCPUは、あなたが先取りされるかどうかに影響を与えません。 NUMAのアーキテクチャでは、どこが重要かを考えることができます。しかし、私は、ユーザー空間プログラムが無作為に選択するよりも、それに恩恵をもたらす決定を下す可能性があるとは思っていません。 –