Tengo un código que puede ejecutarse con (o sin) OpenMP; depende de cómo el usuario configure el archivo MAKE. Si quieren ejecutar OpenMP, simplemente agregan -fopenmp a CFLAGS y CXXFLAGS .
Estoy tratando de determinar qué macro de preprocesador puedo usar para saber cuándo -fopenmp está en vigor. El encabezado omp.h no parece muy interesante:
$ 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__))Y no puedo hacer que el preprocesador ofrezca nada útil:
$ 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" ¿Qué definición de preprocesador proporciona -fopenmp ?
Esto es similar a ¿Cómo saber si OpenMP está funcionando? Pero estoy interesado en el tiempo de compilación, y no en el tiempo de ejecución o posterior a la compilación.
Nota : este proyecto no usa Boost, no usa Autotools y no usa Cmake. Solo usa un archivo MAKE.
Su grep era demasiado específico, debería haber buscado "openmp".
O más bien, diferenciar cpp -dM -fopenmp </dev/null y cpp -dM </dev/null produce una sola diferencia:
#define _OPENMP 201107Que debería ser exactamente lo que estás buscando.