2015-09-14 26 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次相同的計算?我錯過了什麼?