OpenMP 并行 'for' 无法正常工作
OpenMP parallel 'for' doesn't work properly
以下片段来自我的代码的一个函数:
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)
我想知道这个错误的原因是什么。
(Stefan 的回答)
当涉及 OpenMP 线程时,不要使用 static
变量。
事实是;对于静力学,它们有一个共享内存 space。所以他们很可能会跨线程互相干扰。你的并行循环都在同一个盒子里。
以下片段来自我的代码的一个函数:
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)
我想知道这个错误的原因是什么。
(Stefan 的回答)
当涉及 OpenMP 线程时,不要使用 static
变量。
事实是;对于静力学,它们有一个共享内存 space。所以他们很可能会跨线程互相干扰。你的并行循环都在同一个盒子里。