gpt4 book ai didi

openmp - OpenMP 分发中的 SECTIONS 指令如何工作?

转载 作者:行者123 更新时间:2023-12-03 07:13:07 26 4
gpt4 key购买 nike

在 OpenMP 中使用ompsections时,线程会被分配到sections内的 block ,还是每个线程会被分配到每个section?

nthreads == 3时:

#pragma omp sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}

#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}

输出:

id=1
id=1

但是当我执行以下代码时:

#pragma omp sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}

#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}

#pragma omp sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}

#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}

输出:

id=1
id=1

id=2
id=2

从这些输出中我无法理解 OpenMP 中节的概念。

最佳答案

OP 发布的代码永远不会并行执行,因为 parallel 关键字不会出现。 OP 的 id 不同于 0 的事实表明他的代码可能嵌入在并行指令中。然而,从他的帖子中并不清楚这一点,可能会让初学者感到困惑。

最小合理的示例是(对于OP发布的第一个示例):

#pragma omp parallel sections
{
#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}

#pragma omp section
{
printf ("id = %d, \n", omp_get_thread_num());
}
}

在我的机器上,这会打印

id = 0,
id = 1,

显示这两个部分正在由不同的线程执行。

值得注意的是,但是此代码无法提取比两个线程更多的并行性:如果使用更多线程执行它,其他线程没有任何工作要做,只会闲置。

关于openmp - OpenMP 分发中的 SECTIONS 指令如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770911/

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