2011-11-30 2 views

Répondre

13

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 

For sun compiler:

export SUNW_MP_PROCBIND=TRUE 

For gcc (pre-openmp 3.1)

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 
+0

merci! rien sur le niveau du langage, comme 'pthread_attr_setaffinity_np'? –

+0

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

+0

donc, à proprement parler, votre réponse devrait commencer par "Non" :) –