私は、セクションごとに複数のスレッドを使用して、コードのセクションを並列に実行する方法を探しています。たとえば、私は16のスレッドと2つのタスクを持っている場合、私は8つのスレッドがそれぞれ同時に2つのタスクを実行したい。 OpenMPは一般的なコードを並列に実行するいくつかの構造体(section
、task
)を持っていますが、それらはシングルスレッドです。私のシナリオでは、section
またはtask
を使用すると、1つのスレッドが2つのタスクのそれぞれを実行し、14のスレッドが空いている状態になります。OpenMPのコードセクションに複数のスレッドを割り当てることはできますか?
OpenMPでも可能ですか?もしそうなら、私はそれをどうやって行うのですか?もしそうでなければ、私はその目的のために何が使えますか?
ありがとうございました!
編集2:
私はサンプルコードでこの質問を拡張してみましょう:
class some_class{
void task(){
cout<<"Entering the task method"<<endl;
#pragma openmp parallel for
for(int i=0; i < large_matrix.rows(); i++){
perform_thread_safe_operation(large_matrix.getRow(i));
}
}
matrix large_matrix;
};
void main(){
//I have 16 cores, so I want to spawn 16 threads
some_class o1;
some_class o2;
// I want 8 of the 16 threads to execute this line:
o1.task();
// and 8 remaining threads to execute this line:
o2.task();
}
私はちょうど溶液で私の答えを更新しました。 – Mysticial