基于opencl和计算着色器的异构系统通用计算对比.doc

上传人:bao****ty 文档编号:132384302 上传时间:2020-05-15 格式:DOC 页数:9 大小:145.50KB
返回 下载 相关 举报
基于opencl和计算着色器的异构系统通用计算对比.doc_第1页
第1页 / 共9页
基于opencl和计算着色器的异构系统通用计算对比.doc_第2页
第2页 / 共9页
基于opencl和计算着色器的异构系统通用计算对比.doc_第3页
第3页 / 共9页
基于opencl和计算着色器的异构系统通用计算对比.doc_第4页
第4页 / 共9页
基于opencl和计算着色器的异构系统通用计算对比.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《基于opencl和计算着色器的异构系统通用计算对比.doc》由会员分享,可在线阅读,更多相关《基于opencl和计算着色器的异构系统通用计算对比.doc(9页珍藏版)》请在金锄头文库上搜索。

1、基于OpenCL和计算着色器异构系统通用计算对比李伟斌, 王运巧, 陈少强北京航空航天大学机械工程及自动化学院,北京,100191摘要:图形处理单元GPU的高性价比吸引了越来越多的学者对其在通用计算方面的研究。OpenGL中的计算着色器和开放式计算语言OpenCL架构都可以实现通用计算,但在设计和性能上有着较大的不同。本文在对OpenCL架构模型和计算着色器实现通用计算的特点性能分析的基础上,通过性能优化策略,分别对其进行离散卷积算法的测试对比。对比计算结果表明,合理分配任务的前提下,数据越复杂,OpenCL并行计算能力优势越明显。关键词:OpenCL;通用计算;计算着色器;离散卷积Compa

2、rison on parallelcalculation of heterogeneoussystems between OpenCL andcompute shadersLi Weibin, Wang Yunqiao, Chen shaoqiang(School of Mechanical Engineering and Automation, Beihang University, Beijing 100191,china) Abstract: The perfect performance of GPU attracts more and more research of general

3、 calculation, both OpenGL compute shaders and the open computing language OpenCL can achieve general calculation. There is huge difference in design and performance between them. Through the analysis of the characteristics of OpenCL model and computer shaders,discreteconvolutionalgorithmtestson diff

4、erent images have beencompared. The comparison results show that the advantages of OpenCL parallel computing ability can be more obvious while the image data more complicated.Key words:OpenCL;General calculation;Compute shaders;Discreteconvolution0 引言通用计算即为用图形处理单元GPU来处理一些原本CPU可以处理的计算,早在20世纪60年代初它就引起

5、了开发人员的关注,特别是现代图形处理器(GPU),凭借其强大的计算能力和卓越的性价比,吸引了越来越多的对通用计算(GPGPU)的研究1,涉及到的领域广泛,有流体模拟2、视频检测3、序列比对4、蛋白质分子场、地质模型、神经网络训练等等。然而传统的通用计算主要依靠图形API,这给不熟悉图形应用的用户带来极大的不方便,为此,AMD和NVIDIA公司分别推出了各自的编程模型 Brook+ 和计算统一设备架构(CUDA)5,给编程带来了很好的灵活性,但是在程序可移植性方面,AMD GPU与NVIDIA GPU互不兼容。为充分发挥异构处理平台下各种设备的性能潜力,同时使得程序具备可移植性, 由苹果公司提议

6、,开放标准组织Khronos Group于2008年推出了开放式计算语言(open computing language, OpenCL)6。图形处理器潜在的计算能力可用于处理与图形无关的任务,为此,OpenGL引入了一种特殊的着色器:计算着色器,这种基于图形的API同样可以像OpenCL一样实现通用程序设计计算,但它对开发人员技能要求比较苛刻,不仅要熟知图形流水线和计算机图形学知识,而且实现通用算法设计时需要大量的技巧,本文主要以OpenCL架构和OpenGL的计算着色器为基础,分别设计算法进行测试,对比OpenCL和计算着色器在通用计算技术上性能的优劣,突出OpenCL的优越性。1 Ope

7、nCL框架及卷积计算的实现在计算机视觉和图像处理中,卷积算法有着至关重要的作用,它经常被用于模板匹配、边缘检测、图像滤波和图像定位等多方面领域。因此,本文通过对均值离散卷积的实现,比较OpenCL和计算着色器的性能。作为第一个面向异构系统通用目的并行编程的开放免费标准, OpenCL可以用四个模型来描述其任务并行机制:平台模型、运行模型、设备模型、编程模型7。其完成并行任务流程如图1所示:Bar程序主机Foo()Bar()Quz()Baz()FooFooBarQuzBaz设备0设备1设备2设备3命令队列图1 OpenCL框架模型1.1 平台模型OpenCL通过平台实现主机与设备间的交互操作,一

