Difference for src/ComputePme.C from version 1.108 to 1.109

version 1.108version 1.109
Line 56
Line 56
  
   int sourceNode;   int sourceNode;
   int sequence;   int sequence;
    int hasData;
   Lattice lattice;   Lattice lattice;
   PmeReduction *evir;   PmeReduction *evir;
   int start;   int start;
Line 71
Line 72
  
   int sourceNode;   int sourceNode;
   int sequence;   int sequence;
    int hasData;
   Lattice lattice;   Lattice lattice;
   int x_start;   int x_start;
   int nx;   int nx;
Line 82
Line 84
 public: public:
  
   int sourceNode;   int sourceNode;
    int has_evir;
   PmeReduction *evir;   PmeReduction *evir;
   int y_start;   int y_start;
   int ny;   int ny;
Line 1644
Line 1647
  myMgr->recipPeDest,myMgr->gridPeMap);  myMgr->recipPeDest,myMgr->gridPeMap);
 #endif #endif
   }   }
  
    if ( myMgr->ungrid_count == 0 ) {
      myMgr->pmeProxyDir[CkMyPe()].ungridCalc();
    }
  
 } }
  
  
Line 1669
Line 1677
   const char *pencilActive = myMgr->pencilActive;   const char *pencilActive = myMgr->pencilActive;
  
   strayChargeErrors = 0;   strayChargeErrors = 0;
    // int savedMessages = 0;
  
   for (int ib=0; ib<xBlocks; ++ib) {   for (int ib=0; ib<xBlocks; ++ib) {
    for (int jb=0; jb<yBlocks; ++jb) {    for (int jb=0; jb<yBlocks; ++jb) {
Line 1714
Line 1723
       if ( fz_arr[i] ) ++zlistlen;       if ( fz_arr[i] ) ++zlistlen;
     }     }
  
     PmeGridMsg *msg = new (fcount*zlistlen, zlistlen, flen,     int hd = ( fcount? 1 : 0 );  // has data?
  numGrids, PRIORITY_SIZE) PmeGridMsg;     // if ( ! hd ) ++savedMessages;
  
      PmeGridMsg *msg = new (hd*fcount*zlistlen, hd*zlistlen, hd*flen,
   hd*numGrids, PRIORITY_SIZE) PmeGridMsg;
     msg->sourceNode = CkMyPe();     msg->sourceNode = CkMyPe();
      msg->hasData = hd;
     msg->lattice = lattice;     msg->lattice = lattice;
     if ( hd ) {
 #if 0 #if 0
     msg->start = fstart;     msg->start = fstart;
     msg->len = flen;     msg->len = flen;
Line 1747
Line 1761
        }        }
       }       }
     }     }
     } else { // no data no reply
       myMgr->ungrid_count--;
     }
  
     msg->sequence = sequence();     msg->sequence = sequence();
     SET_PRIORITY(msg,sequence(),PME_GRID_PRIORITY)     SET_PRIORITY(msg,sequence(),PME_GRID_PRIORITY)
