私はLinux Centosを使用しています。Linuxのpthreadで使用可能な物理CPUコアを使用する
私はpthreadのとCでのコーディングとpthread_set_affinity .Iを使用していますユニークなprocessor.Likeで実行する各スレッドを見てみたい---私はこのset_affinityを使用する場合
thread1 in proccessor 0
thread2 in proccessor 1
.
.
.
threadn in processor n
は現在、それが実行されますが私はSystem-monitorを見ましたが、8コアのCPU使用率は分散していません。
CODEはその ::
if(for thread 1)
{
pthread_attr_init(&pta);
CPU_SET(0,&cpuset);
pthread_setaffinity_np(thread1, sizeof(cpu_set_t), &cpuset);
pthread_create(&thread1,&pta,&sendimsg,(void*)&message);
pthread_join(thread1,NULL);
printf("User for Thread One : %d\n",numb.fir);
pthread_attr_destroy(&pta);
CPU_ZERO(&cpuset);
}
else if(for thread 2)
{
pthread_attr_init(&pra);
CPU_SET(1,&cpuset1);
pthread_setaffinity_np(thread2, sizeof(cpu_set_t), &cpuset);
pthread_create(&thread2,&pra,&sendimsg,(void*)&message);
pthread_join(thread2,NULL);
printf("User for Thread Two : %d\n",numb.sec);
pthread_attr_destroy(&pra);
CPU_ZERO(&cpuset1);
}
for eight thread that way.
注のようなものです:スレッドが分散し20 20 20 20のように割り当てられている... 20
割合は、その方法のよう
10%1です0%2%0%1%0%0%1%
私は8つのコアのPCを持っており、8つのコアで8つのスレッドを実行しようとしています。このpthreadとpで8つのコアを完全に利用する方法はありますか? thread_set_affinity。
一部のスレッドはCPU負荷が高く、スレッドによっては、ブロックされたIO呼び出しを待っている間にスリープしているか、またはミューテックスロックを待っていることがあります。 –
多分あなたはいくつかのコードを表示することができ、誰かが一般化する仮定よりも何かを助けるかもしれません。 –
スレッドがそれらの間で共通のデータを使用している場合、実際にはそれほど良いアイデアではないかもしれません。 –