使用openmp并行化

时间:2011-11-05 07:52:19

标签: c parallel-processing openmp

我有这个函数,我想用openmp并行化:

for(i=len-1;i>=0;i--){
  if(bin[i]==49) // bin is a binary number & is
                 // stored in a string. 49 is ascii value of 1
  {
     s=(s*x)%n;    
  }
  x=(x*x)%n;
}

我尝试使用#pragma omp parallel for,但它有效。我也尝试了减速功能,但我得到了错误的答案 我认为原因是因为s的值取决于x(这取决于每个步骤值)。

1 个答案:

答案 0 :(得分:2)

您对x的依赖性导致问题是正确的。这种依赖是在迭代之间。每次迭代都需要前一次迭代的x。因此它使整个循环不可并行化。

看起来这个循环是使用重复平方计算功率模数。

简而言之:不,你无法将其并行化。依赖性是您正在使用的算法中固有的。