【问题标题】:how can i understand my code in openMP?我如何理解我在 openMP 中的代码?
【发布时间】:2015-01-25 10:12:10
【问题描述】:

我从 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

【问题讨论】:

标签: c++ c multithreading parallel-processing openmp


【解决方案1】:

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

2) 是的,在这段代码中,每个线程都有自己的 ij 变量副本,这就是它们将单独运行的原因。

3) 在这个例子中我不确定,但我可以说你必须避免data dependency,因为它会导致代码并行工作的问题:处理器(或workers)必须只完成一项工作而不依赖于另一个工人的状态或结果带来更高的效率。请参阅SIMD 并尝试查找一些vectorization 信息。简而言之,向量化是一种有助于并行代码的技术,因为它实现了SIMD 范式。在现代 cpu 上,如 Intel Sandy Bridge 和使用此技术的旧架构,您可以通过使用 AVX/AVX2 扩展来加速并行计算。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2013-03-20
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多