starpu_opencl.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*
  2. * StarPU
  3. * Copyright (C) INRIA 2008-2010 (see AUTHORS file)
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU Lesser General Public License as published by
  7. * the Free Software Foundation; either version 2.1 of the License, or (at
  8. * your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. *
  14. * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  15. */
  16. #ifndef __STARPU_OPENCL_H__
  17. #define __STARPU_OPENCL_H__
  18. #ifdef STARPU_USE_OPENCL
  19. #include <CL/cl.h>
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. #define STARPU_OPENCL_REPORT_ERROR(status) \
  24. do { \
  25. char *errormsg; \
  26. switch (status) { \
  27. case CL_SUCCESS: \
  28. errormsg = "success"; \
  29. break; \
  30. case CL_DEVICE_NOT_FOUND: \
  31. errormsg = "Device not found"; \
  32. break; \
  33. case CL_DEVICE_NOT_AVAILABLE: \
  34. errormsg = "Device not available"; \
  35. break; \
  36. case CL_COMPILER_NOT_AVAILABLE: \
  37. errormsg = "Compiler not available"; \
  38. break; \
  39. case CL_MEM_OBJECT_ALLOCATION_FAILURE: \
  40. errormsg = "Memory object allocation failure"; \
  41. break; \
  42. case CL_OUT_OF_RESOURCES: \
  43. errormsg = "Out of resources"; \
  44. break; \
  45. case CL_OUT_OF_HOST_MEMORY: \
  46. errormsg = "Out of host memory"; \
  47. break; \
  48. case CL_PROFILING_INFO_NOT_AVAILABLE: \
  49. errormsg = "Profiling info not available"; \
  50. break; \
  51. case CL_MEM_COPY_OVERLAP: \
  52. errormsg = "Memory copy overlap"; \
  53. break; \
  54. case CL_IMAGE_FORMAT_MISMATCH: \
  55. errormsg = "Image format mismatch"; \
  56. break; \
  57. case CL_IMAGE_FORMAT_NOT_SUPPORTED: \
  58. errormsg = "Image format not supported"; \
  59. break; \
  60. case CL_BUILD_PROGRAM_FAILURE: \
  61. errormsg = "Build program failure"; \
  62. break; \
  63. case CL_MAP_FAILURE: \
  64. errormsg = "Map failure"; \
  65. break; \
  66. case CL_INVALID_VALUE: \
  67. errormsg = "Invalid value"; \
  68. break; \
  69. case CL_INVALID_DEVICE_TYPE: \
  70. errormsg = "Invalid device type"; \
  71. break; \
  72. case CL_INVALID_PLATFORM: \
  73. errormsg = "Invalid platform"; \
  74. break; \
  75. case CL_INVALID_DEVICE: \
  76. errormsg = "Invalid device"; \
  77. break; \
  78. case CL_INVALID_CONTEXT: \
  79. errormsg = "Invalid context"; \
  80. break; \
  81. case CL_INVALID_QUEUE_PROPERTIES: \
  82. errormsg = "Invalid queue properties"; \
  83. break; \
  84. case CL_INVALID_COMMAND_QUEUE: \
  85. errormsg = "Invalid command queue"; \
  86. break; \
  87. case CL_INVALID_HOST_PTR: \
  88. errormsg = "Invalid host pointer"; \
  89. break; \
  90. case CL_INVALID_MEM_OBJECT: \
  91. errormsg = "Invalid memory object"; \
  92. break; \
  93. case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: \
  94. errormsg = "Invalid image format descriptor"; \
  95. break; \
  96. case CL_INVALID_IMAGE_SIZE: \
  97. errormsg = "Invalid image size"; \
  98. break; \
  99. case CL_INVALID_SAMPLER: \
  100. errormsg = "Invalid sampler"; \
  101. break; \
  102. case CL_INVALID_BINARY: \
  103. errormsg = "Invalid binary"; \
  104. break; \
  105. case CL_INVALID_BUILD_OPTIONS: \
  106. errormsg = "Invalid build options"; \
  107. break; \
  108. case CL_INVALID_PROGRAM: \
  109. errormsg = "Invalid program"; \
  110. break; \
  111. case CL_INVALID_PROGRAM_EXECUTABLE: \
  112. errormsg = "Invalid program executable"; \
  113. break; \
  114. case CL_INVALID_KERNEL_NAME: \
  115. errormsg = "Invalid kernel name"; \
  116. break; \
  117. case CL_INVALID_KERNEL_DEFINITION: \
  118. errormsg = "Invalid kernel definition"; \
  119. break; \
  120. case CL_INVALID_KERNEL: \
  121. errormsg = "Invalid kernel"; \
  122. break; \
  123. case CL_INVALID_ARG_INDEX: \
  124. errormsg = "Invalid argument index"; \
  125. break; \
  126. case CL_INVALID_ARG_VALUE: \
  127. errormsg = "Invalid argument value"; \
  128. break; \
  129. case CL_INVALID_ARG_SIZE: \
  130. errormsg = "Invalid argument size"; \
  131. break; \
  132. case CL_INVALID_KERNEL_ARGS: \
  133. errormsg = "Invalid kernel arguments"; \
  134. break; \
  135. case CL_INVALID_WORK_DIMENSION: \
  136. errormsg = "Invalid work dimension"; \
  137. break; \
  138. case CL_INVALID_WORK_GROUP_SIZE: \
  139. errormsg = "Invalid work group size"; \
  140. break; \
  141. case CL_INVALID_WORK_ITEM_SIZE: \
  142. errormsg = "Invalid work item size"; \
  143. break; \
  144. case CL_INVALID_GLOBAL_OFFSET: \
  145. errormsg = "Invalid global offset"; \
  146. break; \
  147. case CL_INVALID_EVENT_WAIT_LIST: \
  148. errormsg = "Invalid event wait list"; \
  149. break; \
  150. case CL_INVALID_EVENT: \
  151. errormsg = "Invalid event"; \
  152. break; \
  153. case CL_INVALID_OPERATION: \
  154. errormsg = "Invalid operation"; \
  155. break; \
  156. case CL_INVALID_GL_OBJECT: \
  157. errormsg = "Invalid GL object"; \
  158. break; \
  159. case CL_INVALID_BUFFER_SIZE: \
  160. errormsg = "Invalid buffer size"; \
  161. break; \
  162. case CL_INVALID_MIP_LEVEL: \
  163. errormsg = "Invalid MIP level"; \
  164. break; \
  165. case CL_INVALID_GLOBAL_WORK_SIZE: \
  166. errormsg = "Invalid global work size"; \
  167. break; \
  168. default: \
  169. errormsg = "unknown error"; \
  170. break; \
  171. } \
  172. printf("oops in %s ... <%s> \n", __func__, errormsg); \
  173. assert(0); \
  174. } while (0)
  175. void starpu_opencl_get_context(int devid, cl_context *context);
  176. void starpu_opencl_get_device(int devid, cl_device_id *device);
  177. void starpu_opencl_get_queue(int devid, cl_command_queue *queue);
  178. int starpu_opencl_load_kernel(cl_kernel *kernel, cl_command_queue *queue, char *program_name, char *kernel_name, int devid);
  179. int starpu_opencl_release(cl_kernel kernel);
  180. #ifdef __cplusplus
  181. }
  182. #endif
  183. #endif // STARPU_USE_OPENCL
  184. #endif // __STARPU_OPENCL_H__