如何为pragma创建包装器并使其正确编译?

时间:2016-01-28 07:46:48

标签: c++ openmp pragma

我一直在尝试构建围绕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

我可以做些什么或添加到代码中以使其工作,或者这只是当前工具无法完成的事情?

1 个答案:

答案 0 :(得分:2)

这应该有效,as seen here

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

_Pragma对于获取字符串文字有点严格,因此我们从整个pragma参数字符串中创建该文字,而不是在_Pragma内拼凑它。正如您在帖子中尝试过的那样,预处理程序运算符不会在字符串文字中起作用。