【并行计算-CUDA开发】Windows下opencl环境配置
首先要下载安装opencl库。我这里下载的是英特尔的。英伟达和AMD的也都差不多。
首先下载INTEL版的opencl驱动:
的话,很很可能还是不能正常编译。这是因为
Studio (even 2010) uses 32-bit by default, so unless you've explicitly set your project to be 64-bit (in configuration manager -> platform -> x64) it will be 32-bit.
或者......//lib/Win32
试试。
LF),重新编译,ok。
还有在查找替换时,在查找选项中启用 正则表达式选项 ,注意windows下的换行符是 /n 而不是\n
opencl编码流程
摘自opencl异构计算:
(1)初始化opencl 平台(调用两次clGetPlatformIDs函数)
第一次获取可用的平台数量,第二次获取一个可用的平台。
(2) 选择设备(调用两次clGetDeviceIDs函数)
第一次获取可用的设备数量,第二次获取一个可用的设备。
(3)创建上下文(调用clCreateContext函数)
Context:环境上下文,一个Context包含几个device(单个Cpu或GPU),一个Context就是这些device的一个联系纽带,只有在一个Context上的那些Device才能彼此交流工作,你的机器上可以同时存在很多Context。你可以用一个CPu创建context,也可以用一个CPU和一个GPU创建一个。
(4)创建命令队列(调用clCreateCommandQueue函数)
(5)创建数据缓冲区(调用clCreateBuffer函数)
(6)将 host数据写进设备缓冲区(调用clEnqueueWriteBuffer函数)
(7)创建程序对象(调用clCreateProgramWithSource函数)并编译内核源码(调用clBuildProgram函数,如果编译成功,则把编译代码存储在程序对象中)
(8)创建kernel(调用clCreateKernel函数)
(9)设置内核参数(调用clSetKernelArg函数)
(10)Configure the work-item structure(设置worksize)//只在分组的时候用到,只调用全局id的时候不要设置
(11)内核入队执行(调用clEnqueueNDRangeKernel函数)
(12)取回计算结果。Read the output buffer back to the host(调用clEnqueueReadBuffer函数)
(13)Release OpenCL resources(至此结束整个运行过程)
中间有很多地方需要结合实际情况进行设定。
//step 1:初始化OpenCL
err = clGetPlatformIDs(1,&platform_id,NULL);
if(err!=CL_SUCCESS)
{
cout<<"clGetPlatformIDs error"<<endl;
return 0;
}
////step 2:创建上下文。这次我们只用CPU来进行并行运算,当然你也可以该成GPU
clGetDeviceIDs(platform_id,CL_DEVICE_TYPE_CPU,1,&device,NULL);
//step 3:创建上下文
context = clCreateContext(NULL,1,&device,NULL,NULL,NULL);
//step 4:创建命令队列
cmdQueue = clCreateCommandQueue(context,device,0,NULL);
//step 5:创建数据缓冲区,即创建内存对象,内存对象分配在设备内存中,可以有内核函数直接调用
bufferA = clCreateBuffer(context,
CL_MEM_READ_ONLY,
datasize,NULL,NULL);
bufferB = clCreateBuffer(context,
CL_MEM_READ_ONLY,
datasize,NULL,NULL);
//step 6:将数据上传到缓冲区,注意这里只传A,相当于赋值,B 是结果,不需要初始化了
clEnqueueWriteBuffer(cmdQueue,
bufferA,CL_FALSE,
0,datasize,
buf_A,0,
NULL,NULL);
//step 7:由内核源代码创建程序对象.
program = clCreateProgramWithSource(context,1,
(const char**)&buf_code,
NULL,NULL);
//调用clBuildProgram函数,编译内核源代码。如果编译成功,则把编译代码存储在程序对象中
clBuildProgram(program,1,&device,NULL,NULL,NULL);
//step 8:创建内核对象
kernel = clCreateKernel(program,"transposition",NULL);
//step 9:设置参数,执行内核
clSetKernelArg(kernel,0,sizeof(cl_mem),&bufferA);
clSetKernelArg(kernel,1,sizeof(cl_mem),&bufferB);
//step 10:内核入队执行。注意这里第三个参数已经改成2,表示二维数据。
clEnqueueNDRangeKernel(cmdQueue,kernel,
2,NULL,
globalWorkSize,
NULL,0,NULL,NULL);
//step 11:取回计算结果
clEnqueueReadBuffer(cmdQueue,bufferB,CL_TRUE,0,
datasize,buf_B,0,NULL,NULL);
//输出计算结果
for(n=0;n
{
for(m=0;m
{
cout<< buf_A[m][n] <<",";
}
cout<<endl;
}
cout<<endl<<"====transposition===="<<endl<<endl;
for(n=0;n
{
for(m=0;m
{
cout<< buf_B[m][n] <<",";
}
cout<<endl;
}
//step 12:释放所有调用和内存
clReleaseKernel(kernel);
clReleaseProgram(program);
clReleaseCommandQueue(cmdQueue);
clReleaseMemObject(bufferA);
clReleaseMemObject(bufferB);
clReleaseContext(context);
delete buf_code;
return 0;
【并行计算-CUDA开发】Windows下opencl环境配置的更多相关文章
- Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置
Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置 1.简介 本文主要是 Windows 下 MSYS2 环境配置和 MinGW-w64 C++编译环境配置方法 2.下载 ...
- windows下JDK环境配置与Android SDK环境配置
一.JDK环境配置1.配置变量名:JAVA_HOME变量值:jdk安装的绝对路径. 变量名:Path(在系统变量中找到并选中Path点击下面的编辑按钮,不要删除原本变量值中的任何一个字母,在这个变量值 ...
- Windows下python环境配置
步骤: 1.安装Python.Sublime Text: 2.打开Sublime Text,在菜单栏点击“Tools”->“Build System”->“New Build System ...
- windows下androidNDK环境配置
一:什么是NDK? NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so 和java 应用一起打包成apk.这些工具对开发者的帮助是巨大的. NDK 集成了交叉编译器, ...
- windows下 Rust 环境配置
搭建 Visual Studio Code 开发环境 首先,需要安装最新版的 Rust 编译工具和 Visual Studio Code. Rust 编译工具:https://www.rust-lan ...
- Windows下Java环境配置,tomcat安装
问题描述:在Windows下面做Java web相关的项目的时候,Java和tomcat是基础,这里记载一下Java环境的配置以及tomcat的安装和配置. 使用工具:Windows.jdk安装包.t ...
- windows下JDK环境配置
原文地址:http://blog.sina.com.cn/s/blog_618592ea0100oeif.html 一.JDK1.6下载 目前JDK最新版本是JDK1.6,到http://java.s ...
- React Native 入门笔记一 -- Windows下基本环境配置
一.准备工作 首先,需要安装nodejs,可以从nodejs官网下载,注意,React Native 要求node版本在4.0或以上:否则会出错,我建议把node版本升到最新版本,防止后面出现各种莫名 ...
- realpython教程之机器学习之Windows下的环境配置
不得不说,realPython的教程确实写的仔细,准确,有逻辑.果然高质量的学习材料还是更利于学的. 反观我们学校,似乎就有些急功近利了.连Python语言基础都没学,就直接讲深度学习.完全不符合学习 ...
随机推荐
- BZOJ 1984: 月下“毛景树” (树链剖分+线段树)
注意赋值和加法的标记下传优先级.具体看代码. CODE #include <vector> #include <queue> #include <cstdio> # ...
- Java开发工具汇总
1. Arthas 是Alibaba开源的Java诊断工具 Java动态追踪,对生产环境出现出现bug的情况下,无法调试处理问题,可以借鉴该工具进行问题分析. 原理介绍:Java动态追踪技术探究 Ar ...
- Linux安装JAVA web环境
一:安装jdk 1.下载 在oracle下载东西的时候因为oracle的一些验证机制,所以需要在链接前面添加一些参数 wget --no-check-certificate --no-cookie ...
- [Algorithm] Finding all factors of a number
12's factors are: {1,2,3,4,6,12} function factors (n) { let list = []; for (let i = 1; i < Math.s ...
- 【Andriod-AlertDialog控件】 弹出对话框AlertDialog用法
Result: Code: import android.app.Activity; import android.app.AlertDialog; import android.content.Di ...
- 课时5:POW,POS,DPOS(矿工/矿机,工作证明)
比特币钱包
- Prism框架中View与Region关联的几种方式
Prism.Regions命名空间下有2个重要接口:IRegionManager.IRegion IRegionManager接口中的方法与属性:AddToRegion().RegisterViewW ...
- Game HDU - 5242 树链思想
GameHDU - 5242 题目大意:一个游戏有n个场景形成了棵有根树,根节点是1,每个场景都有它的权值.然后一个人可以选择其中K个分支来走,而每个场景的权重只算一遍,问最大的权值和. 一开始想叉了 ...
- 数位dp入门 HDU 2089 HDU 3555
最基本的一类数位dp题,题目大意一般是在a~b的范围,满足某些要求的数字有多少个,而这些要求一般都是要包含或者不包含某些数字,或者一些带着数字性质的要求,一般来说暴力是可以解决这一类问题,可是当范围非 ...
- Nginx配置中的log_format用法梳理
nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,一般在nginx的配置文件中日记配置( ...