Игра жизни Конвея: оптимизация openMP

Я пытаюсь оптимизировать свой 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;
}

0 ответов

Другие вопросы по тегам