8

有没有一种方法可以将 OpenMP 的代码编译为 C 代码(将 OpenMP 部分翻译为纯 C),这样我就可以知道 OpenMP 正在生成什么样的代码。我正在使用 gcc 4.4 编译器。

4

2 回答 2

8

就像其他评论者指出的那样,gcc 不会将 OpenMP 指令转换为纯 C。

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

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

于 2012-05-17T12:12:15.637 回答
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 代码翻译成纯 C 几乎是不可能的;因为旧的普通 C 不支持线程,而且我认为 OpenMP 源代码到源代码的翻译器还不知道 C11。OpenMP 程序可以通过 POSIX 线程转换为 C,也可以通过一些运行时库(如 libgomp)调用转换为 C。例如,OpenUH 有自己的库,它本身使用 pthreads。

于 2012-05-17T10:18:49.720 回答