gpt4 book ai didi

c - OpenMP 任务和线程创建

转载 作者:行者123 更新时间:2023-12-02 00:11:51 25 4
gpt4 key购买 nike

我想在 OpenMP 程序中获取不同线程的 ID。为什么我为以下代码获得相同的线程 ID?

#pragma omp task untied
id1 = omp_get_thread_num(); printf("TID:%d\n",id1);
foo_par(A);
#pragma omp task untied
id2 = omp_get_thread_num(); printf("TID:%d\n",id2);
foo_par(B);
....
为什么我得到“0” id1id2 ?

最佳答案

使用您的代码:

#pragma omp task untied
id1 = omp_get_thread_num(); printf("TID:%d\n",id1);
foo_par(A);
#pragma omp task untied
id2 = omp_get_thread_num(); printf("TID:%d\n",id2);
foo_par(B);

因为,您没有使用 {}仅此说明 omp_get_thread_num();将成为一项任务。

顺便说一句,请记住 task pragmaOpenMP 3.0 起可用,因此如果您的 GCC 是 4.4 的旧版本,则任务指令将被忽略。

请尝试以下操作:
#pragma omp parallel region
{
#pragma omp single
{
#pragma omp task untied
{
id1 = omp_get_thread_num(); printf("TID:%d\n",id1);
foo_par(A);
}

#pragma omp task untied
{
id2 = omp_get_thread_num(); printf("TID:%d\n",id2);
foo_par(B);
}
}
}

需要单个构造,以便仅由一个线程创建任务。除此以外,
每个任务都会被创建 N 次(N == 线程数)。

请注意,如果一个线程“X”能够完成其工作并请求池中的另一项任务,则它可能会在团队中的另一个线程之前启动。换句话说,即使您定义了 2 个不同的任务(例如),这些任务也可能由同一个线程执行。

关于c - OpenMP 任务和线程创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14800717/

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