твоямамка Т твоямамка Регистрация 21 Апр 2013 Сообщения 81 Репутация 0 Спасибо 0 Монет 0 26 Дек 2016 #1 В общем, прога, это игра "жизнь"Мне нужно разделить поле на две полосы и обменяться границами, но я слабо знаком с 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); }
В общем, прога, это игра "жизнь"Мне нужно разделить поле на две полосы и обменяться границами, но я слабо знаком с 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); }