gpt4 book ai didi

c++ - omp_set_num_threads 总是返回 0 并且我无法使用 omp_get_thread_num() 获取线程号

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:47 25 4
gpt4 key购买 nike

我有一个使用 omp 进行并行化的 C++ 类库。我注意到我的问题,因为它总是用完我处理器上的所有内核,不管 omp_set_num_threads(threadCount) 有什么作为输入。

所以在进行调查时,我意识到让 num_threads 工作的唯一方法是不使用 omp_set_num_threads() 方法,而是像这样在并行指令上设置 num_threads:

#pragma omp parallel num_threads(4)
{
int i = omp_get_thread_num();
printf_s("Hello from thread %d\n", i);
}

在上面的例子中,输出是:

Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0

如果我改为使用以下内容:

    omp_set_num_threads(4);
#pragma omp parallel //num_threads(4)
{
int i = omp_get_thread_num();
printf_s("Hello from thread %d\n", i);
}

输出是

Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0
Hello from thread 0

但是,我创建了一个类型为 Win32 控制台应用程序的新项目,omp_set_num_threads 有效并且我得到了输出:

来自线程 0 的问候来自线程 2 的问候来自线程 1 的问候来自线程 3 的问候

我不得不认为这与项目类型或项目上的某些参数有关。有谁知道它可能是什么?

最好的问候理查德

最佳答案

我现在解决了这个问题,所以这个线程可以关闭,除非有人能回答为什么会这样,解释如下:

我遇到的问题是我的 C++ 项目属性页中的属性公共(public)语言运行时支持设置为无公共(public)语言运行时支持。我们更改了此设置,因为 visual studio 2010 不支持将此设置设置为“公共(public)语言运行时支持”的 C++ 应用程序的智能感知。但似乎需要设置才能使线程工作,正如我上面所解释的那样。

有人知道为什么吗?

最好的问候理查德

关于c++ - omp_set_num_threads 总是返回 0 并且我无法使用 omp_get_thread_num() 获取线程号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com