OpenCL( 一)
#include <CL/cl.h>
#include <iostream>
#include <string>
#include <fstream>
#pragma comment(lib, "OpenCL.lib")
const char * loadfile(const char * fileName)
{
std::ifstream fs(fileName, std::ios::binary);
fs.seekg(, std::ios::end); int size = fs.tellg();
char * data = new char[size + ];
fs.seekg();
fs.read(data, size);
fs.close();
data[size] = ;
return data;
} int main()
{
cl_platform_id platform;
clGetPlatformIDs(, &platform, NULL); cl_device_id device;
clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, , &device, NULL); cl_context context = clCreateContext(NULL, , &device, NULL, NULL, NULL);
cl_command_queue queue = clCreateCommandQueue(context, device, , NULL); const char * clSourceFile = loadfile("H:/QtTool/build/TritonRayTracing/kernel.txt");
cl_program program = clCreateProgramWithSource(context, , &clSourceFile, NULL, NULL);
cl_int result = clBuildProgram(program, , &device, NULL, NULL, NULL);
if (result)
{
std::cout << "Error buring compilation" << std::endl;
}
cl_kernel kernel = clCreateKernel(program, "main", NULL);
cl_mem output = clCreateBuffer(context, CL_MEM_WRITE_ONLY, * sizeof(cl_int), NULL, );
cl_mem buffer1 = clCreateBuffer(context, CL_MEM_READ_WRITE, * sizeof(cl_int), NULL, );
cl_mem buffer2 = clCreateBuffer(context, CL_MEM_READ_WRITE, * sizeof(cl_int), NULL, );
clSetKernelArg(kernel, , sizeof(output), (void *)&output);
clSetKernelArg(kernel, , sizeof(buffer1), (void *)&buffer1);
clSetKernelArg(kernel, , sizeof(buffer2), (void *)&buffer2);
cl_int * buffer1Ptr = (cl_int *)clEnqueueMapBuffer(queue,
buffer1,
CL_TRUE,
CL_MAP_WRITE,
,
* sizeof(cl_int),
, NULL, NULL, NULL);
cl_int * buffer2Ptr = (cl_int *)clEnqueueMapBuffer(queue,
buffer2,
CL_TRUE,
CL_MAP_WRITE,
,
* sizeof(cl_int),
, NULL, NULL, NULL);
for (int i = ; i < ; ++i)
{
buffer1Ptr[i] = i;
buffer2Ptr[i] = i;
}
clEnqueueUnmapMemObject(queue, buffer1, buffer1Ptr, , , );
clEnqueueUnmapMemObject(queue, buffer2, buffer2Ptr, , , );
size_t global_work_size = ;
clEnqueueNDRangeKernel(queue,
kernel,
,
NULL,
&global_work_size,
NULL, , NULL, NULL);
cl_int * resultBufferPtr = (cl_int *)clEnqueueMapBuffer(queue,
output,
CL_TRUE,
CL_MAP_READ,
,
* sizeof(cl_int),
, NULL, NULL, NULL);
for (int i = ; i < ; i++)
{
std::cout << "ptr[" << i << "] = " << resultBufferPtr[i] << std::endl;
}
return ;
}
OpenCL( 一)的更多相关文章
- 基于SoCkit的opencl实验1-基础例程
基于SoCkit的opencl实验1-基础例程 准备软硬件 Arrow SoCkit Board 4GB or larger microSD Card Quartus II v14.1 SoCEDS ...
- OPenCL
OpenCLhttp://baike.baidu.com/link?url=7uHWCVUYB3Sau_xh3OOKP-A08_IvmT1SJixdAXKezCuCfkzeSQDiSmesGyVGk8 ...
- Opencl 并行求和
上周尝试用opencl求极大值,在网上查到大多是求和,所谓的reduction算法.不过思路是一样的. CPP: ; unsigned ; ; ; int nGroup = nGroupSize / ...
- opencl初体验
总结一下,opencl的步骤差不多是这些 先要获取平台的id clGetPlatformIDs(nPlatforms, platform_id, &num_of_platforms) 然后获取 ...
- Altera OpenCL用于计算机领域的13个经典案例(转)
英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...
- 面向OPENCL的ALTERA SDK
面向OPENCL的ALTERA SDK 使用面向开放计算语言 (OpenCL™) 的 Altera® SDK,用户可以抽象出传统的硬件 FPGA 开发流程,采用更快.更高层面的软件开发流程.在基于 x ...
- OpenCV GPU CUDA OpenCL 配置
首先,正确安装OpenCV,并且通过测试. 我理解GPU的环境配置由3个主要步骤构成. 1. 生成关联文件,即makefile或工程文件 2. 编译生成与使用硬件相关的库文件,包括动态.静态库文件. ...
- CUDA/OpenCL 学习资料
VS2010 NVIDIA OpenCL 开发环境配置 CUDA 在线课程 [经典培训] 全球首套中文CUDA 教程-胡文美教授主讲
- opencl 学习资源
1.AMD opencl-optimization-guide http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated ...
- opencl gauss filter优化(三)
1.根据前两次的最终结果: 使用普通buffer,Horizontal 5ms, Vertical 17 ms 使用image buffer:Horizontal 9.4ms, Vertical 6. ...
随机推荐
- c#委托概念
委托的官方概念是:安全封装方法的类型. 百度百科的概念是,委托是个类,定义了方法的类型,使得方法可以作为另外一个方法的参数进行传递.使得程序具有很好的扩展性. 揉碎了讲一下这个概念: 张三要做三件事: ...
- hibernate、easyui、struts2整合
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- IOS 加载网络图片2
//1. NSData dataWithContentsOfURL // [self.icon setImage:[UIImage imageWithData:[NSData dataWithCont ...
- crontab 添加sh文件定时
(1)编写sh文件,比如/orcl/test/export.sh 编写crond文件 chmod 755 /orcl/test/* //复制所有权限 [root@postest test]# ...
- 安卓---Tabhost实现页面局部刷新--父页子页之间的传值
TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity:当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧. 我只写 ...
- onkeyup事件只能输入数字,字母,下划线
<input type="text" onkeyup="value=value.replace(/[\W]/g,'')"/>
- scala 访问权限详解
private/protected [包名/类名/this] 即可指定变量的作用域.(this代表只有当前实例(即对象)可以访问) 伴生类和伴生对象中的成员可以相互访问. class PackageO ...
- Scala Apply
class ApplyTest{ //一定要写(),不加括号就报错. def apply() = println("Into Spark!") def havaAtry(){ pr ...
- json 多重嵌套反序列化和序列化
namespace ConsoleApplication1 { class Program { static void Main(string[] args) ...
- 无法启动MYSQL服务”1067 进程意外终止”解决办法
原文:http://www.111cn.net/database/mysql/48888.htm 本文章主要是总结了各种导致mysql提示无法启动MYSQL服务"1067 进程意外终止& ...