Line 1754
Line 1771
    }    }
   }   }
  
    // if ( savedMessages ) {
    //   CkPrintf("Pe %d eliminated %d PME messages\n",CkMyPe(),savedMessages);
    // }
  
   for (int i=0; i<fsize; ++i) {   for (int i=0; i<fsize; ++i) {
     if ( q_arr[i] ) {     if ( q_arr[i] ) {
       memset( (void*) (q_arr[i]), -1, myGrid.dim3 * sizeof(double) );       memset( (void*) (q_arr[i]), -1, myGrid.dim3 * sizeof(double) );
Line 2262
Line 2283
     data = 0;     data = 0;
     work = 0;     work = 0;
     send_order = 0;     send_order = 0;
      needs_reply = 0;
   }   }
   ~PmePencil() {   ~PmePencil() {
     delete [] data;     delete [] data;
     delete [] work;     delete [] work;
     delete [] send_order;     delete [] send_order;
      delete [] needs_reply;
   }   }
   void base_init(PmePencilInitMsg *msg) {   void base_init(PmePencilInitMsg *msg) {
     initdata = msg->data;     initdata = msg->data;
Line 2276
Line 2299
     for ( int i=0; i<nBlocks; ++i ) send_order[i] = i;     for ( int i=0; i<nBlocks; ++i ) send_order[i] = i;
     Random rand(CkMyPe());     Random rand(CkMyPe());
     rand.reorder(send_order,nBlocks);     rand.reorder(send_order,nBlocks);
      needs_reply = new int[nBlocks];
   }   }
   PmePencilInitMsgData initdata;   PmePencilInitMsgData initdata;
   Lattice lattice;   Lattice lattice;
   PmeReduction evir;   PmeReduction evir;
   int sequence;  // used for priorities   int sequence;  // used for priorities
   int imsg;  // used in sdag code   int imsg;  // used in sdag code
    int hasData;  // used in message elimination
   float *data;   float *data;
   float *work;   float *work;
   int *send_order;   int *send_order;
    int *needs_reply;
 }; };
  
 class PmeZPencil : public PmePencil<CBase_PmeZPencil> { class PmeZPencil : public PmePencil<CBase_PmeZPencil> {
Line 2477
Line 2503
     memset(data, 0, sizeof(float) * nx*ny*dim3);     memset(data, 0, sizeof(float) * nx*ny*dim3);
   }   }
  
    if ( ! msg->hasData ) return;
  
   int zlistlen = msg->zlistlen;   int zlistlen = msg->zlistlen;
   int *zlist = msg->zlist;   int *zlist = msg->zlist;
   char *fmsg = msg->fgrid;   char *fmsg = msg->fgrid;
Line 2537
Line 2565
     int kb = send_order[isend];     int kb = send_order[isend];
     int nz = block3;     int nz = block3;
     if ( (kb+1)*block3 > dim3/2 ) nz = dim3/2 - kb*block3;     if ( (kb+1)*block3 > dim3/2 ) nz = dim3/2 - kb*block3;
     PmeTransMsg *msg = new (nx*ny*nz*2,PRIORITY_SIZE) PmeTransMsg;     int hd = ( hasData ? 1 : 0 );
      PmeTransMsg *msg = new (hd*nx*ny*nz*2,PRIORITY_SIZE) PmeTransMsg;
     msg->lattice = lattice;     msg->lattice = lattice;
     msg->sourceNode = thisIndex.y;     msg->sourceNode = thisIndex.y;
      msg->hasData = hasData;
     msg->nx = ny;     msg->nx = ny;
     if ( hasData ) {
     float *md = msg->qgrid;     float *md = msg->qgrid;
     const float *d = data;     const float *d = data;
     for ( int i=0; i<nx; ++i ) {     for ( int i=0; i<nx; ++i ) {
Line 2551
Line 2582
       }       }
      }      }
     }     }
     }
     msg->sequence = sequence;     msg->sequence = sequence;
     SET_PRIORITY(msg,sequence,PME_TRANS_PRIORITY)     SET_PRIORITY(msg,sequence,PME_TRANS_PRIORITY)
     initdata.yPencil(thisIndex.x,0,kb).recvTrans(msg);     initdata.yPencil(thisIndex.x,0,kb).recvTrans(msg);
