总体架构
通过封装OpenCL的一系列操作,仅提供C API给外部应用调用,以提高GPU应用开发的便利性。
目的
- 提供一个更为便利使用OpenCL的开发平台。
- 更容易地开发同时调用GPU和CPU的应用软件。
特性
- 可扩展性架构
- 标准的C语言库及API
- 隐藏OpenCL运行细节
- 通过OpenCL内核封装通用功能
- 使用者无需具备OpenCL知识内容
环境搭建
Step 01:下载并安装OpenCL驱动。https://developer.nvidia.com/opencl
Step 02:下载并安装OpenCL SDK。https://developer.nvidia.com/opencl
Step 03:配置Visual Studio中项目属性页面的如下内容,
- VC++ Directories – Include Directories & Library Directories
- Linker – Additional Library Directories
- Linker – Input – Additional Depandencies
平台和设备API
- bool initPlatform();
- unsigned int getPlatformCnt();
- void getPlatformInfo(unsigned int platformIndex);
- bool initDevice(unsigned int platformIndex);
- unsigned int getDeviceCnt();
- void getDeviceInfo(unsigned int deviceIndex);
上下文API
- bool initContext();
命令队列API
- bool initCmdQueue(unsigned int deviceIndex);
内核API
- bool initProgram(char *fileName, const int bufferSize);
- bool initKernel(char* kernel_name);
- bool excuteKernel(size_t *pGlobalWorkSize, size_t *pLocalWorkSize);
- bool bindingKernelArg(unsigned int argIndex, unsigned int dataSize);
- bool setKernelArg(unsigned int argIndex, float *pValue, unsigned int dataSize);
- bool getKernelArg(unsigned int argIndex, float *pValue, unsigned int dataSize);
共用API
- int getRunStatusInfo();
- unsigned long getProfilerTime();
- int getVendorID(unsigned int deviceIndex);
- bool isAMD(unsigned int deviceIndex);
- bool isIntel(unsigned int deviceIndex);
- bool isNVidia(unsigned int deviceIndex);
- void freeEnvResource();
SDK应用流程
性能