2012-05-16 172 views
7

有没有一种方法可以将OpenMP编译为C代码(将OpenMP部分转换为纯C),以便我可以知道OpenMP正在生成哪种代码。我正在使用gcc 4.4编译器。将OpenMP代码编译为C代码

+2

我认为这个问题预先假设gcc编译器将OpenMP调用转换为C.我怀疑它和其他大多数OpenMP感知编译器都将源代码转换为汇编程序,包括调用系统函数。我很确定你的编译器会产生汇编列表;这可能是你需要合作的东西。我有兴趣观看一个答案,证明我的期望是错的。 –

+0

Afaik,你可以看看gcc编译器的源代码,例如omp.h和库的相应源文件(libgomp)来查看这些编译指示所做的工作。但是在调用c编译器之前没有替换例程。参见[here](http://gcc.gnu.org/onlinedocs/libgomp/Implementing-FOR-construct.html#Implementing-FOR-construct) – Bort

回答

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编译指示的C源代码并产生转化的多线程C代码,准备由该系统的本地编译器进行编译。

和OdinMP:

OdinMP/CCP是用Java编写的用于 可移植性原因,并采取了C-程序使用OpenMP 指令和产生用于POSIX线程的C程序。

我应该说,这几乎是不可能的OpenMP代码转换成普通的C;因为旧的普通C没有线程的支持,我认为OpenMP源码到源代码翻译者还没有意识到C11。可以使用POSIX线程将OpenMP程序转换为C语言,或者将某些运行时库(如libgomp)调用转换为C语言。例如,OpenUH有自己的库,它使用pthreads本身。

6

像其他评论者指出,海合会OpenMP指令并没有转化为纯C.

但是,如果你想获得什么样的gcc的想法与你的指令,你可以用 -fdump-tree-optimized选项编译一样。这将产生至少类C的程序的中间表示。

有几个阶段,可以进行转储(检查GCC的man page),在优化 阶段的OpenMP指令已被替换调用的GOMP运行时库。看看这种表示可能会让你对发生的事情有所了解。