首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭OpenMP

关闭OpenMP
EN

Stack Overflow用户
提问于 2009-08-31 14:01:12
回答 4查看 6.2K关注 0票数 5

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

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

(2)与(1)相同,并且我的代码进一步调用像omp_get_thread_num()这样的OpenMP函数。

为了不让不同的代码用于不同的运行,这是使用一些自定义的预编译器变量来保护OpenMP出现在我的代码中的唯一方法吗?

感谢和问候!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-31 14:33:47

嗨,最简单的方法是

代码语言:javascript
复制
omp_set_num_threads(m_iUseableProcessors);

其中,m_iUseableProcessors是您想要分割计算的处理器数量。如果没有OpenMP函数,我不知道该怎么做。您可能会将它们#ifdef出来,但这会使您在编译时关闭OpenMP。

票数 5
EN

Stack Overflow用户

发布于 2009-09-02 13:32:25

您可以使用环境变量:

代码语言:javascript
复制
set OMP_NUM_THREADS=1

实际上,它不会关闭OpenMP。它将强制OpenMP仅为应用程序创建一个线程。它不需要重新编译就可以工作。我使用这个变量来测试1、2、3、4等线程的可伸缩性。

票数 12
EN

Stack Overflow用户

发布于 2010-03-04 06:04:40

您可以将include放在下面:

代码语言:javascript
复制
#ifdef _OPENMP_
#include<omp.h> 
#endif

现在,如果您运行您的程序没有-fopenmp标志,它将忽略openmp指令

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1357604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档