# mindspore::registry::opencl
## 接口汇总
| 类名 | 描述 |
| --- | --- |
| [OpenCLRuntimeWrapper](#openclruntimewrapper) | 端侧GPU操作的接口类|
## OpenCLRuntimeWrapper
\#include <[include/registry/opencl_runtime_wrapper.h](https://gitee.com/mindspore/mindspore/blob/r2.0.0-alpha/mindspore/lite/include/registry/opencl_runtime_wrapper.h)>
OpenCLRuntimeWrapper类包装了内部OpenCL的相关接口,用于支持南向GPU算子的开发。
### OpenCLRuntimeWrapper
```c++
OpenCLRuntimeWrapper() = default;
```
构造函数。
### ~OpenCLRuntimeWrapper
```c++
~OpenCLRuntimeWrapper = default;
```
析构函数。
## 公有成员函数
### LoadSource
```c++
Status LoadSource(const std::string &program_name, const std::string &source);
```
加载OpenCL源代码并指定程序名。
- 参数
- `program_name`: OpenCL源程序名称。
- `source`: OpenCL源程序。
### BuildKernel
```c++
Status BuildKernel(cl::Kernel *kernel, const std::string &program_name, const std::string &kernel_name,
const std::vector &build_options_ext = {});
```
构建OpenCL代码。
- 参数
- `kernel`: 用于返回已编译的内核。
- `program_name`: OpenCL源程序名称。
- `kernel_name`: OpenCL内核名称。
- `build_options_ext`: OpenCL内核构建选项。
### SetKernelArg
```c++
Status SetKernelArg(const cl::Kernel &kernel, uint32_t index, void *const value);
```
设置OpenCL内核运行时指针类参数的值。
- 参数
- `kernel`: OpenCL内核。
- `index`: OpenCL内核参数索引。
- `value`: OpenCL内核参数值指针。
```c++
template
typename std::enable_if::value, Status>::type SetKernelArg(const cl::Kernel &kernel,
uint32_t index, const T value);
```
设置OpenCL内核运行时非指针类参数的值。
- 参数
- `kernel`: OpenCL内核。
- `index`: OpenCL内核参数索引。
- `value`: OpenCL内核参数值。
### RunKernel
```c++
Status RunKernel(const cl::Kernel &kernbel, const cl::NDRange &global, const cl::NDRange &local);
```
运行OpenCL内核。
- 参数
- `kernel`: OpenCL内核。
- `global`: 定义工作项的总数量。
- `local`: 定义每个工作组中工作项的数量。
### SyncCommandQueue
```c++
Status SyncCommandQueue();
```
同步指令队列。
### GetAllocator
```c++
std::shared_ptr GetAllocator();
```
获取GPU内存分配器的智能指针。通过[Allocator接口](https://www.mindspore.cn/lite/api/zh-CN/r2.0.0-alpha/api_cpp/mindspore.html),可申请GPU内存,用于OpenCL内核的运算。
### MapBuffer
```c++
void *MapBuffer(void *host_ptr, int flags, bool sync = true);
```
重新将GPU内存映射到主机内存地址,以便读写。
- 参数
- `host_ptr`: 主机内存地址(为GPU内存所映射的CPU地址)。
- `flags`: 内存映射的OpenCL功能符号,如CL_MAP_READ,CL_MAP_WRITE。
- `sync`: 是否同步标志。
### UnmapBuffer
```c++
Status UnmapBuffer(void *host_ptr);
```
将改变后的内存数据,写入GPU。
- 参数
- `host_ptr`: 主机内存地址(为GPU内存所映射的CPU地址)。
### ReadImage
```c++
Status ReadImage(void *buffer, void *dst_data);
```
读取解析Image形式的GPU内存到目标地址,写入的数据格式为NHWC4(C轴4数据对齐的NHWC格式数据)。
- 参数
- `buffer`: Image格式的GPU内存所映射的主机内存地址。
- `dst_data`: 目标地址。
### WriteImage
```c++
Status WriteImage(void *buffer, void *src_data);
```
从源地址`src_data`读取数据,写入到Image形式的GPU内存`buffer`。
- 参数
- `buffer`: Image格式的GPU内存所映射的主机内存地址。
- `src_data`: 源地址。
### DeviceMaxWorkGroupSize
```c++
uint64_t DeviceMaxWorkGroupSize();
```
获取支持的最大工作组数量。
### GetMaxImage2DWidth
```c++
uint64_t GetMaxImage2DWidth();
```
获取Image内存数据支持的最大宽度。
### GetMaxImage2DHeight
```c++
uint64_t GetMaxImage2DHeight();
```
获取Image内存数据支持的最大高度。
### GetMaxImage2DWidth
```c++
uint64_t GetImagePitchAlignment();
```
获取Image内存数据的宽度对齐值。