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

template<class DstArrayT, class SrcArrayT, class ExtraArrayT, class Extra2ArrayT, class NgbT>
void Impala::Core::Array::Pattern::PatNgbOp2dExtra2 ( DstArrayT *&  dst,
SrcArrayT *  src,
ExtraArrayT *  xtr,
Extra2ArrayT *  xt2,
NgbT &  ngb 
) [inline]

Definition at line 26 of file PatNgbOp2dExtra2.h.

References Impala::Core::Array::CheckBorderSize(), FuncNgbOp2dExtra2Dispatch(), Impala::Core::Array::PAR_PART, PatSetBorder(), PxArrayDeletePD(), PxArrayForceNonDistributed(), PxArrayPD(), PxArrayPostStateTrans(), PxArrayPreStateTrans(), PxRunLazyParallel(), PxRunParallel(), STRONG, and WEAK.

Referenced by Impala::Samples::Talk::DoTalkNgb2dExtra2().

00028 {
00029     int numX = ngb.Width() / 2;
00030     int numY = ngb.Height() / 2;
00031     SrcArrayT* checkedSrc = CheckBorderSize(src, numX, numY);
00032     ExtraArrayT* checkedXtr = CheckBorderSize(xtr, numX, numY);
00033     Extra2ArrayT* checkedXt2 = CheckBorderSize(xt2, numX, numY);
00034 
00035     if ((dst == 0) || (dst == (DstArrayT*) checkedSrc))
00036         dst = ArrayClone<DstArrayT>(checkedSrc);
00037 
00038 #ifdef PX_HORUS_USED
00039     if (!PxRunParallel()) {                         // run sequential
00040 #endif
00041         PatSetBorder(checkedSrc, numX, numY);
00042         PatSetBorder(checkedXtr, numX, numY);
00043         PatSetBorder(checkedXt2, numX, numY);
00044         FuncNgbOp2dExtra2Dispatch(dst, checkedSrc,
00045                                   checkedXtr, checkedXt2, ngb);
00046 
00047 #ifdef PX_HORUS_USED
00048     } else {                                        // run parallel
00049         PxArrayPreStateTrans(checkedSrc, PAR_PART, STRONG);
00050         PxArrayPreStateTrans(checkedXtr, PAR_PART, STRONG);
00051         PxArrayPreStateTrans(checkedXt2, PAR_PART, STRONG);
00052         PxArrayPreStateTrans(dst, PAR_PART, WEAK);
00053         PatSetBorder(PxArrayPD(checkedSrc), numX, numY);
00054         PatSetBorder(PxArrayPD(checkedXtr), numX, numY);
00055         PatSetBorder(PxArrayPD(checkedXt2), numX, numY);
00056         FuncNgbOp2dExtra2Dispatch(PxArrayPD(dst),
00057                         PxArrayPD(checkedSrc), PxArrayPD(checkedXtr),
00058                         PxArrayPD(checkedxt2), ngb);
00059         if (PxArrayPD(checkedSrc) != PxArrayPD(src))
00060             PxArrayDeletePD(checkedSrc);
00061         if (PxArrayPD(checkedXtr) != PxArrayPD(xtr))
00062             PxArrayDeletePD(checkedXtr);
00063         if (PxArrayPD(checkedXt2) != PxArrayPD(xt2))
00064             PxArrayDeletePD(checkedXt2);
00065         PxArrayPostStateTrans(dst);
00066 
00067         if (!PxRunLazyParallel()) {
00068             PxArrayForceNonDistributed(src);
00069             PxArrayForceNonDistributed(xtr);
00070             PxArrayForceNonDistributed(xt2);
00071             PxArrayForceNonDistributed(dst);
00072         }
00073     }
00074 #endif
00075 
00076     if (checkedSrc != src)
00077         delete checkedSrc;
00078     if (checkedXtr != xtr)
00079         delete checkedXtr;
00080     if (checkedXt2 != xt2)
00081         delete checkedXt2;
00082 }

Here is the call graph for this function:


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