EstervQrCode 2.0.0
Library for qr code manipulation
Loading...
Searching...
No Matches
warp_shuffle.hpp
1/*M///////////////////////////////////////////////////////////////////////////////////////
2//
3// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4//
5// By downloading, copying, installing or using the software you agree to this license.
6// If you do not agree to this license, do not download, install,
7// copy or use the software.
8//
9//
10// License Agreement
11// For Open Source Computer Vision Library
12//
13// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15// Third party copyrights are property of their respective owners.
16//
17// Redistribution and use in source and binary forms, with or without modification,
18// are permitted provided that the following conditions are met:
19//
20// * Redistribution's of source code must retain the above copyright notice,
21// this list of conditions and the following disclaimer.
22//
23// * Redistribution's in binary form must reproduce the above copyright notice,
24// this list of conditions and the following disclaimer in the documentation
25// and/or other materials provided with the distribution.
26//
27// * The name of the copyright holders may not be used to endorse or promote products
28// derived from this software without specific prior written permission.
29//
30// This software is provided by the copyright holders and contributors "as is" and
31// any express or implied warranties, including, but not limited to, the implied
32// warranties of merchantability and fitness for a particular purpose are disclaimed.
33// In no event shall the Intel Corporation or contributors be liable for any direct,
34// indirect, incidental, special, exemplary, or consequential damages
35// (including, but not limited to, procurement of substitute goods or services;
36// loss of use, data, or profits; or business interruption) however caused
37// and on any theory of liability, whether in contract, strict liability,
38// or tort (including negligence or otherwise) arising in any way out of
39// the use of this software, even if advised of the possibility of such damage.
40//
41//M*/
42
43#ifndef OPENCV_CUDA_WARP_SHUFFLE_HPP
44#define OPENCV_CUDA_WARP_SHUFFLE_HPP
45
51
52namespace cv { namespace cuda { namespace device
53{
54#if __CUDACC_VER_MAJOR__ >= 9
55# define __shfl(x, y, z) __shfl_sync(0xFFFFFFFFU, x, y, z)
56# define __shfl_up(x, y, z) __shfl_up_sync(0xFFFFFFFFU, x, y, z)
57# define __shfl_down(x, y, z) __shfl_down_sync(0xFFFFFFFFU, x, y, z)
58#endif
59 template <typename T>
60 __device__ __forceinline__ T shfl(T val, int srcLane, int width = warpSize)
61 {
62 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
63 return __shfl(val, srcLane, width);
64 #else
65 return T();
66 #endif
67 }
68 __device__ __forceinline__ unsigned int shfl(unsigned int val, int srcLane, int width = warpSize)
69 {
70 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
71 return (unsigned int) __shfl((int) val, srcLane, width);
72 #else
73 return 0;
74 #endif
75 }
76 __device__ __forceinline__ double shfl(double val, int srcLane, int width = warpSize)
77 {
78 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
79 int lo = __double2loint(val);
80 int hi = __double2hiint(val);
81
82 lo = __shfl(lo, srcLane, width);
83 hi = __shfl(hi, srcLane, width);
84
85 return __hiloint2double(hi, lo);
86 #else
87 return 0.0;
88 #endif
89 }
90
91 template <typename T>
92 __device__ __forceinline__ T shfl_down(T val, unsigned int delta, int width = warpSize)
93 {
94 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
95 return __shfl_down(val, delta, width);
96 #else
97 return T();
98 #endif
99 }
100 __device__ __forceinline__ unsigned int shfl_down(unsigned int val, unsigned int delta, int width = warpSize)
101 {
102 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
103 return (unsigned int) __shfl_down((int) val, delta, width);
104 #else
105 return 0;
106 #endif
107 }
108 __device__ __forceinline__ double shfl_down(double val, unsigned int delta, int width = warpSize)
109 {
110 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
111 int lo = __double2loint(val);
112 int hi = __double2hiint(val);
113
114 lo = __shfl_down(lo, delta, width);
115 hi = __shfl_down(hi, delta, width);
116
117 return __hiloint2double(hi, lo);
118 #else
119 return 0.0;
120 #endif
121 }
122
123 template <typename T>
124 __device__ __forceinline__ T shfl_up(T val, unsigned int delta, int width = warpSize)
125 {
126 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
127 return __shfl_up(val, delta, width);
128 #else
129 return T();
130 #endif
131 }
132 __device__ __forceinline__ unsigned int shfl_up(unsigned int val, unsigned int delta, int width = warpSize)
133 {
134 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
135 return (unsigned int) __shfl_up((int) val, delta, width);
136 #else
137 return 0;
138 #endif
139 }
140 __device__ __forceinline__ double shfl_up(double val, unsigned int delta, int width = warpSize)
141 {
142 #if defined __CUDA_ARCH__ && __CUDA_ARCH__ >= 300
143 int lo = __double2loint(val);
144 int hi = __double2hiint(val);
145
146 lo = __shfl_up(lo, delta, width);
147 hi = __shfl_up(hi, delta, width);
148
149 return __hiloint2double(hi, lo);
150 #else
151 return 0.0;
152 #endif
153 }
154}}}
155
156# undef __shfl
157# undef __shfl_up
158# undef __shfl_down
159
161
162#endif // OPENCV_CUDA_WARP_SHUFFLE_HPP
InputArrayOfArrays InputArrayOfArrays InputOutputArray InputOutputArray InputOutputArray InputOutputArray Size InputOutputArray InputOutputArray T
Definition calib3d.hpp:1867
CvSize int int int CvPoint int delta
Definition imgproc_c.h:1168
"black box" representation of the file storage associated with a file on disk.
Definition calib3d.hpp:441