繁体   English   中英

我如何理解我在openMP中的代码?

[英]how can i understand my code in openMP?

我从openMP开始,我想并行化这部分代码:

for (i=0 ;i<n ;i++) 
    for (j=1 ;j<n ;j++)  
       A[i][j]+=A[i][j-1];

我找到这个答案:

#pragma omp parallel for private(i, j) shared(A, n)
for (i = 0; i < n; ++i) 
  for (j = 1; j < n; ++j)  
    A[i][j] += A[i][j-1];

我有一些疑问:
-为什么i私有而不共享?
-关于这个答案,如果我有4个线程,那么每个线程都有(i = 0; i <n; ++ i)和(j = 0; j <n; ++ j)迭代? 我需要你的帮助。

1) i是私有的,因为每个线程需要分别从0迭代到n 否则,如果让i共享(当您的线程在一起时)将在一个循环中从0循环到n

2)是的,在此代码中,每个线程都有其自己的ij变量副本,因此它们将分开运行。

3)在这个示例中我不确定,但是我可以说您必须避免data dependency因为它会导致使代码并行工作的问题:处理器(或workers )必须仅完成一项工作,而又不依赖于另一个worker的状态或结果带来更高的效率。 请参阅SIMD并尝试查找一些vectorization信息。 简而言之,矢量化是一种实现SIMD范例的技术,可在代码并行化方面提供很大帮助。 在现代CPU(如Intel Sandy Bridge和较旧的体系结构上,使用此技术可以使您通过使用AVX/AVX2扩展来极大地加快并行计算的速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM