2011-11-30 14 views

Respuesta

13

Sí, llamadas nombrados trabajarán para establecer la afinidad del hilo. El único problema es corregir el número de subprocesos y establecer la afinidad correcta en el subproceso derecho (puede intentar usar la programación estática del ciclo for para conocer el número de subprocesos conocidos).

Como sé, casi todos los openmp permiten establecer afinidades a través del entorno. El nombre de la variable de entorno varía (no se estandarizó hace algún tiempo). Uso la página http://www.spec.org/omp2001/results/omp2001.html para encontrar la implementación de openMP y la búsqueda de un nombre de variable de entorno específico. La afinidad se establece en ~ la mitad de los resultados de specOMP. Hay algunos ajustes adicionales de ajuste de rendimiento OpenMP en los resultados también.

E.g. For intel compiler la variable es

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 

donde 63 es el número de CPU máximo (cuando cuenta a partir de 0)

Y newer OpenMP Standard, version 3.1 define OMP_PROC_BIND variable de entorno (ver secti en 4.4) que es una forma estandarizada de establecer la afinidad en OpenMP. Uso es:

export OMP_PROC_BIND=true 
+0

gracias! nada en el nivel de lenguaje, como 'pthread_attr_setaffinity_np'? –

+0

no, el estándar openmp no tiene ningún pragma o funciones vinculantes. La única forma (y la recomendada) es vincular hilos a través de la variable de entorno, compilador específico o openmp3.1. Esta configuración debe hacerse temprano, antes de iniciar main. – osgx

+0

por lo que, estrictamente hablando, su respuesta debería comenzar con "No" :) –