2 c c++ parallel-processing multithreading openmp
我在openMP中开始,我希望并行化这部分代码:
for (i=0 ;i<n ;i++)
for (j=1 ;j<n ;j++)
A[i][j]+=A[i][j-1];
Run Code Online (Sandbox Code Playgroud)
我该怎么做这个for并行?
我建议您先查看以下链接:http://bisqwit.iki.fi/story/howto/openmp/.它简要概述了使用OpenMP可以实现的目标.
对于您的代码片段,并行化可以像编写一个pragma一样简单:
#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];
Run Code Online (Sandbox Code Playgroud)
这就是OMP背后的想法:您使用消息注释您的程序,允许代码编译并与OMP链接然后并行运行,或编译忽略编译指示,在这种情况下程序应保持有效的顺序程序.
在这种情况下,pragma决定运行到运行时的线程数.运行时通常根据计算机中的核心数量做出决策.外部循环将被并行化,并且每次i迭代将在概念上由不同的线程执行.这很重要,因为您在各种j迭代之间存在数据依赖关系,并行通信/同步很棘手.将内循环保持在线程中可以解决此问题.shared可以省略该部分,因为默认情况下共享内容.但是出于这个原因,你不应该把它排除在外:明确你想要分享的内容以及你想要私密的东西.这是避免编写并行代码时发生的许多错误的好方法.