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