有没有一种方法可以将OpenMP编译为C代码(OpenMP部分翻译为纯C),这样我就可以知道OpenMP生成的是哪种代码。 我正在使用gcc 4.4编译器。
至少有http://www2.cs.uh.edu/~openuh/ OpenUH(甚至列在http://openmp.org/wp/openmp-compilers/ ),它可以
发出优化的C或Fortran 77代码,可以由其他平台上的本地编译器编译。
还有: http : //www.cs.uoi.gr/~ompi/ OMPi:
OMPi编译器将C源代码与OpenMP #pragmas一起使用,并生成转换的多线程C代码,准备由系统的本机编译器进行编译。
和OdinMP:
OdinMP / CCp是为了便于携带而使用Java语言编写的,并采用带有OpenMP指令的C语言程序,并为POSIX线程生成一个C语言程序。
我应该说,将openmp代码翻译成Plain C几乎是不可能的。 因为老的纯C没有线程的支持,我认为OpenMP的源代码翻译者还没有意识到C11。 使用POSIX线程可以将OpenMP程序翻译成C语言,或者使用一些运行时库(如libgomp)调用C语言。 例如,OpenUH有自己的库,它使用pthreads本身。
像其他评论者指出的那样,gcc不会将OpenMP指令转换为普通的C.
但是如果你想知道gcc用你的指令做什么,你可以使用-fdump-tree-optimized
选项进行编译。 这将产生至少类C的程序的中间表示。
有几个阶段可以转储(查看gcc的手册页),在优化阶段,OpenMP指令已经被调用到GOMP运行时库中。 看着这种表现可能会让你对发生的事情有所了解。