我有包含動態3D數組的類。該類的對象調用一個函數,該函數執行一些計算來填充1d數組,並在最後用1d數組數據填充對象的3d數組.1d數組的大小與3d數組的大小相同。
我正在使用Openmp來加速計算。單線程執行正在給出正確的結果,但是一旦我進入多線程,我就會得到奇怪的結果。
示例代碼如下。請幫助解決問題。OpenMP結果不如預期
class A (
void func(float *buf);
void populateRes(*t);
private:
float ***res;
};
A a[n];
int nthrd = omp_get_num_threads();
float *buf;
while (cnt < nz)
{
#pragma omp parallel shared(cnt) private(buf, tid, omp_i)
{
if(cnt == 0)
buf = new float[x*y*z];
#pragma omp for
for(omp_i=0; omp_i<n; omp_i++)
{
a[omp_i].func(buf);
a[omp_i].populateRes(buf);
}
}
cnt++;
if(cnt >= nz)
delete []buf;
}