template<class ArrayT>
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:
|