gpt4 book ai didi

c++ - OpenMP 意外输出

转载 作者:行者123 更新时间:2023-11-30 02:07:32 26 4
gpt4 key购买 nike

我有两个并行的线程,但是这个线程没有分解成线程:

#pragma omp parallel sections
{
#pragma omp section
{
for(int i=0;i<4;++i)
printf("Loop A %d %d\n", omp_get_thread_num(),2);
}
#pragma omp section
{
for(int i=0;i<4;++i)
printf("Loop B %d %d\n", omp_get_thread_num(),3);
}
}

输出:

正在运行......

Loop A 0 2
Loop A 0 2
Loop A 0 2
Loop A 0 2
Loop B 0 3
Loop B 0 3
Loop B 0 3
Loop B 0 3

最佳答案

发生这种情况的原因有很多。我会列出我知道的可能的:

1:确保您确实拥有一台多核机器。如果它是单核机器(没有 HT),它将只运行一个线程。

2:如果这是在 Visual Studio 上,您需要启用 OpenMP 支持。仅包含 header 是不够的:

Project -> Properties -> Configuration Properties -> C/C++ -> Language -> Open MP Support

将其更改为Yes (/openmp),它应该被启用。

我使用 OpenMP 设置正确地运行了你的代码,我得到了这个:

Loop A 0 2
Loop B 2 3
Loop B 2 3
Loop B 2 3
Loop B 2 3
Loop A 0 2
Loop A 0 2
Loop A 0 2

所以我认为你的代码是正确的。

关于c++ - OpenMP 意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775533/

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