我试图编写一个小型C程序来弄清楚OpenMP如何工作。这个例子应该计算1到1000之和;然而,它在终端打印出0。我只能在#pragma
的东西出来后才能得到想要的结果。有人可能会告诉我原因吗?OpenMP如何在内部工作
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;
}
这是我第一天开始学习并行编程,感谢您指出这些错误。你有没有在线推荐的书籍或幻灯片?我发现的大多数材料都假设读者在这个领域有一些相关的经验.. –
@YufanFei [这是一个很好的教程](https://computing.llnl.gov/tutorials/openMP/),我已经提到几次。虽然在我看来这本书的最好的书是[这一个](http://www.amazon.com/Using-OpenMP-Programming-Engineering-Computation/dp/0262533022)。非常方便新人。 – NoseKnowsAll
相关的for循环中的循环变量被预先确定为“private”,因此private(n)是多余的。 –