Doxygen documentation: cuda

This commit is contained in:
Maksim Shabunin
2014-11-20 16:42:06 +03:00
parent 472c210687
commit ceb6e8bd94
80 changed files with 2917 additions and 398 deletions

View File

@@ -109,4 +109,11 @@
#include "cudev/expr/unary_op.hpp"
#include "cudev/expr/warping.hpp"
/**
@addtogroup cuda
@{
@defgroup cudev Device layer
@}
*/
#endif

View File

@@ -50,6 +50,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
struct Block
{
__device__ __forceinline__ static uint blockId()
@@ -122,6 +125,9 @@ __device__ __forceinline__ static void blockTransfrom(InIt1 beg1, InIt1 end1, In
for(; t1 < end1; t1 += STRIDE, t2 += STRIDE, o += STRIDE)
*o = op(*t1, *t2);
}
//! @}
}}
#endif

View File

@@ -50,6 +50,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class T> struct DynamicSharedMem
{
__device__ __forceinline__ operator T*()
@@ -81,6 +84,8 @@ template <> struct DynamicSharedMem<double>
}
};
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// blockReduce
template <int N, typename T, class Op>
@@ -123,6 +126,8 @@ __device__ __forceinline__ void blockReduceKeyVal(const tuple<KP0, KP1, KP2, KP3
>(skeys, key, svals, val, tid, cmp);
}
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <int THREADS_NUM, typename T>
__device__ T blockScanInclusive(T data, volatile T* smem, uint tid)
{
@@ -96,6 +99,8 @@ __device__ __forceinline__ T blockScanExclusive(T data, volatile T* smem, uint t
return blockScanInclusive<THREADS_NUM>(data, smem, tid) - data;
}
//! @}
}}
#endif

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// NormL1
template <typename T> struct NormL1
@@ -179,6 +182,8 @@ struct NormHamming
}
};
//! @}
}}
#endif

View File

@@ -52,6 +52,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
using namespace cv::cuda;
// CV_CUDEV_ARCH
@@ -84,6 +87,8 @@ __host__ __device__ __forceinline__ int divUp(int total, int grain)
#define CV_PI_F ((float)CV_PI)
#define CV_LOG2_F ((float)CV_LOG2)
//! @}
}}
#endif

View File

@@ -55,6 +55,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
#define CV_CUDEV_EXPR_BINARY_FUNC(name) \
template <class SrcPtr1, class SrcPtr2> \
__host__ Expr<BinaryTransformPtrSz<typename PtrTraits<SrcPtr1>::ptr_type, typename PtrTraits<SrcPtr2>::ptr_type, name ## _func<typename LargerType<typename PtrTraits<SrcPtr1>::value_type, typename PtrTraits<SrcPtr2>::value_type>::type> > > \
@@ -70,6 +73,8 @@ CV_CUDEV_EXPR_BINARY_FUNC(absdiff)
#undef CV_CUDEV_EXPR_BINARY_FUNC
//! @}
}}
#endif

View File

@@ -58,6 +58,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// Binary Operations
#define CV_CUDEV_EXPR_BINOP_INST(op, functor) \
@@ -230,6 +233,8 @@ CV_CUDEV_EXPR_BINOP_INST(>>, bit_rshift)
#undef CV_CUDEV_EXPR_BINOP_INST
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
#define CV_CUDEV_EXPR_CVTCOLOR_INST(name) \
template <class SrcPtr> \
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<SrcPtr>::ptr_type, name ## _func<typename VecTraits<typename PtrTraits<SrcPtr>::value_type>::elem_type> > > \
@@ -277,6 +280,8 @@ CV_CUDEV_EXPR_CVTCOLOR_INST(Luv4_to_LBGRA)
#undef CV_CUDEV_EXPR_CVTCOLOR_INST
//! @}
}}
#endif

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// derivX
template <class SrcPtr>
@@ -116,6 +119,8 @@ laplacian_(const SrcPtr& src)
return makeExpr(laplacianPtr<ksize>(src));
}
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Body> struct Expr
{
Body body;
@@ -87,6 +90,8 @@ template <class Body> struct PtrTraits< Expr<Body> >
}
};
//! @}
}}
#endif

