2012-05-07 35 views
8

Estoy tratando de ejecutar LIBSVM en modo paralelo, sin embargo mi pregunta es en OpenMP en general. De acuerdo con LIBSVM FAQ, he modificado el código con #pragma llamadas para usar OpenMP. También he modificado el Makefile (por Un * x) mediante la adición de un argumento -fopenmp por lo que se convierte en:¿Cómo saber si OpenMP está funcionando?

CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp 

El código se compila bien. Compruebo (ya que no es mi PC) si OpenMP se instala por:

/sbin/ldconfig -p | grep gomp 

y veo que está instalado -probablemente-:

libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1 
libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1 

Ahora; cuando ejecuto el programa, no veo ninguna mejora de velocidad. También cuando consulto "arriba" el proceso usa como máximo% 100 CPU (hay 8 núcleos), también no hay un cuello de botella de CPU (solo un usuario más con% 100 de uso de CPU), esperaba ver más de % 100 (o un indicador diferente) que el proceso usa múltiples núcleos.

¿Hay alguna forma de comprobar si funciona en varios núcleos?

+0

Sólo un pensamiento, pero no debería ser máximo. 100%/número de núcleos cuando solo se está ejecutando un hilo? – Tibor

+1

no, cuando se emplean multinúcleos (al menos en la instalación de mi servidor) vemos valores mucho más grandes que 100% –

+1

@Tibor, la parte superior predeterminada es Irix que muestra 100% para la carga completa de una sola CPU yn * 100% para la carga completa de n CPUs. Si desactiva el modo Irix (presione 'I'), se mostrará 100% cuando se utilicen todas las CPU. –

Respuesta

7

Puede usar la función omp_get_num_threads(). Le devolverá la cantidad de hilos que utiliza su programa.

+6

Uno debe llamar 'omp_get_num_threads()' dentro de una región paralela. De lo contrario, siempre devuelve 1! –

1

Con omp_get_max_threads() obtienes la cantidad máxima de hilos disponibles para tu programa. También es el máximo de todos los valores de retorno posibles de omp_get_num_threads(). Puede establecer explícitamente el número de subprocesos que utilizará su programa con la variable de entorno OMP_NUM_THREADS, p. en bash a través de

$export OMP_NUM_THREADS=8; your_program 
Cuestiones relacionadas