mirror of
https://github.com/opencv/opencv.git
synced 2025-06-11 03:33:28 +08:00
added Warp::reduce function
This commit is contained in:
parent
36e42084f0
commit
50f28c9e25
@ -97,6 +97,25 @@ namespace cv { namespace gpu { namespace device
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class T, class BinOp>
|
||||||
|
static __device__ __forceinline__ T reduce(volatile T *ptr, BinOp op)
|
||||||
|
{
|
||||||
|
const unsigned int lane = laneId();
|
||||||
|
|
||||||
|
if (lane < 16)
|
||||||
|
{
|
||||||
|
T partial = ptr[lane];
|
||||||
|
|
||||||
|
ptr[lane] = partial = op(partial, ptr[lane + 16]);
|
||||||
|
ptr[lane] = partial = op(partial, ptr[lane + 8]);
|
||||||
|
ptr[lane] = partial = op(partial, ptr[lane + 4]);
|
||||||
|
ptr[lane] = partial = op(partial, ptr[lane + 2]);
|
||||||
|
ptr[lane] = partial = op(partial, ptr[lane + 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *ptr;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename OutIt, typename T>
|
template<typename OutIt, typename T>
|
||||||
static __device__ __forceinline__ void yota(OutIt beg, OutIt end, T value)
|
static __device__ __forceinline__ void yota(OutIt beg, OutIt end, T value)
|
||||||
{
|
{
|
||||||
@ -109,4 +128,4 @@ namespace cv { namespace gpu { namespace device
|
|||||||
};
|
};
|
||||||
}}} // namespace cv { namespace gpu { namespace device
|
}}} // namespace cv { namespace gpu { namespace device
|
||||||
|
|
||||||
#endif /* __OPENCV_GPU_DEVICE_WARP_HPP__ */
|
#endif /* __OPENCV_GPU_DEVICE_WARP_HPP__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user