example - openmp c++
¿Cómo deshabilitar las directivas OpenMP de una manera agradable? (3)
Busque en el manual del compilador el interruptor que desactiva OpenMP. Para GCC, OpenMP está deshabilitado por defecto y habilitado con la opción -fopenmp.
Otra opción sería ejecutar el código con la variable de entorno OMP_NUM_THREADS establecida en 1, aunque no es exactamente lo mismo que compilar sin OpenMP en primer lugar.
Tengo código C ++ con pragmas OpenMP dentro. Quiero probar este código tanto para el modo multihilo (con OpenMP) como para el modo de un solo hilo (sin OpenMP).
Por ahora, para cambiar entre modos necesito comentar #pragma omp
(o al menos en parallel
).
¿Cuál es la forma más limpia o predeterminada de habilitar / deshabilitar OpenMP?
La forma en que se manejan estas cosas (el caso general) es con #define
s y #ifdef
:
En su archivo de encabezado:
#ifndef SINGLETHREADED
#pragma omp
#endif
Cuando compile, agregue -DSINGLETHREADED para deshabilitar OpenMP:
cc -DSINGLETHREADED <other flags go here> code.c
Si no compila con la opción -fopenmp, no obtendrá el código paralelo. Puede hacerlo con una definición apropiada y un makefile que genere todos los códigos.
La documentación de OpenMP dice (solo un ejemplo):
#ifdef _OPENMP
#include <omp.h>
#else
#define omp_get_thread_num() 0
#endif
Consulte http://www.openmp.org/mp-documents/spec30.pdf (compilación condicional).