我有这个函数,我想用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(这取决于每个步骤值)。
答案 0 :(得分:2)
您对x
的依赖性导致问题是正确的。这种依赖是在迭代之间。每次迭代都需要前一次迭代的x
。因此它使整个循环不可并行化。
看起来这个循环是使用重复平方计算功率模数。
简而言之:不,你无法将其并行化。依赖性是您正在使用的算法中固有的。