Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

template<class ArrayT>
static void Impala::Core::Array::Pattern::PxBcastArrayOFT ( ArrayT *  a,
int  root,
bool  bdata 
) [inline, static]

Definition at line 1093 of file PxDistribution.h.

References _myCPU, _nrCPUs, ArrayCD(), ArrayCH(), ArrayCPB(), ArrayCW(), ArrayD(), ArrayH(), ArrayPB(), ArrayW(), and BCAST_TAG.

Referenced by PxBcastArray().

01094 {
01095     /*** Broadcast array data using One-level Flat Tree ***/
01096 
01097     int sSize = ArrayT::ElemSize()*sizeof(typename ArrayT::StorType);
01098     MPI_Datatype elem, blk2d, blk3d;
01099     MPI_Status stat;
01100     MPI_Type_contiguous(sSize, MPI_BYTE, &elem);
01101     MPI_Type_commit(&elem);
01102 
01103     if (!bdata) {
01104         MPI_Type_vector(ArrayCH(a),
01105                         ArrayCW(a), ArrayW(a), elem, &blk2d);
01106         MPI_Type_hvector(ArrayCD(a), 1,
01107                         ArrayW(a)*ArrayH(a)*sSize, blk2d, &blk3d);
01108         MPI_Type_commit(&blk3d);
01109     }
01110     if (_myCPU == root) {       // send array data to all other CPUs
01111         for (int partner=0; partner<_nrCPUs; partner++) {
01112             if (partner != _myCPU) {
01113                 if (!bdata) {
01114                     MPI_Send(ArrayCPB(a), 1,
01115                              blk3d, partner, BCAST_TAG, MPI_COMM_WORLD);
01116                 } else {
01117                     MPI_Send(ArrayPB(a),
01118                              ArrayW(a)*ArrayH(a)*ArrayD(a),
01119                              elem, partner, BCAST_TAG, MPI_COMM_WORLD);
01120                 }
01121             }
01122         }
01123     } else {                    // receive array data from root
01124         if (!bdata) {
01125             MPI_Recv(ArrayCPB(a), 1, blk3d, root,
01126                      BCAST_TAG, MPI_COMM_WORLD, &stat);
01127         } else {
01128             MPI_Recv(ArrayPB(a), ArrayW(a)*ArrayH(a)*ArrayD(a),
01129                      elem, root, BCAST_TAG, MPI_COMM_WORLD, &stat);
01130         }
01131     }
01132     if (!bdata) {
01133         MPI_Type_free(&blk3d);
01134         MPI_Type_free(&blk2d);
01135     }
01136     MPI_Type_free(&elem);
01137 }

Here is the call graph for this function:


Generated on Fri Mar 19 11:02:47 2010 for ImpalaSrc by  doxygen 1.5.1