0
我在OpenMP中使用了一個結構數組,但它失敗了,而我使用了多維數組,它給了我正確的結果。我想知道爲什麼。使用的結構的
定義: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];
}
}
祿並行段共享和使用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數組並行填充爲子句。
第一種情況未能給出分段錯誤,但第二種情況正在成功執行,給出正確的輸出。
由於mig必須由本機C代碼賦值,因此不使用向量。
請幫助我理解兩者之間的區別。
是你不使用'std :: vector>'??? –
你不能認真對待這個'float *** mig;'???典型的新手指針濫用是完全不必要和不必要的。 STAHP。只要去學習適當的C++。 –
第一個版本應該包含'loc * Loc = new loc [nthread];' –