使用OpenMP的多线程for循环

问题描述:

我想用多线程的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

所以更换

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; 
    } 
} 

更普遍的观点,这可能适用于您真正的代码(我敢肯定你已经发布什么是一个更为简化的版本你的真实代码),是代码通常可以被重写以实现'简单'并行化。虽然这需要一些想法。