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

template<class ArrayT>
void Impala::Core::Array::Pattern::PxArrayPreStateTrans ( ArrayT *  a,
int  goState,
int  force 
) [inline]

Definition at line 54 of file PxStateTrans.h.

References ArrayBD(), ArrayBH(), ArrayBW(), ArrayCD(), ArrayCH(), ArrayCW(), ArrayH(), ArrayW(), Impala::Core::Array::DYING, FuncSet(), Impala::Core::Array::NOT_REDUCED, Impala::Core::Array::PAR_FULL, Impala::Core::Array::PAR_PART, prnt, PX_COUT, PX_ENDL, PX_SBT, PxAbortSystem(), PxArrayCreatePD(), PxArrayDeletePD(), PxArrayPD(), PxBcastArray(), PxGatherArray(), PxInitDistribution(), PxLclDepth(), PxLclHeight(), PxLclWidth(), PxMyCPU(), PxRootCPU(), PxScatterArray(), PxXCPUs(), PxYCPUs(), PxZCPUs(), Impala::Core::Array::SEQ_CREAT, Impala::Core::Array::SEQ_FULL, Impala::Core::Array::SEQ_PART, Impala::Core::Array::SEQ_VALID, STRONG, and WEAK.

Referenced by PatBinaryPixOp(), PatGenConv2d(), PatGenConv2dK1d(), PatGenConv2dSep(), PatGeometricOp(), PatM12PixOp(), PatM21PixOp(), PatM22PixOp(), PatM3PixOp(), PatM6PixOp(), PatM9N4PixOp(), PatM9PixOp(), PatMPixOp(), PatNgbOp2d(), PatNgbOp2dExtra(), PatNgbOp2dExtra2(), PatRecGenConv2dSep(), PatReduceOp(), PatRgbOp(), PatSet(), PatUnaryPixOp(), and PxArrayForceNonDistributed().

00055 {
00056     int aState = a->mState;
00057 
00058     /*** Initialize data distribution ***/
00059 
00060     PxInitDistribution(ArrayCW(a), ArrayCH(a), ArrayCD(a),
00061                        PxXCPUs(), PxYCPUs(), PxZCPUs());
00062 
00063     /*** Do nothing, if nothing to do ***/
00064 
00065     if ((goState==SEQ_VALID && force==WEAK &&
00066                             (aState==SEQ_PART || aState==SEQ_FULL)) ||
00067         (goState==SEQ_VALID && force==STRONG &&
00068                             (aState==SEQ_CREAT || aState==SEQ_VALID)) ||
00069         (goState==PAR_PART && (aState==SEQ_PART || aState==PAR_PART)) ||
00070         (goState==PAR_FULL && (aState==SEQ_FULL || aState==PAR_FULL))) {
00071         if (prnt) PX_COUT << "PASS: state = " << aState << PX_ENDL;
00072         return;
00073     } else if (aState==DYING || aState==NOT_REDUCED) {
00074         PX_COUT << "ERROR: state = DYING or NOT_REDUCED" << PX_ENDL;
00075         PxAbortSystem();
00076         return;
00077     }
00078 
00079     /*** Initial step in two-phase state transition (if needed) ***/
00080 
00081     if (aState==PAR_FULL && (goState==SEQ_VALID || goState==PAR_PART)) {
00082         if (prnt) PX_COUT << "LOCAL-2-GLOBAL COPY" << PX_ENDL;
00083         FuncSet(a, PxArrayPD(a), 0,0, ArrayW(a),ArrayH(a), 0,0);
00084         a->mState = SEQ_FULL;
00085         aState = SEQ_FULL;
00086 
00087     } else if (aState==PAR_PART &&
00088                             (goState==SEQ_VALID || goState==PAR_FULL)) {
00089         if (prnt) PX_COUT << "GATHER" << PX_ENDL;
00090         PxGatherArray(a, PxArrayPD(a), PxRootCPU(), PX_SBT, false);
00091         a->mState = SEQ_PART;
00092         aState = SEQ_PART;
00093     }
00094 
00095     if (goState==SEQ_VALID && force==WEAK) {
00096         return;
00097     }
00098 
00099     /*** Remove current partial array, if it exists ***/
00100 
00101     if (PxArrayPD(a) != 0) {
00102         if (prnt) PX_COUT << "DELETE LOCAL" << PX_ENDL;
00103         PxArrayDeletePD(a);
00104         if (goState==SEQ_VALID) {
00105             a->mState = SEQ_VALID;
00106             return;
00107         }
00108     }
00109 
00110     /*** CreatePart and Scatter array data ***/
00111 
00112     if (goState==PAR_PART &&
00113         (aState==SEQ_CREAT || aState==SEQ_VALID || aState==SEQ_FULL))  {
00114         if (prnt) PX_COUT << "CREATE LOCAL (PARTIAL)" << PX_ENDL;
00115         PxArrayCreatePD(a, PxLclWidth(PxMyCPU()),
00116                         PxLclHeight(PxMyCPU()), PxLclDepth(PxMyCPU()),
00117                         ArrayBW(a), ArrayBH(a), ArrayBD(a));
00118         if (force==STRONG && (aState==SEQ_VALID || aState==SEQ_FULL)) {
00119             if (prnt) PX_COUT << "SCATTER" << PX_ENDL;
00120             PxScatterArray(a, PxArrayPD(a), PxRootCPU(), PX_SBT, false);
00121         }
00122         a->mState = SEQ_PART;
00123         return;
00124 
00125     /*** CreateFull and Broadcast array data ***/
00126 
00127     } else if (goState==PAR_FULL &&
00128         (aState==SEQ_CREAT || aState==SEQ_VALID || aState==SEQ_PART)) {
00129         if (prnt) PX_COUT << "CREATE LOCAL (FULL)" << PX_ENDL;
00130         PxArrayCreatePD(a, ArrayCW(a), ArrayCH(a), ArrayCD(a),
00131                         ArrayBW(a), ArrayBH(a), ArrayBD(a));
00132         if (PxMyCPU() == PxRootCPU()) {
00133             if (prnt) PX_COUT << "GLOBAL-2-LOCAL COPY" << PX_ENDL;
00134             FuncSet(PxArrayPD(a),
00135                     a, 0, 0, ArrayW(a), ArrayH(a), 0, 0);
00136         }
00137         if (force==STRONG && (aState==SEQ_VALID || aState==SEQ_PART)) {
00138             if (prnt) PX_COUT << "BROADCAST" << PX_ENDL;
00139             PxBcastArray(PxArrayPD(a), PxRootCPU(), PX_SBT, false);
00140         }
00141         a->mState = SEQ_FULL;
00142         return;
00143     }
00144 }

Here is the call graph for this function:


Generated on Fri Mar 19 11:03:04 2010 for ImpalaSrc by  doxygen 1.5.1