1 #ifndef STAN_MATH_PRIM_ARR_ERR_CHECK_OPENCL_HPP
2 #define STAN_MATH_PRIM_ARR_ERR_CHECK_OPENCL_HPP
3 #ifdef STAN_OPENCL
4 #define __CL_ENABLE_EXCEPTIONS
5
6 #include <stan/math/prim/scal/err/system_error.hpp>
7 #include <CL/cl.hpp>
8 #include <iostream>
9 #include <stdexcept>
10 #include <string>
11
12 /** @file stan/math/prim/arr/err/check_opencl.hpp
13 * @brief checking OpenCL error numbers
14 */
15
16 namespace stan {
17 namespace math {
18
19 /**
20 * Throws the domain error with specifying the OpenCL error that
21 * occured. It outputs the OpenCL errors that are specified
22 * in OpenCL 2.0. If no matching error number is found,
23 * it throws the error with the number.
24 * @param function the name of the function where the error occured
25 * @param e The error number
26 */
check_opencl_error(const char * function,const cl::Error & e)27 inline void check_opencl_error(const char *function, const cl::Error &e) {
28 switch (e.err()) {
29 case 0:
30 // CL_SUCCESS - no need to throw
31 return;
32 case -1:
33 system_error(function, e.what(), e.err(), "CL_DEVICE_NOT_FOUND");
34 case -2:
35 system_error(function, e.what(), e.err(), "CL_DEVICE_NOT_AVAILABLE");
36 case -3:
37 system_error(function, e.what(), e.err(), "CL_COMPILER_NOT_AVAILABLE");
38 case -4:
39 system_error(function, e.what(), e.err(),
40 "CL_MEM_OBJECT_ALLOCATION_FAILURE");
41 case -5:
42 system_error(function, e.what(), e.err(), "CL_OUT_OF_RESOURCES");
43 case -6:
44 system_error(function, e.what(), e.err(), "CL_OUT_OF_HOST_MEMORY");
45 case -7:
46 system_error(function, e.what(), e.err(),
47 "CL_PROFILING_INFO_NOT_AVAILABLE");
48 case -8:
49 system_error(function, e.what(), e.err(), "CL_MEM_COPY_OVERLAP");
50 case -9:
51 system_error(function, e.what(), e.err(), "CL_IMAGE_FORMAT_MISMATCH");
52 case -10:
53 system_error(function, e.what(), e.err(),
54 "CL_IMAGE_FORMAT_NOT_SUPPORTED");
55 case -11:
56 system_error(function, e.what(), e.err(), "CL_BUILD_PROGRAM_FAILURE");
57 case -12:
58 system_error(function, e.what(), e.err(), "CL_MAP_FAILURE");
59 case -13:
60 system_error(function, e.what(), e.err(),
61 "CL_MISALIGNED_SUB_BUFFER_OFFSET");
62 case -14:
63 system_error(function, e.what(), e.err(),
64 "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST");
65 case -15:
66 system_error(function, e.what(), e.err(), "CL_COMPILE_PROGRAM_FAILURE");
67 case -16:
68 system_error(function, e.what(), e.err(), "CL_LINKER_NOT_AVAILABLE");
69 case -17:
70 system_error(function, e.what(), e.err(), "CL_LINK_PROGRAM_FAILURE");
71 case -18:
72 system_error(function, e.what(), e.err(), "CL_DEVICE_PARTITION_FAILED");
73 case -19:
74 system_error(function, e.what(), e.err(),
75 "CL_KERNEL_ARG_INFO_NOT_AVAILABLE");
76 case -30:
77 system_error(function, e.what(), e.err(), "CL_INVALID_VALUE");
78 case -31:
79 system_error(function, e.what(), e.err(), "CL_INVALID_DEVICE_TYPE");
80 case -32:
81 system_error(function, e.what(), e.err(), "CL_INVALID_PLATFORM");
82 case -33:
83 system_error(function, e.what(), e.err(), "CL_INVALID_DEVICE");
84 case -34:
85 system_error(function, e.what(), e.err(), "CL_INVALID_CONTEXT");
86 case -35:
87 system_error(function, e.what(), e.err(), "CL_INVALID_QUEUE_PROPERTIES");
88 case -36:
89 system_error(function, e.what(), e.err(), "CL_INVALID_COMMAND_QUEUE");
90 case -37:
91 system_error(function, e.what(), e.err(), "CL_INVALID_HOST_PTR");
92 case -38:
93 system_error(function, e.what(), e.err(), "CL_INVALID_MEM_OBJECT");
94 case -39:
95 system_error(function, e.what(), e.err(),
96 "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR");
97 case -40:
98 system_error(function, e.what(), e.err(), "CL_INVALID_IMAGE_SIZE");
99 case -41:
100 system_error(function, e.what(), e.err(), "CL_INVALID_SAMPLER");
101 case -42:
102 system_error(function, e.what(), e.err(), "CL_INVALID_BINARY");
103 case -43:
104 system_error(function, e.what(), e.err(), "CL_INVALID_BUILD_OPTIONS");
105 case -44:
106 system_error(function, e.what(), e.err(), "CL_INVALID_PROGRAM");
107 case -45:
108 system_error(function, e.what(), e.err(),
109 "CL_INVALID_PROGRAM_EXECUTABLE");
110 case -46:
111 system_error(function, e.what(), e.err(), "CL_INVALID_KERNEL_NAME");
112 case -47:
113 system_error(function, e.what(), e.err(), "CL_INVALID_KERNEL_DEFINITION");
114 case -48:
115 system_error(function, e.what(), e.err(), "CL_INVALID_KERNEL");
116 case -49:
117 system_error(function, e.what(), e.err(), "CL_INVALID_ARG_INDEX");
118 case -50:
119 system_error(function, e.what(), e.err(), "CL_INVALID_ARG_VALUE");
120 case -51:
121 system_error(function, e.what(), e.err(), "CL_INVALID_ARG_SIZE");
122 case -52:
123 system_error(function, e.what(), e.err(), "CL_INVALID_KERNEL_ARGS");
124 case -53:
125 system_error(function, e.what(), e.err(), "CL_INVALID_WORK_DIMENSION");
126 case -54:
127 system_error(function, e.what(), e.err(), "CL_INVALID_WORK_GROUP_SIZE");
128 case -55:
129 system_error(function, e.what(), e.err(), "CL_INVALID_WORK_ITEM_SIZE");
130 case -56:
131 system_error(function, e.what(), e.err(), "CL_INVALID_GLOBAL_OFFSET");
132 case -57:
133 system_error(function, e.what(), e.err(), "CL_INVALID_EVENT_WAIT_LIST");
134 case -58:
135 system_error(function, e.what(), e.err(), "CL_INVALID_EVENT");
136 case -59:
137 system_error(function, e.what(), e.err(), "CL_INVALID_OPERATION");
138 case -60:
139 system_error(function, e.what(), e.err(), "CL_INVALID_GL_OBJECT");
140 case -61:
141 system_error(function, e.what(), e.err(), "CL_INVALID_BUFFER_SIZE");
142 case -62:
143 system_error(function, e.what(), e.err(), "CL_INVALID_MIP_LEVEL");
144 case -63:
145 system_error(function, e.what(), e.err(), "CL_INVALID_GLOBAL_WORK_SIZE");
146 case -64:
147 system_error(function, e.what(), e.err(), "CL_INVALID_PROPERTY");
148 case -65:
149 system_error(function, e.what(), e.err(), "CL_INVALID_IMAGE_DESCRIPTOR");
150 case -66:
151 system_error(function, e.what(), e.err(), "CL_INVALID_COMPILER_OPTIONS");
152 case -67:
153 system_error(function, e.what(), e.err(), "CL_INVALID_LINKER_OPTIONS");
154 case -68:
155 system_error(function, e.what(), e.err(),
156 "CL_INVALID_DEVICE_PARTITION_COUNT");
157 case -69:
158 system_error(function, e.what(), e.err(), "CL_INVALID_PIPE_SIZE");
159 case -70:
160 system_error(function, e.what(), e.err(), "CL_INVALID_DEVICE_QUEUE");
161 case -1000:
162 system_error(function, e.what(), e.err(),
163 "CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR");
164 case -1001:
165 system_error(function, e.what(), e.err(), "CL_PLATFORM_NOT_FOUND_KHR");
166 case -1002:
167 system_error(function, e.what(), e.err(), "CL_INVALID_D3D10_DEVICE_KHR");
168 case -1003:
169 system_error(function, e.what(), e.err(),
170 "CL_INVALID_D3D10_RESOURCE_KHR");
171 case -1004:
172 system_error(function, e.what(), e.err(),
173 "CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR");
174 case -1005:
175 system_error(function, e.what(), e.err(),
176 "CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR");
177 case -1006:
178 system_error(function, e.what(), e.err(), "CL_INVALID_D3D11_DEVICE_KHR");
179 case -1007:
180 system_error(function, e.what(), e.err(),
181 "CL_INVALID_D3D11_RESOURCE_KHR");
182 case -1008:
183 system_error(function, e.what(), e.err(),
184 "CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR");
185 case -1009:
186 system_error(function, e.what(), e.err(),
187 "CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR");
188 case -101:
189 system_error(function, e.what(), e.err(), "CL_INVALID_D3D9_DEVICE_NV ");
190 case -1011:
191 system_error(function, e.what(), e.err(), "CL_INVALID_D3D9_RESOURCE_NV ");
192 case -1012:
193 system_error(function, e.what(), e.err(),
194 "CL_D3D9_RESOURCE_ALREADY_ACQUIRED_NV "
195 "CL_DX9_RESOURCE_ALREADY_ACQUIRED_INTEL");
196 case -1013:
197 system_error(function, e.what(), e.err(),
198 "CL_D3D9_RESOURCE_NOT_ACQUIRED_NV "
199 "CL_DX9_RESOURCE_NOT_ACQUIRED_INTEL");
200 case -1092:
201 system_error(function, e.what(), e.err(),
202 "CL_EGL_RESOURCE_NOT_ACQUIRED_KHR");
203 case -1093:
204 system_error(function, e.what(), e.err(), "CL_INVALID_EGL_OBJECT_KHR");
205 case -1094:
206 system_error(function, e.what(), e.err(), "CL_INVALID_ACCELERATOR_INTEL");
207 case -1095:
208 system_error(function, e.what(), e.err(),
209 "CL_INVALID_ACCELERATOR_TYPE_INTEL");
210 case -1096:
211 system_error(function, e.what(), e.err(),
212 "CL_INVALID_ACCELERATOR_DESCRIPTOR_INTEL");
213 case -1097:
214 system_error(function, e.what(), e.err(),
215 "CL_ACCELERATOR_TYPE_NOT_SUPPORTED_INTEL");
216 case -1098:
217 system_error(function, e.what(), e.err(),
218 "CL_INVALID_VA_API_MEDIA_ADAPTER_INTEL");
219 case -1099:
220 system_error(function, e.what(), e.err(),
221 "CL_INVALID_VA_API_MEDIA_SURFACE_INTEL");
222 case -1100:
223 system_error(function, e.what(), e.err(),
224 "CL_VA_API_MEDIA_SURFACE_ALREADY_ACQUIRED_INTEL");
225 case -1101:
226 system_error(function, e.what(), e.err(),
227 "CL_VA_API_MEDIA_SURFACE_NOT_ACQUIRED_INTEL");
228 case -9999:
229 system_error(function, e.what(), e.err(), "ILLEGAL_READ_OR_WRITE_NVIDIA");
230 default:
231 system_error(function, e.what(), e.err(),
232 std::to_string(e.err()).c_str());
233 }
234 }
235 } // namespace math
236 } // namespace stan
237 #endif
238 #endif
239