gpt4 book ai didi

multithreading - OpenMP 如何在内部工作

转载 作者:行者123 更新时间:2023-12-01 12:29:59 25 4
gpt4 key购买 nike

我试图编写一个小的 C 程序来弄清楚 OpenMP 是如何工作的。这个例子应该计算 1 到 1000 的总和;但是,它在终端中打印出 0。我只能在评论 #pragma 后得到想要的结果东西出来。有人可以告诉我原因吗?

This guide#pragma omp for将 for 循环的工作分配给当前团队的线程。它不创建线程,它只在当前执行团队的线程之间分配工作。所以我们应该在整个执行过程中只有一个主线程,对吗?

#include <stdio.h>

int main() {

int n, sum = 0;
#pragma omp for
for (n = 0; n <1000; n++) {
sum += n;
}

printf("%d\n");
return 0;
}

最佳答案

对于这样一个简单的示例,您有几个问题...

1)您没有开始并行区域。为此,请使用 omp parallel for而不仅仅是 omp for .

2)您的变量不会被用于处理不同循环的每个线程私有(private)。所以每个线程都在覆盖其他线程的变量版本。具体n需要私有(private)化。

3) 您正试图对多个线程中的一个共享变量求和。这必须通过 reduction 来完成。条款。

4)你实际上并没有打印任何东西。您的 printf()语法原样永远不会打印正确的结果。

所以你的例子真的应该是这样的:

int n, sum = 0;
#pragma omp parallel for private(n) reduction(+:sum)
for (n = 0; n < 1000; n++) {
sum += n;
}

printf("%d\n", sum);

我强烈建议您查找基本的 OpenMP 教程(在线或书籍中)。只需稍加研究,前 3 个问题就很明显了。

关于multithreading - OpenMP 如何在内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166449/

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