2011-08-24 15 views
6

Tengo un bucle que ha sido paralelizado por OpenMP, pero debido a la naturaleza de la tarea, hay 4 critical cláusulas.Cómo crear un perfil de cuellos de botella OpenMP

¿Cuál sería la mejor manera de perfilar la velocidad y averiguar cuáles de las cláusulas críticas (o quizás no críticas (!)) Ocupan la mayor parte del tiempo dentro del ciclo?

I uso Ubuntu 10.04 con g ++ 4.4.3

+0

Modifiqué la publicación original con información adicional – Mikhail

+1

Realicé dicha tarea modificando las fuentes de la biblioteca omp y añadiéndoles un rdtsc's – osgx

Respuesta

2

OpenMP incluye las funciones de omp_get_wtime() y omp_get_wtick() para medir el rendimiento de temporización (docs here), recomendaría el uso de estos.

De lo contrario, intente con un generador de perfiles. Prefiero el generador de perfiles de la CPU de Google que se puede encontrar here.

También está el modo manual descrito en this respuesta.

4

Scalasca es una buena herramienta para perfilar códigos OpenMP (y MPI) y analizar los resultados. Tau también es muy agradable, pero mucho más difícil de usar. Las herramientas de Intel, como el vtune, también son buenas pero muy caras.

+0

La intel vtune es un producto muy bueno. Comparado con scalasca o tau, el uso es muy fácil. Definitivamente vale la pena el dinero. – tune2fs

+0

VTune se puede utilizar de forma gratuita para software no comercial. http://software.intel.com/en-us/non-commercial-software-development – SaiyanGirl

+0

intel parece haber dejado de ofrecer vtune gratis. Ahora solo hay una oferta para uso académico. –

3

Arm MAP tiene perfiles OpenMP y pthreads, y funciona sin necesidad de instrumentar o modificar su código fuente. Puede ver problemas de sincronización y dónde los hilos pasan tiempo hasta el nivel de la línea de origen. La entrada del blog OpenMP profiling merece la pena leerla.

MAP es ampliamente utilizado para la computación de alto rendimiento, ya que también es un perfil de aplicaciones multiproceso como MPI.

Cuestiones relacionadas