8、个主机(host)可以选择连接一个或几个设备用于负责接收其分发的任务和数据,这些设备可以是CPU、GPU或者ACCELERATOR等,本文的异构处理平台是CPU+GPU,因此选择的设备是GPU,每个设备包含若干个计算单元CU,每个CU进一步划分为若干处理单元PU,主机提交命令,设备上的计算单元负责执行计算,每个计算单元内所有的处理单元都会以单指令多数据SIMD 或单程序多数据SPMD模式运行一套相同的指令流。1.2 运行模型运行模型定义了内核的执行方式,当设备执行内核时,系统生成一个N维(1N3)的索引空间NDRange,从软件角度看,运行在PE上的内核实例称为工作项,全局ID唯一标识某个工作

9、项,处理相同资源的工作项可以看做是一个工作组,局部ID则标识工作项在工作组中的位置,一个给定工作组中的工作项被分配到单个CU的多个PE并发执行,本文采用处理不同像素大小的图像,对图像采用灰度处理,因此为了充分利用内存资源并达到最优计算效果,将维度数划分为2、工作组数为1,工作项数为图像宽和高的像素大小 。1.3 设备模型设备模型指定了执行内核的工作项和工作组可以访问的4块不同的内存区域,如图2所示,全局内存存储容量大,保存着整个设备的数据,主机和工作项都可以读写其中数据,但访问延迟较高;局部内存存储容量有限,保存着工作项的数据,但访问速度快,因此,工作项一般把内核执行结果放入其中,合理地利用局

10、部存储器,对于程序性能的提升非常重要。私有内存是一个工作项的私有存储区域,该区域中的数据对于其他工作项是不可见的。私有内存私有内存私有内存私有内存工作项工作项工作项工作项局部内存工作组局部内存工作组全局/常数内存主机内存图2 OpenCL 设备模型结构1.4 编程模型数据级并行和任务级并行是OpenCL编程模型的主要支持方式,同时,两者的混合也可以实现,但为充分发挥异构处理平台中设备的计算能力,OpenCL采用的首要模型是数据并行,任务并行主要是针对多核CPU。OpenCL的数据并行模式分为两种级别:显示模型和隐式模型,前者需要开发人员指定工作项总数并划分工作组;后者仅需开发人员指定工作项总数

11、。本文仅是处理不同像素的简单图像数据,并且是按照灰度格式读取图像数据,并不需要划分工作组,只需开发人员指定工作项即可,故只需采用隐式模型即可。1.5 CPU实现离散卷积离散卷积是计算机视觉、图像处理、数字信号等很多领域常用的算法,二维离散卷积公式如下其中:-输出矩阵;-输入矩阵;-掩膜或滤波器; 、是输入输出矩阵的坐标;、是滤波器的坐标;本文测试程序采用的是掩膜半径为2的均值滤波器,卷积可由下面程序实现:for(int i=0; iHeight; i+),for(int j=0; jWidth; j+)for(int k=0; kChannel; k+)for(int ii=i-Radius;

12、 ii=i+Radius; ii+)for(int jj=j-Radius; jj=0 & jj=0 & iiHeight & jjWidth)fSum += fXiijjk;Total+;fYijk = fSum/(float)Total;1.6 OpenCL实现离散卷积结合上述对OpenCL框架的深入探讨,内核执行程序和简要说明如下:#define Radius 2_kernel void simple_image(_global uchar* src_image, _global uchar* dst_image) /*工作项ID(图像像素)*/ int i = get_global_i

13、d(0); int j = get_global_id(1); int Width=get_global_size(0); int Height=get_global_size(1); int sum = 0, unTotal=0; /* 均值卷积*/ for(int jj=j-Radius;jj=j+Radius;jj+) for(int ii=i-Radius;ii=0 & jj=0 & iiWidth & jjHeight)sum += src_imagejj*Width+ii;/图像数据按数组处理 unTotal+;dst_imagej*Width+i=sum/unTotal;典型图像

14、卷积前后对比情况见图3。 a. 卷积处理之前 b. 卷积处理之后图3 图像卷积处理因为在计算过程中并不清楚图像的具体格式,在主机发送图形数据到设备时,PE元片执行内核只能按照数组来处理图像数据,否则执行过程中会严重损坏原图像格式,处理结束后,再由主机从设备上读回数据到主机上,2 计算着色器实现图像卷积计算着色器是OpenGL引入的一种特殊的可以用来处理与图像无关仅做通用计算的着色器,它可以认为只有一级的渲染管线,没有固定的输入输出,所有的默认的输入都是通过一组内置变量来传递的,需要额外的输入时,可以通过固定的输入输出来控制对纹理和缓冲的访问。计算着色器的执行过程和其它着色器非常相似,下面是实现均值卷积的计算着色器:#version 430 core#define Radius 2/*工作组大小*/layout (local_size_x=1, local_size_y=1, local_size_z=1) in;layout (std430, binding = 0) buffer BufferInput int imgInput;layout (std430, binding

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号