How to disable OpenMP directives in a nice way?

后端 未结 3 675
不思量自难忘°
不思量自难忘° 2020-12-15 06:10

I have C++ code with OpenMP pragmas inside. I want to test this code both for multithread mode (with OpenMP) and in single thread mode (no OpenMP).

For now, to swit

相关标签:
3条回答
  • 2020-12-15 06:24

    The way such things are usually handled (the general case) is with #defines and #ifdef:

    In your header file:

    #ifndef SINGLETHREADED
    #pragma omp
    #endif
    

    When you compile, add -DSINGLETHREADED to disable OpenMP:

    cc  -DSINGLETHREADED <other flags go here> code.c
    
    0 讨论(0)
  • 2020-12-15 06:34

    If you do not compile with -fopenmp option, you won't get the parallel code. You can do it with an appropiate define and makefile that generates all codes.

    The OpenMP documentation says (only an example):

    #ifdef _OPENMP
       #include <omp.h>
    #else
       #define omp_get_thread_num() 0
    #endif
    

    See http://www.openmp.org/mp-documents/spec30.pdf (conditional compilation).

    0 讨论(0)
  • 2020-12-15 06:41

    Look into the compiler manual for the switch that disables OpenMP. For GCC, OpenMP is disabled by default and enabled with the -fopenmp option.

    Another option would be to run the code with the OMP_NUM_THREADS environment variable set to 1, though that is not exactly the same as compiling without OpenMP in the first place.

    0 讨论(0)
提交回复
热议问题