2011-10-27 11 views
1

私は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。

+0

一部のスレッドはCPU負荷が高く、スレッドによっては、ブロックされたIO呼び出しを待っている間にスリープしているか、またはミューテックスロックを待っていることがあります。 –

+0

多分あなたはいくつかのコードを表示することができ、誰かが一般化する仮定よりも何かを助けるかもしれません。 –

+0

スレッドがそれらの間で共通のデータを使用している場合、実際にはそれほど良いアイデアではないかもしれません。 –

答えて

0

おそらくスレッドを完全に使用するのに十分な仕事がありません。これを行うために親和性を設定する必要はありません。実際には1つのスレッドを100%利用できる8つのスレッドを生成するだけです。

関連する問題