¿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
Respuesta
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.
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.
- 1. Mida el tiempo de ejecución en C++ código OpenMP
- 2. Configuración de compilación en el código C#
- 3. OpenMP - Ejecución de código paralelo dentro de código paralelo
- 4. Usando openMP en el código de host de cuda?
- 5. OpenMP y C parallel for loop: ¿por qué mi código se ralentiza cuando se usa OpenMP?
- 6. Compilación de código de forma dinámica con C#
- 7. Mezclando el código de VB.net con el código de C#
- 8. Integrar generación de código con eclipse C++ compilación
- 9. ¿Cómo funciona el código de compilación LINQPad?
- 10. Interactuando con el código java de C#
- 11. Cómo inyectar código C# en tiempo de compilación?
- 12. Inyección de código con C#
- 13. g ++ vinculando la dependencia de orden al vincular el código c con el código C++
- 14. Compilación del código Erlang en Windows
- 15. Ver tanto el código de ensamblado como el código C
- 16. C# propiedades con código repetido
- 17. ¿Compilación o complicación del código .NET?
- 18. Compilación de código Lisp con macros de lectura
- 19. C++ OpenMP programa
- 20. ¿Es posible mezclar el código C89 con el código C99?
- 21. formateando el código en el tiempo de compilación
- 22. Compila el código para la compilación de versión en D
- 23. ¿Cuál es la diferencia entre el código de compilación y el código ejecutable?
- 24. Extensiones Python y OpenMP C
- 25. El código de Protobuf java tiene errores de compilación
- 26. Compilación cruzada Código ARM7 desde visual studio
- 27. Agregar fecha de compilación al código
- 28. C código compilado con C++: referencia indefinida
- 29. C# HPC - MPI y OpenMP
- 30. depurando el código de C# administrado y el código de C++ no administrado en una solución
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. –
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