2011-04-13 21 views
9

Estoy ejecutando un programa de multiplicación de matrices completamente paralelo en un Mac Pro con un procesador Xeon. Creo 8 hilos (tantos hilos como núcleos), y no hay problemas de escritura compartida (no escribo en las mismas ubicaciones). Por alguna razón, mi uso de pthread_create y pthread_join es aproximadamente el doble de lento que con #pragma openmp.Por qué los subprocesos POSIX son más lentos que OpenMP

No hay otras diferencias en nada ... mismas opciones de compilación, el mismo número de hilos en ambos casos, el mismo código (excepto las porciones pthread Pragma/obviamente), etc.

Y los bucles son muy grande - No estoy paralelizando pequeños bucles.

(realmente no puedo enviar el código porque es un trabajo escolar.)

¿Por qué puede estar pasando esto? ¿OpenMP no usa los hilos POSIX? ¿Cómo puede ser más rápido?

+0

¿Ambos usan la misma cantidad de tiempo acumulado de CPU? – Gabe

+1

¿Ha verificado que OpenMP está utilizando la misma cantidad de subprocesos que su versión manual? – Gabe

+3

¿Qué sucede si solo usa 7 hilos en cada uno? – Jess

Respuesta

6

(corregido) ¿Cuál es su hilo principal? Sin ver tu código, estaba adivinando que el hilo principal apenas se está ejecutando, pero sigue consumiendo ciclos de reloj mientras termina el subproceso, luego comienza de nuevo y continúa. Cada vez que sus ciclos dados hay sobrecarga para pausar/continuar los otros hilos.

En OpenMP, el hilo principal probablemente se queda dormido y espera un evento de activación cuando finalizan las regiones paralelas.

+1

Um ... eso no es exactamente lo que quise decir jaja. Quise decir que había un hilo más que la cantidad de núcleos, por lo que competían por el tiempo de procesamiento. (La sobrecarga de administración es insignificante aquí, ya que definitivamente no es * más * que la de OpenMP). – Mehrdad

+2

En OpenMP, el hilo inicial (o en su terminología el hilo principal) funciona junto con el resto del equipo en las regiones de trabajo compartido . Ninguno de los hilos duerme a menos que no haya más trabajo por hacer (y luego los hilos duermen o giran, esperan en la barrera, dependiendo de la implementación). – ejd

Cuestiones relacionadas