From 4bddc68ec809bc3410f122240bf8d1bb45034594 Mon Sep 17 00:00:00 2001 From: Luca Tornatore <gattoclochard@gmail.com> Date: Fri, 4 Mar 2022 15:40:53 +0100 Subject: [PATCH] just maquillage --- gridding.c | 112 +++++++++++++++++++++++++---------------------------- 1 file changed, 53 insertions(+), 59 deletions(-) diff --git a/gridding.c b/gridding.c index f4769f9..f59bc44 100644 --- a/gridding.c +++ b/gridding.c @@ -130,31 +130,23 @@ void gridding_data(){ double resolution_asec = (3600.0*180.0)/MAX(abs(metaData.uvmin),abs(metaData.uvmax))/PI; printf("RESOLUTION = %f rad, %f arcsec\n", resolution, resolution_asec); - // Declare temporary arrays for the masking - double * uus; - double * vvs; - double * wws; - float * visreals; - float * visimgs; - float * weightss; - long isector; - for (long isector_count=0; isector_count<nsectors; isector_count++) + for (long isector = 0; isector < nsectors; isector++) { clock_gettime(CLOCK_MONOTONIC, &begink); startk = clock(); // define local destination sector - //isector = (isector_count+rank)%size; - isector = isector_count; + //isector = (isector_count+rank)%size; // this line must be wrong! [LT] + // allocate sector arrays - long Nsec = histo_send[isector]; - uus = (double*) malloc(Nsec*sizeof(double)); - vvs = (double*) malloc(Nsec*sizeof(double)); - wws = (double*) malloc(Nsec*sizeof(double)); - long Nweightss = Nsec*metaData.polarisations; - long Nvissec = Nweightss*metaData.freq_per_chan; - weightss = (float*) malloc(Nweightss*sizeof(float)); - visreals = (float*) malloc(Nvissec*sizeof(float)); - visimgs = (float*) malloc(Nvissec*sizeof(float)); + long Nsec = histo_send[isector]; + double *uus = (double*) malloc(Nsec*sizeof(double)); + double *vvs = (double*) malloc(Nsec*sizeof(double)); + double *wws = (double*) malloc(Nsec*sizeof(double)); + long Nweightss = Nsec*metaData.polarisations; + long Nvissec = Nweightss*metaData.freq_per_chan; + float *weightss = (float*) malloc(Nweightss*sizeof(float)); + float *visreals = (float*) malloc(Nvissec*sizeof(float)); + float *visimgs = (float*) malloc(Nvissec*sizeof(float)); // select data for this sector long icount = 0; @@ -173,17 +165,17 @@ void gridding_data(){ vvs[icount] = data.vv[ilocal]-isector*shift; wws[icount] = data.ww[ilocal]; for (long ipol=0; ipol<metaData.polarisations; ipol++) - { - weightss[ip] = data.weights[ilocal*metaData.polarisations+ipol]; - ip++; - } + { + weightss[ip] = data.weights[ilocal*metaData.polarisations+ipol]; + ip++; + } for (long ifreq=0; ifreq<metaData.polarisations*metaData.freq_per_chan; ifreq++) - { - visreals[inu] = data.visreal[ilocal*metaData.polarisations*metaData.freq_per_chan+ifreq]; - visimgs[inu] = data.visimg[ilocal*metaData.polarisations*metaData.freq_per_chan+ifreq]; + { + visreals[inu] = data.visreal[ilocal*metaData.polarisations*metaData.freq_per_chan+ifreq]; + visimgs[inu] = data.visimg[ilocal*metaData.polarisations*metaData.freq_per_chan+ifreq]; //if(visimgs[inu]>1e10 || visimgs[inu]<-1e10)printf("%f %f %ld %ld %d %ld %ld\n",visreals[inu],visimgs[inu],inu,Nvissec,rank,ilocal*metaData.polarisations*metaData.freq_per_chan+ifreq,metaData.Nvis); inu++; - } + } icount++; current = current->next; } @@ -195,22 +187,22 @@ void gridding_data(){ timing.compose_time1 += (finishk.tv_sec - begink.tv_sec); timing.compose_time1 += (finishk.tv_nsec - begink.tv_nsec) / 1000000000.0; - #ifndef USE_MPI - double vvmin = 1e20; - double uumax = -1e20; - double vvmax = -1e20; - - for (long ipart=0; ipart<Nsec; ipart++) - { - uumin = MIN(uumin,uus[ipart]); - uumax = MAX(uumax,uus[ipart]); - vvmin = MIN(vvmin,vvs[ipart]); - vvmax = MAX(vvmax,vvs[ipart]); - - if(ipart%10 == 0)fprintf (file.pFile, "%ld %f %f %f\n",isector,uus[ipart],vvs[ipart]+isector*shift,wws[ipart]); - } - - printf("UU, VV, min, max = %f %f %f %f\n", uumin, uumax, vvmin, vvmax); + #ifndef USE_MPI + double vvmin = 1e20; + double uumax = -1e20; + double vvmax = -1e20; + + for (long ipart=0; ipart<Nsec; ipart++) + { + uumin = MIN(uumin,uus[ipart]); + uumax = MAX(uumax,uus[ipart]); + vvmin = MIN(vvmin,vvs[ipart]); + vvmax = MAX(vvmax,vvs[ipart]); + + if(ipart%10 == 0)fprintf (file.pFile, "%ld %f %f %f\n",isector,uus[ipart],vvs[ipart]+isector*shift,wws[ipart]); + } + + printf("UU, VV, min, max = %f %f %f %f\n", uumin, uumax, vvmin, vvmax); #endif // Make convolution on the grid @@ -261,25 +253,27 @@ void gridding_data(){ //for (long iii=0; iii<2*xaxis*yaxis*num_w_planes; iii++)printf("--> %f\n",gridss[iii]); #ifndef USE_MPI - long stride = isector*2*xaxis*yaxis*num_w_planes; - for (long iii=0; iii<2*xaxis*yaxis*num_w_planes; iii++)gridtot[stride+iii] = gridss[iii]; + long stride = isector*2*xaxis*yaxis*num_w_planes; + for (long iii=0; iii<2*xaxis*yaxis*num_w_planes; iii++) + gridtot[stride+iii] = gridss[iii]; #endif // Write grid in the corresponding remote slab - #ifdef USE_MPI - int target_rank = (int)isector; - //int target_rank = (int)(size-isector-1); - #ifdef ONE_SIDE - printf("One Side communication active\n"); - MPI_Win_lock(MPI_LOCK_SHARED,target_rank,0,slabwin); - MPI_Accumulate(gridss,size_of_grid,MPI_DOUBLE,target_rank,0,size_of_grid,MPI_DOUBLE,MPI_SUM,slabwin); - MPI_Win_unlock(target_rank,slabwin); - //MPI_Put(gridss,size_of_grid,MPI_DOUBLE,target_rank,0,size_of_grid,MPI_DOUBLE,slabwin); - #else - MPI_Reduce(gridss,grid,size_of_grid,MPI_DOUBLE,MPI_SUM,target_rank,MPI_COMM_WORLD); - #endif //ONE_SIDE - #endif //USE_MPI + #ifdef USE_MPI + // int target_rank = (int)isector; it implied that size >= nsectors + int target_rank = (int)(isector % size); + #ifdef ONE_SIDE + printf("One Side communication active\n"); + MPI_Win_lock(MPI_LOCK_SHARED,target_rank,0,slabwin); + MPI_Accumulate(gridss,size_of_grid,MPI_DOUBLE,target_rank,0,size_of_grid,MPI_DOUBLE,MPI_SUM,slabwin); + MPI_Win_unlock(target_rank,slabwin); + //MPI_Put(gridss,size_of_grid,MPI_DOUBLE,target_rank,0,size_of_grid,MPI_DOUBLE,slabwin); + #else + MPI_Reduce(gridss,grid,size_of_grid,MPI_DOUBLE,MPI_SUM,target_rank,MPI_COMM_WORLD); + #endif //ONE_SIDE + #endif //USE_MPI + clock_gettime(CLOCK_MONOTONIC, &finishk); endk = clock(); timing.reduce_time += ((double) (endk - startk)) / CLOCKS_PER_SEC; -- GitLab