template<class DstArrayT, class SrcArrayT, class ExtraArrayT, class NgbT>
Definition at line 25 of file PatNgbOp2dExtra.h. References Impala::Core::Array::CheckBorderSize(), FuncNgbOp2dExtraDispatch(), Impala::Core::Array::PAR_PART, PatSetBorder(), PxArrayDeletePD(), PxArrayForceNonDistributed(), PxArrayPD(), PxArrayPostStateTrans(), PxArrayPreStateTrans(), PxRunLazyParallel(), PxRunParallel(), STRONG, and WEAK. Referenced by Impala::Samples::Talk::DoTalkNgb2dExtra(). 00026 { 00027 int numX = ngb.Width() / 2; 00028 int numY = ngb.Height() / 2; 00029 SrcArrayT* checkedSrc = CheckBorderSize(src, numX, numY); 00030 ExtraArrayT* checkedXtr = CheckBorderSize(xtr, numX, numY); 00031 00032 if ((dst == 0) || (dst == (DstArrayT*) checkedSrc)) 00033 dst = ArrayClone<DstArrayT>(checkedSrc); 00034 00035 #ifdef PX_HORUS_USED 00036 if (!PxRunParallel()) { // run sequential 00037 #endif 00038 PatSetBorder(checkedSrc, numX, numY); 00039 PatSetBorder(checkedXtr, numX, numY); 00040 FuncNgbOp2dExtraDispatch(dst, checkedSrc, checkedXtr, ngb); 00041 00042 #ifdef PX_HORUS_USED 00043 } else { // run parallel 00044 PxArrayPreStateTrans(checkedSrc, PAR_PART, STRONG); 00045 PxArrayPreStateTrans(checkedXtr, PAR_PART, STRONG); 00046 PxArrayPreStateTrans(dst, PAR_PART, WEAK); 00047 PatSetBorder(PxArrayPD(checkedSrc), numX, numY); 00048 PatSetBorder(PxArrayPD(checkedXtr), numX, numY); 00049 FuncNgbOp2dExtraDispatch(PxArrayPD(dst), 00050 PxArrayPD(checkedSrc), PxArrayPD(checkedXtr), ngb); 00051 if (PxArrayPD(checkedSrc) != PxArrayPD(src)) 00052 PxArrayDeletePD(checkedSrc); 00053 if (PxArrayPD(checkedXtr) != PxArrayPD(xtr)) 00054 PxArrayDeletePD(checkedXtr); 00055 PxArrayPostStateTrans(dst); 00056 00057 if (!PxRunLazyParallel()) { 00058 PxArrayForceNonDistributed(src); 00059 PxArrayForceNonDistributed(xtr); 00060 PxArrayForceNonDistributed(dst); 00061 } 00062 } 00063 #endif 00064 00065 if (checkedSrc != src) 00066 delete checkedSrc; 00067 if (checkedXtr != xtr) 00068 delete checkedXtr; 00069 }
Here is the call graph for this function:
|