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

template<class DstArrayT, class SrcArrayT, class KerArrayT, class PixOpT, class RedOpT>
void Impala::Core::Array::Pattern::PatGenConv2dK1d ( DstArrayT *&  dst,
SrcArrayT *  src,
int  dimension,
KerArrayT *  ker,
PixOpT &  pixOp,
RedOpT &  redOp,
int  vType = 0,
Util::TimePlot *  plotter = 0 
) [inline]

Definition at line 27 of file PatGenConv2dK1d.h.

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

Referenced by Impala::Core::Array::ConvKernel1d().

00030 {
00031     vType = 0; // only 1 implemented
00032 
00033     int numX = (dimension == 1) ? ArrayCW(ker) / 2 : 0;
00034     int numY = (dimension == 1) ? 0 : ArrayCW(ker) / 2;
00035     SrcArrayT* checkedSrc = CheckBorderSize(src, numX, numY);
00036 
00037     if ((dst == 0) || (dst == checkedSrc))
00038         dst = ArrayClone<DstArrayT>(checkedSrc);
00039 
00040 #ifdef PX_HORUS_USED
00041     if (!PxRunParallel()) {                         // run sequential
00042 #endif
00043         if (plotter)
00044             plotter->SplitTime();
00045         PatSetBorder(checkedSrc, numX, numY);
00046         if (plotter)
00047             plotter->SplitTime();
00048         if (dimension == 1)
00049             FuncGenConv2dSepDispatch_H(dst, checkedSrc,
00050                                        ker, pixOp, redOp, vType);
00051         else
00052             FuncGenConv2dSepDispatch_V(dst, checkedSrc,
00053                                        ker, pixOp, redOp, vType);
00054 
00055 #ifdef PX_HORUS_USED
00056     } else {                                        // run parallel
00057         PxArrayPreStateTrans(checkedSrc, PAR_PART, STRONG);
00058         PxArrayPreStateTrans(dst, PAR_PART, WEAK);
00059         PatSetBorder(PxArrayPD(checkedSrc), numX, numY);
00060         if (dimension == 1) {
00061             FuncGenConv2dSepDispatch_H(PxArrayPD(dst),
00062                     PxArrayPD(checkedSrc), ker, pixOp, redOp, vType);
00063         } else {
00064             FuncGenConv2dSepDispatch_V(PxArrayPD(dst),
00065                     PxArrayPD(checkedSrc), ker, pixOp, redOp, vType);
00066         }
00067         if (PxArrayPD(checkedSrc) != PxArrayPD(src))
00068             PxArrayDeletePD(checkedSrc);
00069         PxArrayPostStateTrans(dst);
00070 
00071         if (!PxRunLazyParallel()) {
00072             PxArrayForceNonDistributed(src);
00073             PxArrayForceNonDistributed(dst);
00074         }
00075     }
00076 #endif
00077 
00078     if (checkedSrc != src)
00079         delete checkedSrc;
00080 }

Here is the call graph for this function:


Generated on Fri Mar 19 11:01:51 2010 for ImpalaSrc by  doxygen 1.5.1