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:
aruco.hpp:75