Question

Je compile ce bit de code sur Snow Leopard et Linux et je reçois des résultats différents. Le léopard des neiges, le premier appel de omp_get_max_threads retourne 2, qui est mon nombre de cœurs, tandis que le second renvoie 1. Sur Linux, les appels de retour 4, qui est mon nombre de cœurs. Je pense que Linux a le bon comportement, suis-je raison? Sont à la fois correct et j'ai juste un malentendu de cette fonction?

#include <stdio.h>
#include <omp.h>

int main() {
  printf(" In a serial region; max threads are : %d\n", omp_get_max_threads());
#pragma omp parallel
{
  #pragma omp master
  printf(" In a parallel region; max threads are : %d\n", omp_get_max_threads());
}
}

Sortie Mac:

 In a serial region; max threads are : 2
 In a parallel region; max threads are : 1

Sortie Linux:

 In a serial region; max threads are : 4
 In a parallel region; max threads are : 4
Était-ce utile?

La solution

cet appel est bien spécifié dans la spécification OpenMP. linux a le comportement correct ici. cela étant dit, vous êtes dans une région de maître qui est effectivement en série et FHE le fil conducteur, de sorte que les fils num appel est explicable. si vous arent lié à c pur, je vous encourage à regarder le c ++ bibliothèque TBB et en particulier le sous-ensemble ppl, vous trouverez plus de généralité et composabilité comme pour le parallélisme imbriqué. Je suis MyPhone donc je présente mes excuses pour les fautes de frappe ici.

Autres conseils

Avec gcc fournis par Apple 4.2 [version gcc 4.2.1 (Apple Inc. construire 5566)] sur Leopard, je reçois les mêmes résultats que vous (sauf que mon MacBook a moins de cœurs).

In a serial region; max threads are : 2
In a parallel region; max threads are : 1

Même chose pour 4.3.4 de MacPorts.

Cependant, avec gcc 4.4.2 et 4.5.0 20.091.231 (expérimental) de MacPorts, sur le même ordinateur que je reçois:

In a serial region; max threads are : 2
In a parallel region; max threads are : 2

On dirait que ce n'est pas un problème Mac contre Linux, mais en raison de la version gcc.

P.S. OpenMP peut faire le parallélisme imbriqué.

Juste un rappel, il y a un forum consacré juste OpenMP, et lu par les développeurs de OpenMP ainsi que des experts OpenMP monde entier. Il est plus sur le site officiel de OpenMP: http://openmp.org/forum

Super endroit pour poser des questions comme celle-ci, et de trouver beaucoup d'autres ressources à openmp.org

Bizarre

. Je reçois toujours le comportement attendu (en utilisant 4.2.1, construis 5646 points 1) avec OS X 10.6.2:

Sur mon Mac Pro

 In a serial region; max threads are : 8
 In a parallel region; max threads are : 8

et sur mon iMac

In a serial region; max threads are : 2
In a parallel region; max threads are : 2

doit être autre chose qui se passe ici. Avec juste Compiler?

gcc fname.c -fopenmp
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top