43 #ifndef OPENCV_CUDA_VEC_DISTANCE_DETAIL_HPP
44 #define OPENCV_CUDA_VEC_DISTANCE_DETAIL_HPP
46 #include "../datamov_utils.hpp"
50 namespace cv {
namespace cuda {
namespace device
52 namespace vec_distance_detail
54 template <
int THREAD_DIM,
int N>
struct UnrollVecDiffCached
56 template <
typename Dist,
typename T1,
typename T2>
57 static __device__
void calcCheck(
const T1* vecCached,
const T2* vecGlob,
int len, Dist& dist,
int ind)
61 T1 val1 = *vecCached++;
64 ForceGlob<T2>::Load(vecGlob, ind, val2);
66 dist.reduceIter(val1, val2);
68 UnrollVecDiffCached<THREAD_DIM, N - 1>::calcCheck(vecCached, vecGlob, len, dist, ind + THREAD_DIM);
72 template <
typename Dist,
typename T1,
typename T2>
73 static __device__
void calcWithoutCheck(
const T1* vecCached,
const T2* vecGlob, Dist& dist)
75 T1 val1 = *vecCached++;
78 ForceGlob<T2>::Load(vecGlob, 0, val2);
79 vecGlob += THREAD_DIM;
81 dist.reduceIter(val1, val2);
83 UnrollVecDiffCached<THREAD_DIM, N - 1>::calcWithoutCheck(vecCached, vecGlob, dist);
86 template <
int THREAD_DIM>
struct UnrollVecDiffCached<THREAD_DIM, 0>
88 template <
typename Dist,
typename T1,
typename T2>
89 static __device__ __forceinline__
void calcCheck(
const T1*,
const T2*,
int, Dist&,
int)
93 template <
typename Dist,
typename T1,
typename T2>
94 static __device__ __forceinline__
void calcWithoutCheck(
const T1*,
const T2*, Dist&)
99 template <
int THREAD_DIM,
int MAX_LEN,
bool LEN_EQ_MAX_LEN>
struct VecDiffCachedCalculator;
100 template <
int THREAD_DIM,
int MAX_LEN>
struct VecDiffCachedCalculator<THREAD_DIM, MAX_LEN, false>
102 template <
typename Dist,
typename T1,
typename T2>
103 static __device__ __forceinline__
void calc(
const T1* vecCached,
const T2* vecGlob,
int len, Dist& dist,
int tid)
105 UnrollVecDiffCached<THREAD_DIM, MAX_LEN / THREAD_DIM>::calcCheck(vecCached, vecGlob, len, dist, tid);
108 template <
int THREAD_DIM,
int MAX_LEN>
struct VecDiffCachedCalculator<THREAD_DIM, MAX_LEN, true>
110 template <
typename Dist,
typename T1,
typename T2>
111 static __device__ __forceinline__
void calc(
const T1* vecCached,
const T2* vecGlob,
int len, Dist& dist,
int tid)
113 UnrollVecDiffCached<THREAD_DIM, MAX_LEN / THREAD_DIM>::calcWithoutCheck(vecCached, vecGlob + tid, dist);
"black box" representation of the file storage associated with a file on disk.
Definition: calib3d.hpp:441