Puis-je affecter plusieurs threads à une section de code dans OpenMP?

Je cherche un moyen d’exécuter des sections de code en parallèle en utilisant plusieurs threads pour chaque section. Par exemple, si j’ai 16 threads et deux tâches, je souhaite que 8 threads exécutent simultanément ces deux tâches. OpenMP a plusieurs constructions ( section , task ) qui exécutent le code général en parallèle, mais elles sont mono-threadées. Dans mon scénario, l’utilisation de la section ou de la task entraînerait l’exécution d’un processus par chacune des deux tâches, tandis que 14 processus restraient inactifs.

Est-ce que quelque chose comme ça est même possible avec OpenMP? Si oui, comment puis-je le faire et si non, que puis-je utiliser à cette fin?

Merci pour votre temps!

éditer 2:

Permettez-moi de développer cette question avec un exemple de code:

 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(); } 

Vous pouvez le faire en utilisant des régions parallèles nestedes.

 omp_set_nested(1); #pragma omp parallel num_threads(2) { if (omp_get_thread_num() == 0){ #pragma omp parallel num_threads(8) { // Task 0 } }else{ #pragma omp parallel num_threads(8) { // Task 1 } } } 

Alternativement, vous pouvez le faire comme ceci:

 #pragma omp parallel num_threads(16) { if (omp_get_thread_num() < 8){ // Task 0 }else{ // Task 1 } } 

Notez que ce code ne fonctionnera pas si OpenMP décide d’utiliser moins de 16 threads. Vous devrez pour cela insérer votre propre code de nettoyage.

EDIT: En réponse à votre mise à jour:

 class some_class{ void task(){ cout<<"Entering the task method"<