View File

@@ -56,6 +56,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// min/max
template <class SrcPtr1, class SrcPtr2>
@@ -127,6 +130,8 @@ lut_(const SrcPtr& src, const TablePtr& tbl)
return makeExpr(lutPtr(src, tbl));
}
//! @}
}}
#endif

View File

@@ -56,6 +56,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// sum
template <class SrcPtr> struct SumExprBody
@@ -254,6 +257,8 @@ integral_(const SrcPtr& src)
return makeExpr(body);
}
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
#define CV_CUDEV_EXPR_UNARY_FUNC(name) \
template <class SrcPtr> \
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<SrcPtr>::ptr_type, name ## _func<typename PtrTraits<SrcPtr>::value_type> > > \
@@ -93,6 +96,8 @@ pow_(const SrcPtr& src, float power)
return makeExpr(transformPtr(src, bind2nd(pow_func<typename PtrTraits<SrcPtr>::value_type>(), power)));
}
//! @}
}}
#endif

View File

@@ -57,6 +57,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
#define CV_CUDEV_EXPR_UNOP_INST(op, functor) \
template <typename T> \
__host__ Expr<UnaryTransformPtrSz<typename PtrTraits<GpuMat_<T> >::ptr_type, functor<T> > > \
@@ -89,6 +92,8 @@ CV_CUDEV_EXPR_UNOP_INST(~, bit_not)
#undef CV_CUDEV_EXPR_UNOP_INST
//! @}
}}
#endif

View File

@@ -57,6 +57,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// resize
template <class SrcPtr>
@@ -166,6 +169,8 @@ transpose_(const SrcPtr& src)
return makeExpr(body);
}
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// Various 3/4-channel to 3/4-channel RGB transformations
#define CV_CUDEV_RGB2RGB_INST(name, scn, dcn, bidx) \
@@ -469,6 +472,8 @@ CV_CUDEV_RGB5x52GRAY_INST(BGR565_to_GRAY, 6)
#undef CV_CUDEV_RGB5x52GRAY_INST
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// Function Objects
template <typename _Arg, typename _Result> struct unary_function
@@ -873,6 +876,8 @@ template <typename F> struct IsBinaryFunction
enum { value = (sizeof(check(makeF())) == sizeof(Yes)) };
};
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Op, int n> struct UnaryTupleAdapter
{
typedef typename Op::result_type result_type;
@@ -93,6 +96,8 @@ __host__ __device__ BinaryTupleAdapter<Op, n0, n1> binaryTupleAdapter(const Op&
return a;
}
//! @}
}}
#endif

View File

