2013-09-22 30 views
0

我已經寫在Visual Studio 2012開MP一個計劃,我有一些problem.this是我的代碼:的#pragma OMP VS CPU 100%使用率的關鍵

#pragma omp parallel num_threads(4) private(k) 
     { 

    #pragma omp for 
    for(k=0x20AC6E12AF3E4DB0;k<=MAXINT64;k++) 
     { 
    U.k=k; 
    init(); 
    Decrypt(s1); 
    Decrypt(s2); 
     } 
     } 

上面的代碼編譯,我的CPU使用率是100%,但產量是錯誤的。當我更改代碼這樣:

#pragma omp parallel num_threads(4) private(k) 
     {  
    #pragma omp for 
    for(k=0x20AC6E12AF3E4DB0;k<=MAXINT64;k++) 
     { 
    U.k=k; 
    init(); 
      #pragma omp critical 
     { 
    Decrypt(s1); 
    Decrypt(s2); 
     } 
     } 
     } 

輸出成爲正確的,但在這種情況下,我的CPU使用率不是100%,我居然瘦了並行! 我能做什麼?

+2

iPhone?視覺工作室?咦? –

回答

0

你的程序沒有說明s1和s2是什麼,init()修改了什麼。無論如何,您需要確保一個線程不會更改另一個線程使用的數據。

「#pragma omp critical」是一個定義的瓶頸,因爲它使得塊一次只能由一個線程輸入。

一個「#pragma omp parallel for」應該就夠了。讓線程在for循環中創建修改變量的副本。