贵州网站制作公司,宁德市医院,网站开发类参考文献,做网站送的小程序有什么用本文基于NVIDIA GPU和VS2019讲解如何配置OpenCL环境和快速上手编程。 文章目录 1.OpenCL安装在VS2019 上1.安装资源准备2.安装步骤2.OpenCL 快速入门1.原文和翻译2.代码改动和调试3.测试通过的代码1.OpenCL安装在VS2019 上
1.安装资源准备
从NVIDIA 官网下载CUDA 并双击运行…本文基于NVIDIA GPU和VS2019讲解如何配置OpenCL环境和快速上手编程。 文章目录 1.OpenCL安装在VS2019 上1.安装资源准备2.安装步骤 2.OpenCL 快速入门1.原文和翻译2.代码改动和调试 3.测试通过的代码 1.OpenCL安装在VS2019 上
1.安装资源准备
从NVIDIA 官网下载CUDA 并双击运行安装程序:
https://developer.nvidia.com/cuda-downloads?target_os=Windowstarget_arch=x86_64target_version=7target_type=exelocal
然后在安装路径找到以下资源: 1 .\lib\x64\OpenCL.lib OpenCL.lib 2.CL 头文件
CL 头文件 3.在显卡的默认驱动路径找到 OpenCL64.dll 在这里插入图片描述OpenCL64.dll
2.安装步骤
新建OpenCL_inc 和OpenCL_lib 目录。将上一步找到的资源分别复制到这两个目录。 其中OpenCL_inc 用来包含CL 头文件,OpenCL_lib 目录用来包含OpenCL.lib以及OpenCL.dll,OpenCL64.dll。
VS2019 环境配置: 1. 项目– (项目名)属性 --C/C+±-常规 --附加包含目录 -- F:\OPENCL\code\OpenCL_inc 2. 项目– (项目名)属性 --连接器 -- 常规 -- 附加库目录 -- F:\OPENCL\code\OpenCL_lib 3. 项目– (项目名)属性 --连接器 --输入– 附加依赖项 -- OpenCL.lib
2.OpenCL 快速入门
1.原文和翻译
原文地址 参考翻译
2.代码改动和调试
尝试将vector_add_gpu.cl kernel文件直接以字符串的方式放在代码中,然后在kernel编译(即执行 clBuildProgram)后再获取PROGRAM SOURCE:
error = clGetProgramInfo(program, CL_PROGRAM_SOURCE, bufSize, programBuffer, program_size_ret);发现这样不使用.cl 文件也时可行的。但是需要注意的是将编译后的字符串打印出来时buffer长度需要+1。
3.测试通过的代码
#include iostream
#include string//#include oclUtils.h
#include "CL\opencl.h"
#include time.h
#include windows.husing namespace std;
string getPlatformName(const cl_platform_id pid) {size_t param_value_size;clGetPlatformInfo(pid, CL_PLATFORM_NAME, 0, NULL, param_value_size);char* param_value = new char[param_value_size];clGetPlatformInfo(pid, CL_PLATFORM_NAME, param_value_size, param_value, NULL);return param_value;
}size_t shrRoundUp(size_t localWorkSize, size_t numItems) {size_t result = localWorkSize;while (result numItems)result += localWorkSize;return result;
}void vector_add_cpu(const float* const src_a,const float* const src_b,float* const res,const int size)
{for (int i = 0; i size; i++) {res[i] = src_a[i] + src_b[i];}
}int main() {cl_uint num_platforms;cl_int error = 0;cl_context context;cl_command_queue queue;cl_device_id device;cl_platform_id platformNvidia;// PlatformclGetPlatformIDs(0, NULL, num_platforms);cl_platform_id* platforms = new cl_platform_id[num_platforms];clGetPlatformIDs(num_platform