@@ -57,6 +57,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Policy, class SrcPtr, typename DstType, class MaskPtr>
__host__ void gridCopy_(const SrcPtr& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
{
@@ -447,6 +450,8 @@ __host__ void gridCopy_(const SrcPtrTuple& src, const tuple< GlobPtrSz<D0>, Glob
gridCopy_<DefaultCopyPolicy>(src, dst, stream);
}
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <int BIN_COUNT, class Policy, class SrcPtr, typename ResType, class MaskPtr>
__host__ void gridHistogram_(const SrcPtr& src, GpuMat_<ResType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
{
@@ -114,6 +117,8 @@ __host__ void gridHistogram(const SrcPtr& src, GpuMat_<ResType>& dst, Stream& st
gridHistogram_<BIN_COUNT, DefaultHistogramPolicy>(src, dst, stream);
}
//! @}
}}
#endif

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class SrcPtr, typename DstType>
__host__ void gridIntegral(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
{
@@ -64,6 +67,8 @@ __host__ void gridIntegral(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& str
integral_detail::integral(shrinkPtr(src), shrinkPtr(dst), rows, cols, StreamAccessor::getStream(stream));
}
//! @}
}}
#endif

View File

@@ -55,6 +55,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Brd, class SrcPtr, typename DstType>
__host__ void gridPyrDown_(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
{
@@ -83,6 +86,8 @@ __host__ void gridPyrUp(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream
pyramids_detail::pyrUp(shrinkPtr(src), shrinkPtr(dst), rows, cols, dst.rows, dst.cols, StreamAccessor::getStream(stream));
}
//! @}
}}
#endif

View File

@@ -57,6 +57,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Policy, class SrcPtr, typename ResType, class MaskPtr>
__host__ void gridCalcSum_(const SrcPtr& src, GpuMat_<ResType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
{
@@ -370,6 +373,8 @@ __host__ void gridCountNonZero(const SrcPtr& src, GpuMat_<ResType>& dst, Stream&
gridCountNonZero_<DefaultGlobReducePolicy>(src, dst, stream);
}
//! @}
}}
#endif

View File

@@ -59,6 +59,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <typename T> struct Sum : plus<T>
{
typedef T work_type;
@@ -225,6 +228,8 @@ __host__ void gridReduceToColumn(const SrcPtr& src, GpuMat_<ResType>& dst, Strea
gridReduceToColumn_<Reductor, DefaultReduceToVecPolicy>(src, dst, stream);
}
//! @}
}}
#endif

View File

@@ -57,6 +57,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Policy, class SrcPtrTuple, typename DstType, class MaskPtr>
__host__ void gridMerge_(const SrcPtrTuple& src, GpuMat_<DstType>& dst, const MaskPtr& mask, Stream& stream = Stream::Null())
{
@@ -579,6 +582,8 @@ __host__ void gridSplit(const SrcPtr& src, GlobPtrSz<DstType> (&dst)[COUNT], Str
gridSplit_<DefaultSplitMergePolicy>(src, dst, stream);
}
//! @}
}}
#endif

View File

@@ -57,6 +57,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Policy, class SrcPtr, typename DstType, class UnOp, class MaskPtr>
__host__ void gridTransformUnary_(const SrcPtr& src, GpuMat_<DstType>& dst, const UnOp& op, const MaskPtr& mask, Stream& stream = Stream::Null())
{
@@ -536,6 +539,8 @@ __host__ void gridTransformTuple(const SrcPtr& src, const tuple< GlobPtrSz<D0>,
gridTransformTuple_<DefaultTransformPolicy>(src, dst, op, stream);
}
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Policy, class SrcPtr, typename DstType>
__host__ void gridTranspose_(const SrcPtr& src, GpuMat_<DstType>& dst, Stream& stream = Stream::Null())
{
@@ -98,6 +101,8 @@ __host__ void gridTranspose(const SrcPtr& src, const GlobPtrSz<DstType>& dst, St
gridTranspose_<DefaultTransposePolicy>(src, dst, stream);
}
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <typename T> struct ConstantPtr
{
typedef T value_type;
@@ -88,6 +91,8 @@ template <typename T> struct PtrTraits< ConstantPtrSz<T> > : PtrTraitsBase< Cons
{
};
//! @}
}}
#endif

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// derivX
template <class SrcPtr> struct DerivXPtr
@@ -388,6 +391,8 @@ template <int ksize, class SrcPtr> struct PtrTraits< LaplacianPtrSz<ksize, SrcPt
{
};
//! @}
}}
#endif

View File

