0
我在使用OpenMP的C代碼中遇到了奇怪的行爲。下面的代碼片段很經常死機:使用OpenMP在C和兩個嵌套循環中崩潰
#define XLEN (5)
#define YLEN (5)
int do_something(void)
{
int c,d;
double data[YLEN][XLEN];
#pragma omp parallel for
for(c=0;c<XLEN;c++)
{
for(d=0;d<YLEN;d++)
{
/*
In the real code here I calculate a result which is a function of c and d, save it in a temporary variable and then write it in the critical section. However this is not necessary for this minimal example.
*/
#pragma omp critical
{
data[d][c]=0.0f;
}
}
}
return 0;
}
int main(void)
{
do_something();
}
我使用的是Mac OS X和我的代碼是使用GCC任(第6版,從MacPorts的)或鏘編譯(版本3.8,也從MacPorts的)。
現在解釋爲什麼這能解決問題。 –
該變量對於爲最外面的for循環生成的所有併發線程都是相同的,而您想要的是每個線程的不同變量。 – zakk