我是OpenMP的新手,我坚持使用基本操作。以下是我的问题的示例代码。
#include <omp.h>
int main(void)
{
int A[16] = {1,2,3,4,5 ...... 16};
#pragma omp parallel for firstprivate(A)
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
A[i*4+j] = Process(A[i*4+j]);
}
}
}
很明显,A的值是每个线程的本地值。但是,最后,我想将每个线程计算出的A的一部分写回全局变量A中的相应位置。如何实现?
答案 0 :(得分:0)
只需A
分享即可。这很好,因为所有循环迭代都在A
的单独元素上运行。请记住,OpenMP是共享内存编程。
您可以使用shared
代替firstprivate
明确地执行此操作,或者只是删除声明:
int A[16] = {1,2,3,4,5 ...... 16};
#pragma omp parallel for
for(int i = 0; i < 4; i++)
默认情况下,所有变量都在并行区域之外声明。您可以在this answer中找到扩展的示例性说明。