@@ -52,6 +52,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// BrdConstant
template <class SrcPtr> struct BrdConstant
@@ -214,6 +217,8 @@ __host__ BrdBase<BrdWrap, typename PtrTraits<SrcPtr>::ptr_type> brdWrap(const Sr
return b;
}
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <typename T> struct GlobPtr
{
typedef T value_type;
@@ -106,6 +109,8 @@ template <typename T> struct PtrTraits< GlobPtrSz<T> > : PtrTraitsBase<GlobPtrSz
{
};
//! @}
}}
#endif

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <typename T>
class GpuMat_ : public GpuMat
{
@@ -154,6 +157,8 @@ template <typename T> struct PtrTraits< GpuMat_<T> > : PtrTraitsBase<GpuMat_<T>,
{
};
//! @}
}}
#include "detail/gpumat.hpp"

View File

@@ -55,6 +55,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// Nearest
template <class SrcPtr> struct NearestInterPtr
@@ -380,6 +383,8 @@ template <class SrcPtr> struct PtrTraits< CommonAreaInterPtrSz<SrcPtr> > : PtrTr
{
};
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class SrcPtr, class TablePtr> struct LutPtr
{
typedef typename PtrTraits<TablePtr>::value_type value_type;
@@ -95,6 +98,8 @@ template <class SrcPtr, class TablePtr> struct PtrTraits< LutPtrSz<SrcPtr, Table
{
};
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
struct WithOutMask
{
typedef bool value_type;
@@ -98,6 +101,8 @@ template <class MaskPtr> struct PtrTraits< SingleMaskChannelsSz<MaskPtr> > : Ptr
{
};
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class SrcPtr, class MapPtr> struct RemapPtr1
{
typedef typename PtrTraits<SrcPtr>::value_type value_type;
@@ -149,6 +152,8 @@ template <class SrcPtr, class MapXPtr, class MapYPtr> struct PtrTraits< RemapPtr
{
};
//! @}
}}
#endif

View File

@@ -54,6 +54,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class SrcPtr> struct ResizePtr
{
typedef typename PtrTraits<SrcPtr>::value_type value_type;
@@ -98,6 +101,8 @@ template <class SrcPtr> struct PtrTraits< ResizePtrSz<SrcPtr> > : PtrTraitsBase<
{
};
//! @}
}}
#endif

View File

@@ -92,6 +92,9 @@ namespace
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
#if CUDART_VERSION >= 5050
template <typename T> struct TexturePtr
@@ -248,6 +251,8 @@ template <typename T> struct PtrTraits< Texture<T> > : PtrTraitsBase<Texture<T>,
#endif
//! @}
}}
#endif

View File

@@ -50,6 +50,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class Ptr2DSz, class Ptr2D> struct PtrTraitsBase
{
typedef Ptr2DSz ptr_sz_type;
@@ -96,6 +99,8 @@ __host__ int getCols(const Ptr2DSz& ptr)
return PtrTraits<Ptr2DSz>::getCols(ptr);
}
//! @}
}}
#endif

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// UnaryTransformPtr
template <class SrcPtr, class Op> struct UnaryTransformPtr
@@ -146,6 +149,8 @@ template <class Src1Ptr, class Src2Ptr, class Op> struct PtrTraits< BinaryTransf
{
};
//! @}
}}
#endif

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// affine
struct AffineMapPtr
@@ -147,6 +150,8 @@ warpPerspectivePtr(const SrcPtr& src, Size dstSize, const GpuMat_<float>& warpMa
return remapPtr(src, perspectiveMap(dstSize, warpMat));
}
//! @}
}}
#endif

View File

@@ -52,6 +52,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class PtrTuple> struct ZipPtr;
template <class Ptr0, class Ptr1> struct ZipPtr< tuple<Ptr0, Ptr1> > : tuple<Ptr0, Ptr1>
@@ -168,6 +171,8 @@ template <class PtrTuple> struct PtrTraits< ZipPtrSz<PtrTuple> > : PtrTraitsBase
{
};
//! @}
}}
#endif

View File

@@ -50,6 +50,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// atomicAdd
__device__ __forceinline__ int atomicAdd(int* address, int val)
@@ -192,6 +195,8 @@ __device__ static double atomicMax(double* address, double val)
#endif
}
//! @}
}}
#endif

