2015-09-14 31 views
-1

我想在openmp中重复使用square和multiply方法来实现RSA算法的parallize。 代码如下:在openmp中的rsa算法

long long unsigned int mod_exp(int base,int exp,int n) 
{ 
    long long unsigned int i,pow1=1,pow2=1,pow3=1,pow4=1,pow=1,pow5=1; 
    int exp1=exp/4; 
    int id; 

    for(i=0;i<exp1;i++) 
     pow1=(pow1*base)%n; 

    for(i=0;i<exp1;i++) 
     pow2=(pow2*base)%n; 

    for(i=0;i<exp1;i++) 
     pow3=(pow3*base)%n; 

    for(i=0;i<exp1;i++) 
     pow4=(pow4*base)%n; 

    for(i=0;i<1;i++) 
     pow5=(pow5*base)%n; 
    pow=pow1*pow2*pow3*pow4*pow5; 

    pow=pow%n; 
    return pow; 
} 

只是使用#pragma OMP为我无法找到得到正确的输出。 好心帮

+2

*“我无法找到正确的输出”*根本没有帮助。期望得到什么,你会得到什么以及你的投入是什么? –

回答

0

我想你可以去这样的事情:

long long unsigned int i, pow = 1, exp1 = exp/4; 
int k; 

#pragma omp parallel for reduction(* : pow) 
for (k = 0; k < 5; k++) { 
    for (i = 0; i < exp1 ; i++) { 
     pow = (pow * base) % n; 
    } 
} 

这应该工作,但我怀疑它会做你多好,因为工作的量非常有限,该并行化开销非常可能会减慢代码速度,而不是加快速度。

编辑:嗡嗡声,实际上,我无法理解最初的代码...为什么我们做5次相同的计算?我错过了什么?