OpenMP并行“ for”无法正常工作

时间:2019-06-19 20:28:16

标签: c openmp

以下代码片段来自我的代码之一:

static int i;

#pragma omp parallel for default(shared) private(i) schedule(static,1)
for (i=0; i<ttm_ic_last; i++)
{
    static int ni, ni1, ni2;
    static double ni_ratio;
    static double temp_e, temp_l;
    ...
}

奇怪的是,当我注释以#pragma开头的行时,它可以正常工作,否则循环至少不会触及i的某些预期值。 (我不确定'touch'是否是正确的动词。)

我在使用工作站

gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)

我想知道导致此错误的原因是什么。

1 个答案:

答案 0 :(得分:1)

(斯蒂芬的回答)

涉及OpenMP线程时,请勿使用static变量。

问题是;使用静态变量时,它们具有共享的内存空间。因此,它们可能会在线程之间相互干扰。您的并行循环都在同一个方框内。