template<class ArrayT>
Definition at line 71 of file PxDistribution.h. References _myCPU, ArrayBD(), ArrayBH(), ArrayBW(), ArrayCD(), ArrayCH(), ArrayCPB(), ArrayCW(), ArrayD(), ArrayH(), ArrayPB(), ArrayW(), depth, PxLclStart(), and TO. Referenced by PxGatherArrayOFT(), PxGatherArraySBT(), PxScatterArrayOFT(), and PxScatterArraySBT(). 00072 { 00073 /*** Copy local array (loc) TO/FROM 'head' of block array (blk) ***/ 00074 00075 typedef typename ArrayT::StorType storT; 00076 storT* lPtr = (bdata) ? ArrayPB(loc) : ArrayCPB(loc); 00077 storT* bPtr = (bdata) ? ArrayPB(blk) : ArrayCPB(blk); 00078 int eSize = ArrayT::ElemSize(); 00079 00080 if (_myCPU == root) { 00081 bPtr = ArrayPB(blk) + eSize*(PxLclStart(_myCPU, 00082 ArrayBW(blk), ArrayBH(blk), ArrayBD(blk))); 00083 if (bdata) { 00084 bPtr -= (ArrayW(blk)*ArrayH(blk)*ArrayBD(blk) + 00085 ArrayW(blk)*ArrayBH(blk) + ArrayBW(blk)) * eSize; 00086 } 00087 } 00088 00089 int width = (bdata) ? ArrayW(loc) : ArrayCW(loc); 00090 int height = (bdata) ? ArrayH(loc) : ArrayCH(loc); 00091 int depth = (bdata) ? ArrayD(loc) : ArrayCD(loc); 00092 00093 for (int z=0; z<depth; z++) { 00094 for (int y=0; y<height; y++) { 00095 storT* locPtr = lPtr + (ArrayW(loc)*ArrayH(loc)*z + 00096 ArrayW(loc)*y) * eSize; 00097 storT* blkPtr = bPtr + (ArrayW(blk)*ArrayH(blk)*z + 00098 ArrayW(blk)*y) * eSize; 00099 for (int x=0; x<width*eSize; x++) { 00100 (dir == TO) ? (*blkPtr++ = *locPtr++) : 00101 (*locPtr++ = *blkPtr++); 00102 } 00103 } 00104 } 00105 }
Here is the call graph for this function:
|