使用OpenMP进行多线程循环

时间:2017-04-26 17:34:04

标签: gcc openmp

我正在尝试使用openmp进行多线程处理。对于看起来如下的代码来说,这很容易实现

#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;无效。

1 个答案:

答案 0 :(得分: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;
    }
}

更普遍的一点,可能适用于您的真实代码(我确定您发布的是真实代码的简化版本),是否可以重写该代码以启用&#39;易&#39;并行化。虽然需要一些思考。