Вопрос Нужна помощь с распараллеливанием программы.

Регистрация
21 Апр 2013
Сообщения
80
Репутация
0
Спасибо
0
Монет
0
В общем, прога, это игра "жизнь"Мне нужно разделить поле на две полосы и обменяться границами, но я слабо знаком с mpi фнукциями. Я вот знаю сенд/рецив и редьюс надо использовать... Но как я фиг его знает.

#include
#include
#include
#include
#include
#include

int main( int argc, char *argv[ ] ){
int pos=0,rank, size,k,m,j,i;
int n=1000, S=0, live=0, p=0;
int r,l,u,d;
MPI_Status stat;
MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &size );

//массив б
int** b=new int*[n];
for(i=0;i<=n-1;i++)
{
b=new int [n];
}
for(i=0; i<=n-1; i++)
for(j=0; j<=n-1; j++)
b[j]=0;

//массив а
int** a=new int*[n];
for(i=0;i<=n-1;i++)
{
a=new int [n];
}
srand(time(NULL));
for(i=0; i<=n-1; i++)
for(j=0; j<=n-1; j++)
a[j]=rand()% 2;

for(p=0;p<10000;p++)
{
//rules
for(i=0; i<=n-1; i++)
for(j=0; j<=n-1; j++)
{
live=0;

// управление
if(j==n-1) r=0;
else r=j+1;
if(j==0) l=n-1;
else l=j-1;
if(i==n-1) u=0;
else u=i+1;
if(i==0) d=n-1;
else d=i-1;

//проверка
if(a[l]==1) live++;
if(a[j]==1) live++;
if(a[r]==1) live++;

if(a[l]==1) live++;
if(a[r]==1) live++;

if(a[d][l]==1) live++;
if(a[d][j]==1) live++;
if(a[d][r]==1) live++;

if(a[j]==1 && (live<2 || live>3)) b[j]=0;
if(a[j]==1 && (live==2 || live==3)) b[j]=1;
if(a[j]==0 && live==3) b[j]=1;
S+=live;

}

for(i=0; i<=n-1; i++)
for(j=0; j<=n-1; j++)
a[j]=b[j];
}
printf(" p=%d n=%d the number of living cells of all generations=%d",p,n,S);

MPI_Finalize();
return(0);
}
 
Назад
Сверху