【发布时间】:2015-08-28 11:12:30
【问题描述】:
我有一些代码可以使用(或不使用)OpenMP 运行——这取决于用户如何设置生成文件。如果他们想使用 OpenMP 运行,那么他们只需将 -fopenmp 添加到 CFLAGS 和 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 提供什么预处理器定义?
这类似于How to tell if OpenMP is working? 但我对编译时间感兴趣,而不是构建后或运行时。
注意:本项目不使用Boost,不使用Autotools,也不使用Cmake。它只使用一个makefile。
【问题讨论】:
-
#if OMP_H有什么问题? -
快速思考一下(我不使用 OpenMP):为什么在调用 gcc 时不简单地使用
-D WITH_OPENMP(或类似的)? -
是的,请阅读答案。正如我所写:“只是一个快速的想法”。另外:您的代码是 C++,而不是 C(错误标签)
标签: c openmp c-preprocessor