Partager via


E. Comportements définis par l’implémentation dans OpenMP C/C++

Cette annexe récapitule les comportements décrits comme étant « définis par l’implémentation » dans cette API. Chaque comportement est renvoyé à sa description dans la spécification principale.

Notes

Une implémentation est nécessaire pour définir et documenter son comportement dans ces cas, mais cette liste peut être incomplète.

  • Nombre de threads : si une région parallèle est rencontrée pendant que l’ajustement dynamique du nombre de threads est désactivé et que le nombre de threads demandés pour la région parallèle est supérieur au nombre que le système d’exécution peut fournir, le comportement du programme est défini par l’implémentation (voir la page 9).

    Dans Visual C++, pour une région parallèle non imbriquée, 64 threads (le maximum) sont fournis.

  • Nombre de processeurs : le nombre de processeurs physiques hébergeant réellement les threads à tout moment est défini par l’implémentation (voir la page 10).

    Dans Visual C++, ce nombre n’est pas constant et est contrôlé par le système d’exploitation.

  • Création d’équipes de threads : le nombre de threads d’une équipe qui exécutent une région parallèle imbriquée est défini par l’implémentation (voir la page 10).

    Dans Visual C++, ce nombre est déterminé par le système d’exploitation.

  • schedule(runtime) : la décision concernant la planification est différée jusqu’à l’heure d’exécution. Le type de planification et la taille de bloc peuvent être choisis au moment de l’exécution en définissant la variable d’environnement OMP_SCHEDULE . Si cette variable d’environnement n’est pas définie, la planification résultante est définie par l’implémentation (voir la page 13).

    Dans Visual C++, le type de planification n’est static pas de taille de bloc.

  • Planification par défaut : en l’absence de la clause schedule, la planification par défaut est définie par l’implémentation (voir la page 13).

    Dans Visual C++, le type de planification par défaut n’est static pas de taille de bloc.

  • ATOMIC : il est défini par l’implémentation si une implémentation remplace toutes les directives par critical des atomic directives portant le même nom unique (voir la page 20).

    Dans Visual C++, si les données modifiées par atomic ne sont pas sur un alignement naturel ou s’il s’agit d’un ou deux octets longs, toutes les opérations atomiques qui répondent à cette propriété utilisent une section critique. Sinon, les sections critiques ne seront pas utilisées.

  • omp_get_num_threads : si le nombre de threads n’a pas été défini explicitement par l’utilisateur, la valeur par défaut est définie par l’implémentation (voir la page 9).

    Dans Visual C++, le nombre par défaut de threads est égal au nombre de processeurs.

  • omp_set_dynamic : la valeur par défaut de l’ajustement dynamique du thread est définie par l’implémentation.

    Dans Visual C++, la valeur par défaut est FALSE.

  • omp_set_nested : lorsque le parallélisme imbriqué est activé, le nombre de threads utilisés pour exécuter des régions parallèles imbriquées est défini par l’implémentation.

    Dans Visual C++, le nombre de threads est déterminé par le système d’exploitation.

  • OMP_SCHEDULE variable d’environnement : la valeur par défaut de cette variable d’environnement est définie par l’implémentation.

    Dans Visual C++, le type de planification n’est static pas de taille de bloc.

  • OMP_NUM_THREADS variable d’environnement : si aucune valeur n’est spécifiée pour la variable d’environnement, ou si la valeur spécifiée n’est pas un entier positif, ou si la valeur est supérieure au nombre maximal de threads pris en charge par le OMP_NUM_THREADS système, le nombre de threads à utiliser est défini par l’implémentation.

    Dans Visual C++, si la valeur spécifiée est égale ou inférieure, le nombre de threads est égal au nombre de processeurs. Si la valeur est supérieure à 64, le nombre de threads est de 64.

  • OMP_DYNAMIC variable d’environnement : la valeur par défaut est définie par l’implémentation.

    Dans Visual C++, la valeur par défaut est FALSE.