#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( 一)的更多相关文章

  1. 基于SoCkit的opencl实验1-基础例程

    基于SoCkit的opencl实验1-基础例程 准备软硬件 Arrow SoCkit Board 4GB or larger microSD Card Quartus II v14.1 SoCEDS ...

  2. OPenCL

    OpenCLhttp://baike.baidu.com/link?url=7uHWCVUYB3Sau_xh3OOKP-A08_IvmT1SJixdAXKezCuCfkzeSQDiSmesGyVGk8 ...

  3. Opencl 并行求和

    上周尝试用opencl求极大值,在网上查到大多是求和,所谓的reduction算法.不过思路是一样的. CPP: ; unsigned ; ; ; int nGroup = nGroupSize / ...

  4. opencl初体验

    总结一下,opencl的步骤差不多是这些 先要获取平台的id clGetPlatformIDs(nPlatforms, platform_id, &num_of_platforms) 然后获取 ...

  5. Altera OpenCL用于计算机领域的13个经典案例(转)

    英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...

  6. 面向OPENCL的ALTERA SDK

    面向OPENCL的ALTERA SDK 使用面向开放计算语言 (OpenCL™) 的 Altera® SDK,用户可以抽象出传统的硬件 FPGA 开发流程,采用更快.更高层面的软件开发流程.在基于 x ...

  7. OpenCV GPU CUDA OpenCL 配置

    首先,正确安装OpenCV,并且通过测试. 我理解GPU的环境配置由3个主要步骤构成. 1. 生成关联文件,即makefile或工程文件 2. 编译生成与使用硬件相关的库文件,包括动态.静态库文件. ...

  8. CUDA/OpenCL 学习资料

    VS2010 NVIDIA OpenCL 开发环境配置 CUDA 在线课程 [经典培训] 全球首套中文CUDA 教程-胡文美教授主讲

  9. opencl 学习资源

    1.AMD  opencl-optimization-guide http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated ...

  10. opencl gauss filter优化(三)

    1.根据前两次的最终结果: 使用普通buffer,Horizontal 5ms, Vertical 17 ms 使用image buffer:Horizontal 9.4ms, Vertical 6. ...

随机推荐

  1. ASP.NET Core: Getting Started with ASP.NET MVC Core

    1. ASP.NET Core the Unified Framework ASP.NET Core的统一框架 2. New Solution Project 新的解决方案项目 src folder: ...

  2. HTML5 <canvas> 基础学习

    HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形 创建一个画布( ...

  3. ECStore图片存储采用阿里云OSS(图片存储)服务

    主要功能:ECStore图片存储采用阿里云OSS(图片存储)服务   适用版本:ECStore 授权方式:授权域名使用,付费插件 联系方式: QQ 275553385  mail: jimingson ...

  4. asp.net——初识多线程

    1.首先讲解一下什么是线程(该定义是参考线程的百度百科) 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针( ...

  5. HDU 5904 LCIS

    $dp$. 这题的突破口在于要求数字是连续的. 可以分别记录两个串以某个数字为结尾的最长上升长度,然后枚举一下以哪个数字为结尾就可以得到答案了. 因为$case$有点多,不能每次$memset$,额外 ...

  6. CodeForces 675D Tree Construction

    递归,$RMQ$. 因为$n$较大,可以采用递归建树的策略. 对每一个点标一个$id$.然后按照$v$从小到大排序,每一段$[L,R]$的根节点就是$id$最小的那个. 因为二叉搜索树可能是一条链,所 ...

  7. MySQL之索引优化

    很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句.这类SQL语句性能不好的首要原因是缺乏高效的索引.没有索引除了导致语句本身运行速度慢外,更是导致大量的磁盘读写操作, ...

  8. 特性(Attributes)

    用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体相关联后,即可在运行时用反射技术查询特性. 例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该 ...

  9. 关于ios原声嵌入web页面的问题

    当在一个界面中既有原生又有web的时候,如果想让上下整体滑动的话,我们怎么确定web的高度呢,下面分享一下我的心得 首先在webView的代理方法中我们可以获取到加载完整个web页面的高度 - (vo ...

  10. (从零开始java开发) IDEA+MAVEN构建一个webapp骨架项目(解决一直downloading问题)

    折腾了一段时间终于解决了, 可能是因为网络问题 xml一直没法访问 maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示 ...