关闭OpenMP

Tim*_*Tim 3 c++ parallel-processing openmp

在我的C++程序中,我想有时使用OpenMP运行其可执行文件,有时不使用OpenMP(即多线程或单线程).我正在考虑以下两种情况中我的代码如何使用OpenMP:

(1)假设我的代码只有#include <omp.h>和OpenMP指令.

(2)与(1)相同,我的代码进一步调用OpenMP函数omp_get_thread_num().

为了不为不同的运行提供不同的代码,是否使用一些自定义的预编译变量来保护OpenMP出现在我的代码中的唯一方法是什么?

感谢致敬!

Vla*_*zan 11

您可以使用环境变量:

set OMP_NUM_THREADS=1
Run Code Online (Sandbox Code Playgroud)

实际上,它不会关闭OpenMP.它将强制OpenMP仅为应用程序创建一个线程.它无需重新编译即可运行.我使用此变量来测试1,2,3,4等线程的可伸缩性.


Ste*_*eve 5

嗨,最简单的方法是

omp_set_num_threads(m_iUseableProcessors);
Run Code Online (Sandbox Code Playgroud)

m_iUseableProcessors您想要拆分计算的处理器数量在哪里。如果没有 OpenMP 功能,我不知道该怎么做。您可能会#ifdef关闭它们,但这会使您在编译时关闭 OpenMP。