View File

@@ -52,6 +52,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <class T> struct numeric_limits;
template <> struct numeric_limits<bool>
@@ -119,6 +122,8 @@ template <> struct numeric_limits<double>
static const bool is_signed = true;
};
//! @}
}}
#endif

View File

@@ -50,6 +50,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <typename T> __device__ __forceinline__ T saturate_cast(uchar v) { return T(v); }
template <typename T> __device__ __forceinline__ T saturate_cast(schar v) { return T(v); }
template <typename T> __device__ __forceinline__ T saturate_cast(ushort v) { return T(v); }
@@ -267,6 +270,8 @@ template <> __device__ __forceinline__ uint saturate_cast<uint>(double v)
#endif
}
//! @}
}}
#endif

View File

@@ -128,6 +128,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// 2
__device__ __forceinline__ uint vadd2(uint a, uint b)
@@ -908,6 +911,8 @@ __device__ __forceinline__ uint vmin4(uint a, uint b)
return r;
}
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
using tuple_detail::tuple;
using tuple_detail::tuple_size;
using tuple_detail::get;
@@ -75,6 +78,8 @@ template <class Tuple, template <typename T> class CvtOp> struct ConvertTuple
typedef typename tuple_detail::ConvertTuple<Tuple, tuple_size<Tuple>::value, CvtOp>::type type;
};
//! @}
}}
#endif

View File

@@ -52,6 +52,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// NullType
struct NullType {};
@@ -164,6 +167,8 @@ template <typename A, typename B> struct LargerType
>::type type;
};
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// saturate_cast
namespace vec_math_detail
@@ -931,6 +934,8 @@ CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC(atan2, ::atan2, double, double, double)
#undef CV_CUDEV_IMPLEMENT_SCALAR_BINARY_FUNC
//! @}
}}
#endif

View File

@@ -50,6 +50,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// MakeVec
template<typename T, int CN> struct MakeVec;
@@ -177,6 +180,8 @@ template<> struct VecTraits<char4>
__host__ __device__ __forceinline__ static char4 make(const schar* v) {return make_char4(v[0], v[1], v[2], v[3]);}
};
//! @}
}}
// DataType

View File

@@ -53,6 +53,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
// warpReduce
template <typename T, class Op>
@@ -201,6 +204,8 @@ smem_tuple(T0* t0, T1* t1, T2* t2, T3* t3, T4* t4, T5* t5, T6* t6, T7* t7, T8* t
return make_tuple((volatile T0*) t0, (volatile T1*) t1, (volatile T2*) t2, (volatile T3*) t3, (volatile T4*) t4, (volatile T5*) t5, (volatile T6*) t6, (volatile T7*) t7, (volatile T8*) t8, (volatile T9*) t9);
}
//! @}
}}
#endif

View File

@@ -52,6 +52,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
template <typename T>
__device__ T warpScanInclusive(T data, volatile T* smem, uint tid)
{
@@ -94,6 +97,8 @@ __device__ __forceinline__ T warpScanExclusive(T data, volatile T* smem, uint ti
return warpScanInclusive(data, smem, tid) - data;
}
//! @}
}}
#endif

View File

@@ -51,6 +51,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
#if CV_CUDEV_ARCH >= 300
// shfl
@@ -419,6 +422,8 @@ CV_CUDEV_SHFL_XOR_VEC_INST(double)
#endif // CV_CUDEV_ARCH >= 300
//! @}
}}
#endif

View File

@@ -50,6 +50,9 @@
namespace cv { namespace cudev {
//! @addtogroup cudev
//! @{
enum
{
LOG_WARP_SIZE = 5,
@@ -117,6 +120,8 @@ __device__ __forceinline__ void warpYota(OutIt beg, OutIt end, T value)
*t = value;
}
//! @}
}}
#endif