Est-ce que sched_setaffinity
ou pthread_attr_setaffinity_np
fonctionnera pour définir l'affinité de thread sous OpenMP?Affinité OpenMP et CPU
connexes: CPU Affinity
Est-ce que sched_setaffinity
ou pthread_attr_setaffinity_np
fonctionnera pour définir l'affinité de thread sous OpenMP?Affinité OpenMP et CPU
connexes: CPU Affinity
Oui, les appels nommés travailleront à définir l'affinité de fil. Le seul problème est de fixer le numéro de thread et de définir l'affinité correcte dans le thread droit (vous pouvez essayer d'utiliser la planification statique de for
boucle pour le nombre connu de threads).
Comme je sais, presque chaque openmp permet de définir l'affinité via l'environnement. Le nom de la variable d'environnement varie (il n'était pas standardisé depuis longtemps). J'utilise la page http://www.spec.org/omp2001/results/omp2001.html pour trouver l'implémentation de openMP et la recherche de nom de variable d'environnement spécifique. L'affinité est définie dans ~ la moitié des résultats de specOMP. Il existe également d'autres paramètres de réglage des performances OpenMP dans les résultats.
E.g. For intel compiler la variable est
export KMP_AFFINITY=compact,0
export SUNW_MP_PROCBIND=TRUE
export GOMP_CPU_AFFINITY=0-63
où 63 est le numéro de l'unité centrale maximale (lorsque compté à partir de 0)
Et newer OpenMP Standard, version 3.1 définit OMP_PROC_BIND variable d'environnement (voir secti sur 4.4) qui est une façon normalisée de définir l'affinité dans OpenMP. L'utilisation est:
export OMP_PROC_BIND=true
merci! rien sur le niveau du langage, comme 'pthread_attr_setaffinity_np'? –
non, la norme openmp n'a pas de pragma ou de fonctions de liaison de thread. Le seul moyen (et recommandé) est de lier les threads via la variable d'environnement, spécifique au compilateur ou openmp3.1. Ce paramètre devrait être fait tôt, avant de commencer principal. – osgx
donc, à proprement parler, votre réponse devrait commencer par "Non" :) –