以下代码片段来自我的代码之一:
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)
我想知道导致此错误的原因是什么。
答案 0 :(得分:1)
(斯蒂芬的回答)
涉及OpenMP线程时,请勿使用static
变量。
问题是;使用静态变量时,它们具有共享的内存空间。因此,它们可能会在线程之间相互干扰。您的并行循环都在同一个方框内。