随笔分类 -  OpenCL

OpenCL编程
AMD OpenCL大学课程(4)
摘要:Kernel对象: Kernel就是在程序代码中的一个函数,这个函数能在OpenCL设备上执行。一个Kernel对象就是kernel函数以及其相关的输入参数。 Kernel对象通过程序对象以及指定的函数名字创建。注意:函数必须是程序源代码中存在的函数。 运行时编译: 在运行时,编译程序和创建kernel对象是有时间开销的,但这样比较灵活,能够适应不同的OpenCL硬件平台。... 阅读全文

posted @ 2012-01-30 21:00 迈克老狼2012 阅读(3693) 评论(0) 推荐(1) 编辑

AMD OpenCL大学课程(3)
摘要:OpenCL内存对象: OpenCL内存对象就是一些OpenCL数据,这些数据一般在设备内存中,能够被拷入也能够被拷出。OpenCL内存对象包括buffer对象和image对象。 buffer对象:连续的内存块----顺序存储,能够通过指针、行列式等直接访问。 image对象:是2维或3维的内存对象,只能通过read_image() 或 write_image()来读取。imag... 阅读全文

posted @ 2012-01-30 20:36 迈克老狼2012 阅读(4321) 评论(2) 推荐(1) 编辑

AMD OpenCL大学课程(2)
摘要:1、OpenCL架构 OpenCL可以实现混合设备的并行计算,这些设备包括CPU,GPU,以及其它处理器,比如Cell处理器,DSP等。使用OpenCL编程,可以实现可移植的并行加速代码。[但由于各个OpenCL device不同的硬件性能,可能对于程序的优化还要考虑具体的硬件特性]。 通常OpenCL架构包括四个部分: 平台模型(Platform Model) ... 阅读全文

posted @ 2012-01-30 20:28 迈克老狼2012 阅读(5606) 评论(1) 推荐(0) 编辑

AMD OpenCL 大学课程(1)
摘要:AMD OpenCL大学课程是非常好的入门级OpenCL教程,通过看教程中的PPT,我们能够很快的了解OpenCL机制以及编程方法。下载地址:http://developer.amd.com/zones/OpenCLZone/universities/Pages/default.aspx教程中的英文很简单,我相信学OpenCL的人都能看得懂,而且看原汁原味的英文表述,更有利于我们了解各种术语... 阅读全文

posted @ 2012-01-30 19:21 迈克老狼2012 阅读(10429) 评论(7) 推荐(3) 编辑

OpenCL memory object 之选择传输path
摘要:对应用程序来说,选择合适的memory object传输path可以有效提高程序性能。下面先看一写buffer bandwidth的例子:1. clEnqueueWriteBuffer()以及clEnqueueReadBuffer() 如果应用程序已经通过malloc 或者mmap分配内存,CL_MEM_USE_HOST_PTR是个理想的选择。有两种使用这种方式的方法:第一种:a. pinnedBuffer = clCreateBuffer( CL_MEM_ALLOC_HOST_PTR or CL_MEM_USE_HOST_PTR ) b. deviceBuffer = clCreateBuf 阅读全文

posted @ 2011-12-18 18:32 迈克老狼2012 阅读(5861) 评论(1) 推荐(1) 编辑

OpenCL memory object 之 传输优化
摘要:首先我们了解一些优化时候的术语及其定义:1、deferred allocation(延迟分配), 在第一次使用memory object传输数据时,runtime才对memory object真正分配空间。 这样减少了资源浪费,但第一次使用时要慢一些[一个context多个设备,一个memory object多个location,见前面的blog]。2.peak interconntect bandwith(峰值内联带宽) host和device之间通过PCIE总线传输数据,PCIE2.0的上行、下行带宽都是8Gb/s, 对于我们的程序,能达到3Gb/s就不错了,我的笔记本测试只有1.2Gb/ 阅读全文

posted @ 2011-12-18 13:52 迈克老狼2012 阅读(3554) 评论(2) 推荐(1) 编辑

OpenCL memory object 之 Global memory (2)
摘要:当我们用clCreateBuffer, clCreateImage创建OpenCL memory object时候,我们需要输入一个flag参数,这个参数决定memory object的位置。 cl_mem clCreateBuffer (cl_context context, cl_m... 阅读全文

posted @ 2011-12-18 08:45 迈克老狼2012 阅读(3960) 评论(0) 推荐(1) 编辑

OpenCL memory object 之 Global memory (1)
摘要:这篇日志是学习AMD OpenCL文档时候的总结。 OpenCL用memory object在host和device之间传输数据,memory object由runtime(运行库,driver的一部分)来管理。 OpenCL中的内存对象包括buffer以及image,buffer是一维数据元素的集合。image主要用来存储一维、二维、三维图像、纹理或者framebuffer... 阅读全文

posted @ 2011-12-17 18:02 迈克老狼2012 阅读(2883) 评论(0) 推荐(2) 编辑

AMD 5XXX 系列显卡的 peak bandwidth计算
摘要:在ATI Stream Computing Programming Guide中,例举了AMD 5系列显卡的参数信息。 我比较关注其中Peak bandwidths的计算,以便在opencl程序测试bandwidth利用率。 下面,我以5870为例,探讨一下如何计算得到这些结果: L1 cache的 peak bandwidth(L1<=>ALU) = compute units... 阅读全文

posted @ 2011-12-16 20:40 迈克老狼2012 阅读(1742) 评论(0) 推荐(0) 编辑

基于OpenCL的mean filter性能
摘要:1.对于一个标准的3*3 均值滤波,kernel代码如下: 使用buffer/image缓冲对象 __kernel void filter(__global uchar4* inputImage, __global uchar4* outputImage, uint N){ int x = get_global_id(0); int y = get_global_id(1); int w... 阅读全文

posted @ 2011-12-16 19:22 迈克老狼2012 阅读(2226) 评论(0) 推荐(0) 编辑

导航