2016-01-28 35 views
3

我一直在试图围绕MPI和OpenMP构建一个包装,使其具有统一的代码格式,而不必在MPI_xxx,omp_xxx和#pragma omp xxx之间进行切换。如何为编译指示创建包装并使其正确编译?

我一直在周围产生不同的#pragma OMP指令的包装问题,到目前为止,我已经得到了最好是把它作为:

#define _mmc_(x) _Pragma("omp ## #x") 

(MMC是暂定名我库)

所以,如果我想有

#pragma omp parallel for 

相应的包装应该是

_mmc_(parallel for) 

然而,当它编译,编译器似乎以不同的方式对其进行评估,给我编译警告

test.cpp:22:0: warning: ignoring #pragma omp [-Wunknown-pragmas] 
    _mmc_(parallel for) 

我与MPIC++在Ubuntu 14.04编译的MPICH 3.0.4周围GCC 4.8.4,与标志

-fopenmp -lm -std=c++11 -Wall 

有什么我可以做或添加到代码来完成这项工作,或者这仅仅是一些无法用现有的工具来完成?

+0

小记:以下划线开头的全局名称保留用于实现。 – chris

回答

2

这应该工作,as seen here

#define PRAGMA(x) _Pragma(#x) 
#define _mmc_(x) PRAGMA(omp x) 

_Pragma是服用一个字符串有点严格,所以我们就可以对整个编译参数字符串常量,而不是拼凑在一起,这里面_Pragma。预处理器操作符不会在字符串内工作,就像您在帖子中尝试的那样。

+0

谢谢!这完全按照我想要的方式工作。还要感谢关于以下划线开头的名字的说明,我完全忘记了这一点。 –