我有包含动态 3d 数组的类。类的对象调用一个函数,该函数执行一些计算来填充一维数组,最后用一维数组数据填充对象的三维数组。一维数组的大小与三维数组的大小相同。
我正在使用 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;
}