Line 2566
Line 2598
   int K2 = initdata.grid.K2;   int K2 = initdata.grid.K2;
   int jb = msg->sourceNode;   int jb = msg->sourceNode;
   int ny = msg->nx;   int ny = msg->nx;
   if ( msg->hasData ) {
   const float *md = msg->qgrid;   const float *md = msg->qgrid;
   float *d = data;   float *d = data;
   for ( int i=0; i<nx; ++i, d += K2*nz*2 ) {   for ( int i=0; i<nx; ++i, d += K2*nz*2 ) {
Line 2580
Line 2613
     }     }
    }    }
   }   }
   } else {
    float *d = data;
    for ( int i=0; i<nx; ++i, d += K2*nz*2 ) {
     for ( int j=jb*block2; j<(jb*block2+ny); ++j ) {
      for ( int k=0; k<nz; ++k ) {
        d[2*(j*nz+k)] = 0;
        d[2*(j*nz+k)+1] = 0;
      }
     }
    }
   }
 } }
  
 void PmeYPencil::forward_fft() { void PmeYPencil::forward_fft() {
Line 2600
Line 2644
     int jb = send_order[isend];     int jb = send_order[isend];
     int ny = block2;     int ny = block2;
     if ( (jb+1)*block2 > K2 ) ny = K2 - jb*block2;     if ( (jb+1)*block2 > K2 ) ny = K2 - jb*block2;
     PmeTransMsg *msg = new (nx*ny*nz*2,PRIORITY_SIZE) PmeTransMsg;     int hd = ( hasData ? 1 : 0 );
      PmeTransMsg *msg = new (hd*nx*ny*nz*2,PRIORITY_SIZE) PmeTransMsg;
     msg->lattice = lattice;     msg->lattice = lattice;
     msg->sourceNode = thisIndex.x;     msg->sourceNode = thisIndex.x;
      msg->hasData = hasData;
     msg->nx = nx;     msg->nx = nx;
     if ( hasData ) {
     float *md = msg->qgrid;     float *md = msg->qgrid;
     const float *d = data;     const float *d = data;
     for ( int i=0; i<nx; ++i, d += K2*nz*2 ) {     for ( int i=0; i<nx; ++i, d += K2*nz*2 ) {
Line 2620
Line 2667
     }     }
     if ( md != msg->qgrid + nx*ny*nz*2 ) CkPrintf("error in YX at %d %d %d\n",     if ( md != msg->qgrid + nx*ny*nz*2 ) CkPrintf("error in YX at %d %d %d\n",
  thisIndex.x, jb, thisIndex.z);  thisIndex.x, jb, thisIndex.z);
     }
     msg->sequence = sequence;     msg->sequence = sequence;
     SET_PRIORITY(msg,sequence,PME_TRANS2_PRIORITY)     SET_PRIORITY(msg,sequence,PME_TRANS2_PRIORITY)
     initdata.xPencil(0,jb,thisIndex.z).recvTrans(msg);     initdata.xPencil(0,jb,thisIndex.z).recvTrans(msg);
Line 2635
Line 2683
   int K1 = initdata.grid.K1;   int K1 = initdata.grid.K1;
   int ib = msg->sourceNode;   int ib = msg->sourceNode;
   int nx = msg->nx;   int nx = msg->nx;
   if ( msg->hasData ) {
   const float *md = msg->qgrid;   const float *md = msg->qgrid;
   for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {   for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
    float *d = data + i*ny*nz*2;    float *d = data + i*ny*nz*2;
Line 2649
Line 2698
     }     }
    }    }
   }   }
   } else {
    for ( int i=ib*block1; i<(ib*block1+nx); ++i ) {
     float *d = data + i*ny*nz*2;
     for ( int j=0; j<ny; ++j, d += nz*2 ) {
      for ( int k=0; k<nz; ++k ) {
        d[2*k] = 0;
        d[2*k+1] = 0;
      }
     }
    }
   }
 } }
  
 void PmeXPencil::forward_fft() { void PmeXPencil::forward_fft() {
Line 2687
Line 2747
   int xBlocks = initdata.xBlocks;   int xBlocks = initdata.xBlocks;
   int block1 = initdata.grid.block1;   int block1 = initdata.grid.block1;
   int K1 = initdata.grid.K1;   int K1 = initdata.grid.K1;
    int send_evir = 1;
   for ( int isend=0; isend<xBlocks; ++isend ) {   for ( int isend=0; isend<xBlocks; ++isend ) {
     int ib = send_order[isend];     int ib = send_order[isend];
      if ( ! needs_reply[ib] ) continue;
     int nx = block1;     int nx = block1;
     if ( (ib+1)*block1 > K1 ) nx = K1 - ib*block1;     if ( (ib+1)*block1 > K1 ) nx = K1 - ib*block1;
     PmeUntransMsg *msg = new (nx*ny*nz*2,(ib==0?1:0),PRIORITY_SIZE) PmeUntransMsg;     PmeUntransMsg *msg = new (nx*ny*nz*2,send_evir,PRIORITY_SIZE) PmeUntransMsg;
     if ( ib == 0 ) msg->evir[0] = evir;     if ( send_evir ) {
        msg->evir[0] = evir;
        msg->has_evir = 1;
        send_evir = 0;
      } else {
        msg->has_evir = 0;
      }
     msg->sourceNode = thisIndex.y;     msg->sourceNode = thisIndex.y;
     msg->ny = ny;     msg->ny = ny;
     float *md = msg->qgrid;     float *md = msg->qgrid;
Line 2712
Line 2780
  
 void PmeYPencil::recv_untrans(const PmeUntransMsg *msg) { void PmeYPencil::recv_untrans(const PmeUntransMsg *msg) {
   if ( imsg == 0 ) evir = 0.;   if ( imsg == 0 ) evir = 0.;
   if ( thisIndex.x == 0 ) evir += msg->evir[0];   if ( msg->has_evir ) evir += msg->evir[0];
   int block2 = initdata.grid.block2;   int block2 = initdata.grid.block2;
   int K2 = initdata.grid.K2;   int K2 = initdata.grid.K2;
   int jb = msg->sourceNode;   int jb = msg->sourceNode;
Line 2754
Line 2822
   int yBlocks = initdata.yBlocks;   int yBlocks = initdata.yBlocks;
   int block2 = initdata.grid.block2;   int block2 = initdata.grid.block2;
   int K2 = initdata.grid.K2;   int K2 = initdata.grid.K2;
    int send_evir = 1;
   for ( int isend=0; isend<yBlocks; ++isend ) {   for ( int isend=0; isend<yBlocks; ++isend ) {
     int jb = send_order[isend];     int jb = send_order[isend];
      if ( ! needs_reply[jb] ) continue;
     int ny = block2;     int ny = block2;
     if ( (jb+1)*block2 > K2 ) ny = K2 - jb*block2;     if ( (jb+1)*block2 > K2 ) ny = K2 - jb*block2;
     PmeUntransMsg *msg = new (nx*ny*nz*2,(jb==0?1:0),PRIORITY_SIZE) PmeUntransMsg;     PmeUntransMsg *msg = new (nx*ny*nz*2,send_evir,PRIORITY_SIZE) PmeUntransMsg;
     if ( jb == 0 ) msg->evir[0] = evir;     if ( send_evir ) {
        msg->evir[0] = evir;
        msg->has_evir = 1;
        send_evir = 0;
      } else {
        msg->has_evir = 0;
      }
     msg->sourceNode = thisIndex.z;     msg->sourceNode = thisIndex.z;
     msg->ny = nz;     msg->ny = nz;
     float *md = msg->qgrid;     float *md = msg->qgrid;
Line 2779
Line 2855
  
 void PmeZPencil::recv_untrans(const PmeUntransMsg *msg) { void PmeZPencil::recv_untrans(const PmeUntransMsg *msg) {
   if ( imsg == 0 ) evir = 0.;   if ( imsg == 0 ) evir = 0.;
   if ( thisIndex.y == 0 ) evir += msg->evir[0];   if ( msg->has_evir ) evir += msg->evir[0];
   int block3 = initdata.grid.block3;   int block3 = initdata.grid.block3;
   int dim3 = initdata.grid.dim3;   int dim3 = initdata.grid.dim3;
   int kb = msg->sourceNode;   int kb = msg->sourceNode;
Line 2843
Line 2919
 } }
  
 void PmeZPencil::send_ungrid(PmeGridMsg *msg) { void PmeZPencil::send_ungrid(PmeGridMsg *msg) {
   if ( imsg == 0 ) msg->evir[0] = evir; else msg->evir[0] = 0.; 
  
   int pe = msg->sourceNode;   int pe = msg->sourceNode;
   msg->sourceNode = thisIndex.x * initdata.yBlocks + thisIndex.y;   msg->sourceNode = thisIndex.x * initdata.yBlocks + thisIndex.y;
   int dim3 = initdata.grid.dim3;   int dim3 = initdata.grid.dim3;


Legend:
Removed in v.1.108 
changed lines
 Added in v.1.109



Made by using version 1.53 of cvs2html