将OpenMP代码编译为C代码

时间:2012-05-16 10:07:39

标签: c linux gcc openmp x86-64

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

2 个答案:

答案 0 :(得分:8)

与其他评论者一样,指出gcc不会将OpenMP指令转换为普通C。

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

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

答案 1 :(得分: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代码,准备由系统的本机编译器编译。

和OdinMP:

  

OdinMP / CCp是用Java编写的   可移植性原因并采用OpenMP进行C程序   指令并生成POSIX线程的C程序。

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