我一直在尝试构建围绕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 ++为MPICH 3.0.4编译,在Ubuntu 14.04中使用gcc 4.8.4,带有标志
-fopenmp -lm -std=c++11 -Wall
我可以做些什么或添加到代码中以使其工作,或者这只是当前工具无法完成的事情?
答案 0 :(得分:2)
这应该有效,as seen here:
#define PRAGMA(x) _Pragma(#x)
#define _mmc_(x) PRAGMA(omp x)
_Pragma
对于获取字符串文字有点严格,因此我们从整个pragma参数字符串中创建该文字,而不是在_Pragma
内拼凑它。正如您在帖子中尝试过的那样,预处理程序运算符不会在字符串文字中起作用。