-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOpenCLUtility.h
More file actions
107 lines (99 loc) · 3.19 KB
/
OpenCLUtility.h
File metadata and controls
107 lines (99 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef OPENCLUTILITY_H
#define OPENCLUTILITY_H
#include <iostream>
#include <fstream>
#include <sstream>
#define CL_HPP_MINIMUM_OPENCL_VERSION 100
#define CL_HPP_TARGET_OPENCL_VERSION 100
#define CL_HPP_ENABLE_EXCEPTIONS
#include <CL/cl2.hpp> // вызывает ошибки линковки, использовать только в inline функциях
namespace OpenCL {
namespace Utility {
inline const char* CLErrName(int err) {
#define CASE(x) case x: return #x
switch(err) {
CASE(CL_DEVICE_NOT_FOUND);
CASE(CL_DEVICE_NOT_AVAILABLE);
CASE(CL_COMPILER_NOT_AVAILABLE);
CASE(CL_MEM_OBJECT_ALLOCATION_FAILURE);
CASE(CL_OUT_OF_RESOURCES);
CASE(CL_OUT_OF_HOST_MEMORY);
CASE(CL_PROFILING_INFO_NOT_AVAILABLE);
CASE(CL_MEM_COPY_OVERLAP);
CASE(CL_IMAGE_FORMAT_MISMATCH);
CASE(CL_IMAGE_FORMAT_NOT_SUPPORTED);
CASE(CL_BUILD_PROGRAM_FAILURE);
CASE(CL_MAP_FAILURE);
CASE(CL_MISALIGNED_SUB_BUFFER_OFFSET);
CASE(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST);
CASE(CL_COMPILE_PROGRAM_FAILURE);
CASE(CL_LINKER_NOT_AVAILABLE);
CASE(CL_LINK_PROGRAM_FAILURE);
CASE(CL_DEVICE_PARTITION_FAILED);
CASE(CL_KERNEL_ARG_INFO_NOT_AVAILABLE);
CASE(CL_INVALID_VALUE);
CASE(CL_INVALID_DEVICE_TYPE);
CASE(CL_INVALID_PLATFORM);
CASE(CL_INVALID_DEVICE);
CASE(CL_INVALID_CONTEXT);
CASE(CL_INVALID_QUEUE_PROPERTIES);
CASE(CL_INVALID_COMMAND_QUEUE);
CASE(CL_INVALID_HOST_PTR);
CASE(CL_INVALID_MEM_OBJECT);
CASE(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR);
CASE(CL_INVALID_IMAGE_SIZE);
CASE(CL_INVALID_SAMPLER);
CASE(CL_INVALID_BINARY);
CASE(CL_INVALID_BUILD_OPTIONS);
CASE(CL_INVALID_PROGRAM);
CASE(CL_INVALID_PROGRAM_EXECUTABLE);
CASE(CL_INVALID_KERNEL_NAME);
CASE(CL_INVALID_KERNEL_DEFINITION);
CASE(CL_INVALID_KERNEL);
CASE(CL_INVALID_ARG_INDEX);
CASE(CL_INVALID_ARG_VALUE);
CASE(CL_INVALID_ARG_SIZE);
CASE(CL_INVALID_KERNEL_ARGS);
CASE(CL_INVALID_WORK_DIMENSION);
CASE(CL_INVALID_WORK_GROUP_SIZE);
CASE(CL_INVALID_WORK_ITEM_SIZE);
CASE(CL_INVALID_GLOBAL_OFFSET);
CASE(CL_INVALID_EVENT_WAIT_LIST);
CASE(CL_INVALID_EVENT);
CASE(CL_INVALID_OPERATION);
CASE(CL_INVALID_GL_OBJECT);
CASE(CL_INVALID_BUFFER_SIZE);
CASE(CL_INVALID_MIP_LEVEL);
CASE(CL_INVALID_GLOBAL_WORK_SIZE);
CASE(CL_INVALID_PROPERTY);
CASE(CL_INVALID_IMAGE_DESCRIPTOR);
CASE(CL_INVALID_COMPILER_OPTIONS);
CASE(CL_INVALID_LINKER_OPTIONS);
CASE(CL_INVALID_DEVICE_PARTITION_COUNT);
CASE(CL_INVALID_PIPE_SIZE);
CASE(CL_INVALID_DEVICE_QUEUE);
CASE(CL_INVALID_SPEC_ID);
CASE(CL_MAX_SIZE_RESTRICTION_EXCEEDED);
}
#undef CASE
return nullptr;
}
inline const char* CLDeviceType(int type) {
#define CASE(x) case x: return #x
switch(type) {
CASE(CL_DEVICE_TYPE_CPU);
CASE(CL_DEVICE_TYPE_GPU);
CASE(CL_DEVICE_TYPE_ACCELERATOR);
CASE(CL_DEVICE_TYPE_CUSTOM);
}
#undef CASE
return nullptr;
}
inline std::string CLLoadSource(const std::string& _file_name) {
std::ifstream source_file(_file_name);
return std::string(std::istreambuf_iterator<char>(source_file),
(std::istreambuf_iterator<char>()));
}
}
}
#endif // OPENCLUTILITY_H