【并行计算-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语言基础都没学,就直接讲深度学习.完全不符合学习 ...
随机推荐
- Python之日期操作及转换详解
# 导入datetime模块,用以操作时间 import datetime # 导入time模块 import time # 获取当前时间 格式: 年-月-日 时:分:秒 . 毫秒 nowTime = ...
- HDU 6038 - Function | 2017 Multi-University Training Contest 1
/* HDU 6038 - Function [ 置换,构图 ] 题意: 给出两组排列 a[], b[] 问 满足 f(i) = b[f(a[i])] 的 f 的数目 分析: 假设 a[] = {2, ...
- Spring中 bean的生命周期
为什么要了解Spring中 bean的生命周期? 有时候我们需要自定义bean的创建过程,因此了解Spring中 bean的生命周期非常重要. 二话不说先上图: 在谈具体流程之前先看看Spring官方 ...
- UI案例
<Window x:Class="WpfDemo2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/20 ...
- 如何在VMware软件上安装Red hat(红帽)Linux6.9操作系统
本文介绍如何在VMware软件上安装Redhat(红帽)Linux6.9操作系统 首先需要准备 VMware软件和Redhat-Linux6.9操作系统的ISO系统镜像文件包(这里以linux6.9为 ...
- 13. Ajax技术
在传统的Web应用模式中,页面中用户的每一次操作都将触发一次返回Web服务器的HTTP请求,服务器进行相应的处理后,返回一个HTML页面的客户端.而在Ajax应用中,页面中的用户的操作将通过Ajax引 ...
- Trie树(c++实现)——转载自jihite的博客
Trie树(c++实现) 原理 先看个例子,存储字符串abc.ab.abm.abcde.pm可以利用以下方式存储 上边就是Trie树的基本原理:利用字串的公共前缀来节省存储空间,最大限度的减少无谓 ...
- Spring——代理实现AOP
一.静态代理实现 1.接口(抽象主题) 2.接口的实现类(真实主题) 3.代理类(代理主题) 4.测试类: ApplicationContext context=new ClassPathXmlApp ...
- sql 语句中 order by 的用法
order by 是用在where条件之后,用来对查询结果进行排序 order by 字段名 asc/desc asc 表示升序(默认为asc,可以省略) desc表示降序 order by 无法用于 ...
- JavaWeb_(Hibernate框架)Hibernate中事务
Hibernate中事务 事务的性质 事物的隔离级别 配置事务的隔离级别 事务的性质 原子性:原子,不可再分,一个操作不能分为更小的操作,要么全都执行,要么全不执行. 一致性:事务在完成时,必须使得所 ...