将OpenMP代码编译为C代码

Met*_*est 8 c linux gcc x86-64 openmp

有没有办法可以用OpenMP编译代码到C代码(将OpenMP部分翻译成普通的C),这样我就可以知道OpenMP生成了什么样的代码.我正在使用gcc 4.4编译器.

joh*_*hlo 8

像其他评论者指出的那样,gcc没有将OpenMP指令翻译成普通的C.

但是如果你想了解gcc对你的指令做什么,你可以使用该-fdump-tree-optimized选项进行编译 .这将生成至少类似C的程序的中间表示.

有几个阶段可以转储(查看gcc的手册页),在优化 阶段,OpenMP指令已被替换为对GOMP运行时库的调用.查看该表示可能会让您对正在发生的事情有所了解.


osg*_*sgx 3

至少有http://www2.cs.uh.edu/~openuh/ OpenUH(甚至在http://openmp.org/wp/openmp-compilers/列出),它可以

发出优化的 C 或 Fortran 77 代码,可以由其他平台上的本机编译器编译。

另外还有: http: //www.cs.uoi.gr/~ompi/ OMPi:

OMPi 编译器使用 OpenMP #pragmas 获取 C 源代码,并生成转换后的多线程 C 代码,准备好由系统的本机编译器进行编译。

和奥丁MP:

出于可移植性原因,OdinMP/CCp 是用 Java 编写的,它采用带有 OpenMP 指令的 C 程序,并为 POSIX 线程生成 C 程序。

我应该说,将 openmp 代码翻译成 Plain C 几乎是不可能的;因为旧的普通 C 不支持线程,而且我认为 OpenMP 源到源翻译器还不知道 C11。OpenMP 程序可以使用 POSIX 线程转换为 C,也可以使用某些运行时库(如 libgomp)调用转换为 C。例如,OpenUH 有自己的库,它本身使用 pthreads。