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