2017-04-26 145 views
-1

我想用多線程的openmp。這是很容易的代碼,這樣做看起來如下使用OpenMP的多線程for循環

#pragma omp parallel for collapse(2) 
for (int n = 0; n < 1000; ++n) 
    for (int m = 0; m < 20; ++n) 

怎麼樣結構如下代碼:

int test, z; 
for (int n = 0; n < 1000; ++n) { 
    test = 3 * n; 
    for (int m = 0; m < 20; ++n) { 
     z = test * m; 
    } 
} 

#pragma omp parallel for collapse(2)不前的內部在這裏工作,因爲線test = 3 * n;的循環。

+0

@SeanBright對不起,我編輯它 – user2650277

回答

0

所以更換

for (int n = 0; n < 1000; ++n) { 
    test = 3 * n; 
    for (int m = 0; m < 20; ++n) { 
     z = test * m; 
    } 
} 

#pragma omp parallel for collapse(2) 
for (int n = 0; n < 1000; ++n) { 
    for (int m = 0; m < 20; ++n) { 
     z = 3 * n * m; 
    } 
} 

更普遍的觀點,這可能適用於您真正的代碼(我敢肯定你已經發布什麼是一個更爲簡化的版本你的真實代碼),是代碼通常可以被重寫以實現'簡單'並行化。雖然這需要一些想法。