2012-05-16 25 views
7

¿Hay alguna manera de compilar código con código OpenMP a C (con la parte OpenMP traducida a C simple), para poder saber qué tipo de código está generando OpenMP. Estoy usando el compilador gcc 4.4.Compilación de código OpenMP con el código C

+2

Creo que esta pregunta presupone que el compilador gcc traduce las llamadas OpenMP a C. Sospecho que, y la mayoría de los otros compiladores con OpenMP, traducen el código fuente al ensamblador, incluidas las llamadas a las funciones del sistema. Estoy bastante seguro de que su compilador producirá listas de ensambladores; eso puede ser lo que necesita para trabajar. Miro con interés una respuesta que demuestra mis expectativas equivocadas. –

+0

Afaik, puede ver el código fuente del compilador gcc, p. omp.h y los respectivos archivos fuente de la biblioteca (libgomp) para ver qué hacen estos pragmas. Pero no hay una rutina de reemplazo antes de llamar al compilador de c. ver [aquí] (http://gcc.gnu.org/onlinedocs/libgomp/Implementing-FOR-construct.html#Implementing-FOR-construct) – Bort

Respuesta

3

Hay al menos http://www2.cs.uh.edu/~openuh/ OpenUH (incluso que aparece al http://openmp.org/wp/openmp-compilers/), que puede

emiten C o Fortran 77 código que puede ser compilado por un compilador nativo en otras plataformas optimizado.

También hay: http://www.cs.uoi.gr/~ompi/ OMPI:

El compilador OMPI lleva el código fuente C con #pragmas OpenMP y produce transforma el código C multiproceso, listo para ser compilado por el compilador nativo del sistema.

y OdinMP:

OdinMP/CCP fue escrita en Java para razones de portabilidad y toma un C-programa con OpenMP directivas y produce un programa de C para los hilos POSIX.

Debo decir que es casi imposible traducir el código de apertura en Plain C; porque el viejo plain C no tiene soporte de hilos y creo que los traductores de fuente a fuente de OpenMP todavía no conocen el C11. El programa OpenMP se puede traducir a C con hilos POSIX o a C con algunas llamadas de la biblioteca en tiempo de ejecución (como libgomp). Por ejemplo, OpenUH tiene su propia biblioteca que usa pthreads.

6

Al igual que los otros comentaristas señalaron gcc no se traduce directivas OpenMP a llanura C.

Pero si quieres tener una idea de lo que gcc hace con sus directivas se puede compilar con la opción -fdump-tree-optimized. Esto generará la representación intermedia del programa que es al menos tipo C.

hay varias etapas que pueden ser objeto de dumping (consultar la página del manual de gcc), en la etapa optimizado las directivas OpenMP se han sustituido por las llamadas a la biblioteca de tiempo de ejecución GOMP. Si observa esa representación, puede darle algunas ideas sobre lo que está sucediendo.

Cuestiones relacionadas