2011-07-14 11 views
5

Empiezo a utilizar OpenMP hace 3 días. Quiero saber cómo usar #pragma para hacer que cada núcleo ejecute un único hilo. En más detalles: -en OpenMP, ¿cómo puedo hacer que cada núcleo ejecute un único hilo?

int ncores = omp_get_num_procs();

for(i = 0; i < ncores;i++){

....

}

Quiero que este bucle para ser distribuidos en los núcleos que tengo así, ¿qué #pragma que debo usar?

otra cosa, ¿qué significan eso #pragmas?

#pragma omp parallel

#pragma omp for

#pragma omp parallel for

que tiene poco confundido con los #pragmas

gracias usted mucho .. :)

Respuesta

8

rosca Fijación

Quiero saber cómo usar #pragma para hacer que cada núcleo único ejecute un solo hilo .

¿Qué implementación de openmp usas? La respuesta depende de eso.

Fijar no está definido con pragmas. Deberá usar variables de entorno. Cuando se utiliza gcc, se puede usar una variable de entorno al pin hilos para núcleos:

GOMP_CPU_AFFINITY="0-3" ./main 

se une el primer hilo a la primera base, la segunda rosca a la segunda, y así sucesivamente. Consulte el gomp documentation para obtener más información (sección 3, Variables de entorno). Olvidé cómo hacer lo mismo con PGI y otros compiladores, pero debería poder encontrar la respuesta para esos compiladores que usan un motor de búsqueda popular.

OpenMP pragmas

No hay manera de evitar la lectura de la documentación. Ver this link to an IBM website por ejemplo. Encontré el tutorial by Blaise Barney bastante útil.

1

La nueva implementación OpenMP (3.0+) hace la vida mucho más fácil . Simplemente puede agregar la siguiente línea a su .bashrc o .bash_profile.

exportación OMP_PROC_BIND = true

Cuestiones relacionadas