我正在尝试为康威的生命游戏优化我的 openMP 代码。我的主要问题可能与虚假共享有关。这是我的代码:这是我的类“mondo”中的一个方法。m 是我的方案,r 是行数,c 是列数,我使用的是环形方案。
void evolution() {
mondo tmp(r, c);
#pragma omp parallel for schedule(static)
for(int i=0; i<r; i++) {
unsigned a=(i+1)%r, b=(i-1+r)%r;
for(int j=0; j<c; j++) {
unsigned d=(j+1)%c, e=(j-1+c)%c;
int v=(m[a][j]+m[b][j]+m[a][d]+m[b][d]+m[a][e]+m[b][e]+m[i][d]+m[i][e]);
if(m[i][j]==1) {
if(v<2 || v>3)
tmp.m[i][j]=0;
else
tmp.m[i][j]=1;
}
else {
if(v==3)
tmp.m[i][j]=1;
else
tmp.m[i][j]=0;
}
}
}
(*this)=tmp;
}