Pregunta

compilo este fragmento de código en Snow Leopard y Linux y consigo resultados diferentes. El leopardo de nieve, la primera llamada de omp_get_max_threads devuelve 2, que es mi número de núcleos, mientras que el segundo vuelve 1. En Linux, tanto para llamadas de retorno 4, que es mi número de núcleos. Creo que Linux tiene el comportamiento correcto, estoy en lo cierto? Son ambas correctas y sólo tengo una mala interpretación de esta función?

#include <stdio.h>
#include <omp.h>

int main() {
  printf(" In a serial region; max threads are : %d\n", omp_get_max_threads());
#pragma omp parallel
{
  #pragma omp master
  printf(" In a parallel region; max threads are : %d\n", omp_get_max_threads());
}
}

salida de Mac:

 In a serial region; max threads are : 2
 In a parallel region; max threads are : 1

Linux de salida:

 In a serial region; max threads are : 4
 In a parallel region; max threads are : 4
¿Fue útil?

Solución

Esta llamada está bien especificado en la especificación OpenMP. Linux tiene el comportamiento correcto en este caso. con lo que se dice, se encuentra en una región principal que es efectivamente serie y FHE el hilo principal, por lo que el num hilos llamada es explicable. si no eres atado a pura c les animo a mirar a la biblioteca de C ++ TBB y en particular el subconjunto PPL, encontrará más generalidad y del composability como para el paralelismo anidado. Estoy en myphone así que disculpas por los errores tipográficos aquí.

Otros consejos

Con Apple suministra gcc 4.2 [gcc versión 4.2.1 (Apple Inc. construir 5566)] en Leopard, consigo los mismos resultados que usted (excepto que mi MacBook tiene un menor número de núcleos).

In a serial region; max threads are : 2
In a parallel region; max threads are : 1

Lo mismo ocurre con 4.3.4 de MacPorts.

Sin embargo, con gcc 4.4.2 y 4.5.0 20091231 (experimental) de MacPorts, en el mismo equipo me sale:

In a serial region; max threads are : 2
In a parallel region; max threads are : 2

Parece que este no es un problema de Mac frente a Linux, pero debido a la versión de gcc.

P.S. OpenMP puede hacer paralelismo anidado.

Sólo un recordatorio, hay un foro dedicado sólo para OpenMP, y leído por los desarrolladores de OpenMP, así como expertos OpenMP todo el mundo. Se acabó en el sitio oficial OpenMP: http://openmp.org/forum

Un gran lugar para hacer preguntas como esta, y para encontrar una gran cantidad de otros recursos a openmp.org

extraño. Siempre me dan el comportamiento esperado (usando 4.2.1, BUILD 5646 puntos 1) con OS X 10.6.2:

En mi Mac Pro

 In a serial region; max threads are : 8
 In a parallel region; max threads are : 8

y en mi iMac

In a serial region; max threads are : 2
In a parallel region; max threads are : 2

Debe ser algo más en juego aquí. Compilar con solo?

gcc fname.c -fopenmp
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top