JASPL  0.2
Just Another Signal Processing Library
jtypetraits.cpp
1 // Header for this file
2 #include "jtypetraits.h"
3 // C System-Headers
4 //
5 // C++ System headers
6 #include <type_traits>
7 #include <string>
8 #include <assert.h> //static_assert
9 // Boost Headers
10 #include <boost/lexical_cast.hpp>
11 // Miscellaneous Headers
12 //
13 namespace jaspl {
14 
15 namespace ocl {
16 
17 std::string CLErrorToString(cl_int error) {
18  switch(error) {
19  // run-time and JIT compiler errors
20  case 0:
21  return "CL_SUCCESS";
22  case -1:
23  return "CL_DEVICE_NOT_FOUND";
24  case -2:
25  return "CL_DEVICE_NOT_AVAILABLE";
26  case -3:
27  return "CL_COMPILER_NOT_AVAILABLE";
28  case -4:
29  return "CL_MEM_OBJECT_ALLOCATION_FAILURE";
30  case -5:
31  return "CL_OUT_OF_RESOURCES";
32  case -6:
33  return "CL_OUT_OF_HOST_MEMORY";
34  case -7:
35  return "CL_PROFILING_INFO_NOT_AVAILABLE";
36  case -8:
37  return "CL_MEM_COPY_OVERLAP";
38  case -9:
39  return "CL_IMAGE_FORMAT_MISMATCH";
40  case -10:
41  return "CL_IMAGE_FORMAT_NOT_SUPPORTED";
42  case -11:
43  return "CL_BUILD_PROGRAM_FAILURE";
44  case -12:
45  return "CL_MAP_FAILURE";
46  case -13:
47  return "CL_MISALIGNED_SUB_BUFFER_OFFSET";
48  case -14:
49  return "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST";
50  case -15:
51  return "CL_COMPILE_PROGRAM_FAILURE";
52  case -16:
53  return "CL_LINKER_NOT_AVAILABLE";
54  case -17:
55  return "CL_LINK_PROGRAM_FAILURE";
56  case -18:
57  return "CL_DEVICE_PARTITION_FAILED";
58  case -19:
59  return "CL_KERNEL_ARG_INFO_NOT_AVAILABLE";
60 
61  // compile-time errors
62  case -30:
63  return "CL_INVALID_VALUE";
64  case -31:
65  return "CL_INVALID_DEVICE_TYPE";
66  case -32:
67  return "CL_INVALID_PLATFORM";
68  case -33:
69  return "CL_INVALID_DEVICE";
70  case -34:
71  return "CL_INVALID_CONTEXT";
72  case -35:
73  return "CL_INVALID_QUEUE_PROPERTIES";
74  case -36:
75  return "CL_INVALID_COMMAND_QUEUE";
76  case -37:
77  return "CL_INVALID_HOST_PTR";
78  case -38:
79  return "CL_INVALID_MEM_OBJECT";
80  case -39:
81  return "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR";
82  case -40:
83  return "CL_INVALID_IMAGE_SIZE";
84  case -41:
85  return "CL_INVALID_SAMPLER";
86  case -42:
87  return "CL_INVALID_BINARY";
88  case -43:
89  return "CL_INVALID_BUILD_OPTIONS";
90  case -44:
91  return "CL_INVALID_PROGRAM";
92  case -45:
93  return "CL_INVALID_PROGRAM_EXECUTABLE";
94  case -46:
95  return "CL_INVALID_KERNEL_NAME";
96  case -47:
97  return "CL_INVALID_KERNEL_DEFINITION";
98  case -48:
99  return "CL_INVALID_KERNEL";
100  case -49:
101  return "CL_INVALID_ARG_INDEX";
102  case -50:
103  return "CL_INVALID_ARG_VALUE";
104  case -51:
105  return "CL_INVALID_ARG_SIZE";
106  case -52:
107  return "CL_INVALID_KERNEL_ARGS";
108  case -53:
109  return "CL_INVALID_WORK_DIMENSION";
110  case -54:
111  return "CL_INVALID_WORK_GROUP_SIZE";
112  case -55:
113  return "CL_INVALID_WORK_ITEM_SIZE";
114  case -56:
115  return "CL_INVALID_GLOBAL_OFFSET";
116  case -57:
117  return "CL_INVALID_EVENT_WAIT_LIST";
118  case -58:
119  return "CL_INVALID_EVENT";
120  case -59:
121  return "CL_INVALID_OPERATION";
122  case -60:
123  return "CL_INVALID_GL_OBJECT";
124  case -61:
125  return "CL_INVALID_BUFFER_SIZE";
126  case -62:
127  return "CL_INVALID_MIP_LEVEL";
128  case -63:
129  return "CL_INVALID_GLOBAL_WORK_SIZE";
130  case -64:
131  return "CL_INVALID_PROPERTY";
132  case -65:
133  return "CL_INVALID_IMAGE_DESCRIPTOR";
134  case -66:
135  return "CL_INVALID_COMPILER_OPTIONS";
136  case -67:
137  return "CL_INVALID_LINKER_OPTIONS";
138  case -68:
139  return "CL_INVALID_DEVICE_PARTITION_COUNT";
140 
141  // extension errors
142  case -1000:
143  return "CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR";
144  case -1001:
145  return "CL_PLATFORM_NOT_FOUND_KHR";
146  case -1002:
147  return "CL_INVALID_D3D10_DEVICE_KHR";
148  case -1003:
149  return "CL_INVALID_D3D10_RESOURCE_KHR";
150  case -1004:
151  return "CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR";
152  case -1005:
153  return "CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR";
154  default:
155  return "Unknown OpenCL error #" + boost::lexical_cast<std::string>( error );
156  }
157 }
158 
159 std::string CLErrorToString(cl_int* error) {
160  return CLErrorToString( (intptr_t)error );
161 }
162 
163 void PrintOCLDebugInfo() {
164  //get all platforms (drivers)
165  std::vector<cl::Platform> platforms;
166  cl::Platform::get(&platforms);
167  if(platforms.size()==0) {
168  std::cout<<" No platforms found. Check OpenCL installation." << std::endl;
169  }
170 
171  std::cout << "Available Platforms:" << std::endl;
172  for( uint i = 0 ; i < platforms.size() ; i++ ) {
173 
174  std::cout << "Platform number " << i << " " << platforms[i].getInfo<CL_PLATFORM_NAME>() << std::endl;
175  cl::Platform platform = platforms[i];
176  std::cout << "Platform Info: "<<platform.getInfo<CL_PLATFORM_NAME>()<< std::endl;
177 
178  //get default device of the default platform
179  std::vector<cl::Device> devices;
180  platform.getDevices(CL_DEVICE_TYPE_ALL, &devices);
181  if(devices.size() == 0) {
182  std::cout<<" No devices found. Check OpenCL installation!\n";
183  }
184 
185  std::cout<<"Available devices: "<<devices.size()<<std::endl;
186 
187  for( uint i = 0 ; i < devices.size() ; i++ ) {
188  std::cout << "Device number " << i << " " << devices[i].getInfo<CL_DEVICE_NAME>() << std::endl;
189  }
190  }
191 
192 }
193 
194 }
195 
196 }