我在 OpenMP 中使用了一个结构数组,但它失败了,而是我使用了多维数组,它给了我正确的结果。我想知道为什么。
所用结构的定义:
struct loc (
float **mig;
}
loc *Loc = new loc[nthread];
for(i=0; i<nthread; i++)
{
Loc[i].mig = new float*[nx];
for(j=0; j<nx; j++)
{
Loc[i].mig = new float[ny];
}
}
Loc 在并行部分中共享,并使用 tid 访问。
此实施失败。
比我使用多维数组:
float ***mig;
mig = new float**[nthread];
for(i=0; i<nthread; i++)
{
mig[i] = new float*[nx];
for(j=0; j<nx; j++)
{
mig[i][j] = new float[ny];
}
}
mig 在并行部分中共享。此实施有效。这里使用 tid 作为第一维来访问 2D mig。
在这两种情况下,mig 数组都是并行填充的 for 子句。
第一种情况未能给出分段错误,但第二种情况正在成功执行,给出正确的输出。
由于必须从本机 C 代码中为 mig 赋值,因此不使用向量。
请帮助我了解两者之间的区别。