Différence entre num_threads vs omp_set_num_threads vs OMP_NUM_THREADS
Je suis assez confus au sujet de la manière de spécifier le nombre de threads en parallèle le cadre d'un code.
Je sais que je peux utiliser:
- le respect de la variable OMP_NUM_THREADS
- fonction omp_set_num_threads(int)
- num_threads(int) dans
#pragma omp parallel for num_threads(NB_OF_THREADS)
Ce que j'ai réuni ce jour, les deux premières sont équivalentes. Mais quel est le troisième?
Quelqu'un peut-il fournir une présentation plus détaillée de la différence, je ne pouvais pas trouver toutes les informations dans l'internet en ce qui concerne la différence entre 1/2 et 3.
OriginalL'auteur leosenko | 2014-04-02
Vous devez vous connecter pour publier un commentaire.
OMP_NUM_THREADS
etomp_set_num_threads()
ne sont pas équivalentes. La variable d'environnement n'est utilisé pour définir la valeur initiale de la nthreads-var ICV (interne variable de contrôle) qui contrôle le nombre maximal de threads dans une équipe.omp_set_num_threads()
peut être utilisé pour modifier la valeur de nthreads-var à tout moment (en dehors de toute parallèle régions, bien sûr) et affecte tous les parallèles régions. Par conséquent, la création d'une valeur, par exemplen
, àOMP_NUM_THREADS
est équivalent à l'appel deomp_set_num_threads(n)
avant la première région parallèle est rencontré.L'algorithme permettant de déterminer le nombre de threads en parallèle, la région est très clairement décrit dans le OpenMP spécification qui est disponible gratuitement sur OpenMP site web:
Que la priorité des façons différentes de mettre en nthreads-var est répertorié dans la ICV Remplacer les Relations partie de la spécification:
Traduit en langage humain, qui est:
OMP_NUM_THREADS
(si présent) spécifie d'abord le nombre de threads;omp_set_num_threads()
remplacer la valeur deOMP_NUM_THREADS
;num_threads
clause remplace les deux autres valeurs.Le nombre de threads utilisés est également affectée par le fait que d'une équipe dynamique tailles sont activés (dyn-var ICV réglable via
OMP_DYNAMIC
et/ouomp_set_dynamic()
), par si un thread limite est imposée par thread-limit-var (réglable viaOMP_THREAD_LIMIT
), ainsi que par le fait que le parallélisme imbriqué (OMP_NESTED
/omp_set_nested()
) est activée ou non.num_threads
programme de large, ou est-ce juste pour les OMP bloc? Sinum_threads
du programme est vaste, alors comment pouvons-nous changer le nombre de thread pour juste une OMP bloc?le champ d'application de la
num_threads
clause est la région à laquelle il est appliqué.OriginalL'auteur Hristo Iliev
Pense comme la portée. Option 3 (num_threads) définit le nombre de fils pour l'équipe actuelle de threads. Les autres options sont global/paramètres d'état. En général je n'ai pas définir le nombre de threads et à la place j'ai juste utiliser les paramètres par défaut. Quand je fais changer le nombre de threads, il est habituellement seulement dans des cas particuliers, j'ai donc utiliser l'option trois, de sorte que la prochaine fois que j'utilise en parallèle de l'équipe, il va revenir à la global (par défaut). Voir le code ci-dessous. Après j'ai utiliser l'option 3 de la prochaine équipe de threads remonte le dernier paramètre global.
4
8
2
8
OriginalL'auteur Z boson