我有一些可以使用(或不使用)OpenMP 运行的代码 - 这取决于用户如何设置 makefile。如果他们想使用 OpenMP 运行,那么他们只需添加-fopenmp
to CFLAGS
and CXXFLAGS
.
我正在尝试确定可以使用什么预处理器宏来判断何时-fopenmp
已生效。这omp.h
标题看起来不太有趣:
$ cat /usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h | grep define
#define OMP_H 1
#define _LIBGOMP_OMP_LOCK_DEFINED 1
# define __GOMP_NOTHROW throw ()
# define __GOMP_NOTHROW __attribute__((__nothrow__))
我无法让预处理器提供任何有用的东西:
$ cpp -dM -fopenmp </dev/null | grep -i omp
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
#define __STDC_IEC_559_COMPLEX__ 1
$ cpp -dM -fopenmp </dev/null | grep -i version
#define __GXX_ABI_VERSION 1002
#define __VERSION__ "4.8.2"
预处理器定义了什么-fopenmp
提供?
这类似于如何判断 OpenMP 是否正常工作?但我对编译时感兴趣,而不是构建后或运行时。
Note:这个项目不使用Boost,不使用Autotools,也不使用Cmake。它只使用一个 makefile。
您的 grep 过于具体,您应该寻找“openmp”。
或者更确切地说,差异cpp -dM -fopenmp </dev/null
and cpp -dM </dev/null
产生单个差异:
#define _OPENMP 201107
这应该正是您正在寻找的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)