Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <mpi.h>
- #include <math.h>
- #include <time.h>
- #define ROOT 0
- #define MSG_TAG 100
- int S=1000;
- int K=20;
- int N=1000;
- int i,w,x,j;
- int main(int argc,char **argv)
- {
- int size,tid;
- double start,stop, wyp,wys,pol;
- MPI_Init(&argc, &argv);
- start = MPI_Wtime();
- int matrix [N][N] ;
- char processor_name[MPI_MAX_PROCESSOR_NAME];
- int name_len;
- MPI_Get_processor_name(processor_name, &name_len);
- MPI_Comm_size( MPI_COMM_WORLD, &size );
- MPI_Comm_rank( MPI_COMM_WORLD, &tid );
- int res;
- int reallycount=0;
- if ( tid == 0 ) {
- MPI_Status status;
- int p,r;
- // srand(time(0));
- //int d = rand();
- // printf("RAND: %d", d);
- int i,j;
- // wypelnianie macierzy glownej
- int matrix [N][N] ;
- for (i=0;i<N;i++){
- for(j=0;j<N;j++){
- matrix[i][j]=2*i+j;
- }
- }
- wyp = MPI_Wtime();
- printf("wypelniono %f\n", wyp-start);
- //zliczanie ile bedzie podmacierzy
- int podmacierze=0;
- for (i=0;i<N;i++){
- for(j=0;j<N;j++){
- if (i+K<=N & j+K<=N){
- podmacierze++;
- }
- }
- }
- printf("PODMACIERZE: %d\n", podmacierze);
- pol = MPI_Wtime();
- printf("policzono %f\n", pol-start);
- for(x=1;x<size;x++){
- int ww=N*N;
- MPI_Send( &matrix, ww, MPI_INT,x, MSG_TAG, MPI_COMM_WORLD );
- }
- int podmacierze1=0;
- for (i=tid;i<N;i=i+size){
- for(j=0;j<N;j++){
- if (i+K<=N & j+K<=N){
- int suma=0;
- for (w=0;w<K;w++){
- for (x=0;x<K;x++){
- suma=suma+ matrix[i+w][i+x];
- }}
- if(suma==S){
- printf("ZNALEZIONO, SUMA: %d\n",suma);
- }
- podmacierze1++;
- }
- }
- }
- // printf("PODMACIERZE: %d\n", podmacierze1);
- //PODZIAL PODMACIERZY NA PROCESY, WYSLANIE DO KAZDEGO PROCESU INFO, ILE DOSTANIE PODMACIERZY DO SPRAWDZENIA
- int x;
- for(x=1;x<size;x++){
- int forsend = (podmacierze/(size-x));
- podmacierze=podmacierze-forsend;
- // MPI_Send( &forsend, 1, MPI_INT, size-x, MSG_TAG, MPI_COMM_WORLD );
- }
- wys = MPI_Wtime();
- printf("wyslano %f\n", wys-start);
- // printf("wyslalem %d podmacierzy\n", reallycount);
- }
- else {
- MPI_Status status2;
- int matrixs [N][N] ;
- int ile = N*N;
- printf("ILE: %d\n", ile);
- MPI_Recv( &matrixs, ile, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status2);
- //printf("to : %d\n", matrixs[122][324]);
- int podmacierze=0;
- for (i=tid;i<N;i=i+size){
- for(j=0;j<N;j++){
- int suma=0;
- if (i+K<=N & j+K<=N){
- for (w=0;w<K;w++){
- for (x=0;x<K;x++){
- suma=suma+ matrixs[i+w][i+x];
- }}
- if(suma==S){
- printf("ZNALEZIONO, SUMA: %d\n",suma);
- }
- //printf("sumka: %d", suma);
- }
- }
- }
- /* int forme=0;
- MPI_Status status3;
- MPI_Recv( &forme, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status3);
- printf("PC: %s , jestem proces numer %d, dla mnie jest %d podmacierzy\n",processor_name, tid, forme);
- int cos;
- MPI_Status status2;
- int l,k;
- int z;
- int numberIteration=0;
- int countRec=0;
- int g;
- for(g=0;g<forme;g++){
- int sum=0;
- int matrixs [K][K] ;
- int wieviel = K*K;
- MPI_Recv( &matrixs, wieviel, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status2);
- for (l=0;l<K;l++){
- for(k=0;k<K;k++){
- int wait = matrixs[k][l];
- //MPI_Recv( &wait, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status2);
- sum+=wait;
- }
- } // printf("PC: %s, proces: %d, suma : %d\n",processor_name,tid,sum);
- if(sum==S){printf("ZNALEZIONO : %d\n", sum);
- }
- numberIteration++;
- // printf("proces: %d, numer iteracji : %d\n",tid,numberIteration);
- }*/
- }
- stop = MPI_Wtime();
- printf("koniec %f\n", stop-start);
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement