关于CPU+GPU异构计算模式程序开发中编程方法研究
作者: 石林摘 要:与传统的单纯以CPU作为计算部位的同构计算系统相比,CPU+GPU异构计算模式程序优势更加明显,本文主要研究CPU+GPU异构计算模式程序开发中编程方法,总结各种方法的优缺点,希望能为相关人员带来一些帮助。
关键词:异构计算; 编程; CPU; GPU
中图分类号:TP391.41 文献标识码:A 文章编号:1006-3315(2014)10-149-001
CPU+GPU协同计算是异构计算的一种,在处理大量的数据中,仅仅使用CPU太过繁琐,异构计算能够极大的提高系统速度,目前CPU+GPU是国内外高性能计算领域的热点研究话题,目前在程序开发中存在不少的难点,本文主要研究CPU+GPU异构计算模式开发中编程方法。
一、CPU+GPU异构计算编程方法概述
目前异构计算使用最多的是利用GPU来加速,基于CPU+GPU的异构计算系统是指计算机系统中配合使用CPU+GPU共同承担计算任务,优势非常明显。采用GPU能够更加快速完成任务,如在浮点运算功能中,GPU的能力要远远高于CPU。GPU的应用领域从图形处理逐渐向通用计算机发展。当前单纯采用CPU来搭建计算机系统遇到了功耗、扩展性能等问题,而采用CPU+GPU能够很好的解决这些问题。
虽然采用CPU+GPU的异构计算有很多的优点,但是在实际的应用中,异构计算面对着很多的问题需要解决。在这些问题中,表现最为明显的是程序开发遇到的问题,主要是因为GPU在设计中最开始是用于专业图形处理领域,而不是计算领域中,这就导致了GPU本身的体系框架与计算机的硬件不太实用,出现数据传输限制等问题,因此在使用中必须专门考虑这些问题。另外目前关于GPU软件开发方面很多技术还不够成熟,虽然目前的一些计算机统一设备架构降低了开发难度,但是在处理以往应用中的大量遗留代码方面仍然是一个问题。目前关于异构计算的标准开发计算语言还不够成熟,CPU+GPU异构计算系统应用还存在不少的问题。
二、CPU+GPU异构计算程序开发方法
目前在CPU+GPU异构计算程序开发计算中,程序开发方法主要包括低层次抽象的轻量级GPU编程工具开发方法、高层次抽象的函数库等方法,下文将会详细讲述这几个开发方法的优缺点。
1.底层图形API的异构计算程序开发方法
这种方法是最早采用GPU的一种主要方法,目前仍然在使用,这种开发方法要求开法阵非常熟悉底层图形API,在编程中采用的语言一般为图形库着色语言。早期的GPU产品基本都是采用分离渲染架构,可编程能力非常差。
自21世纪开始,随着GeForce3的出现,顶点可编程得到普及,这种编程逐渐使用在异构计算程序开发中,人们开始采用纹理着色+寄存器组合器的方法,然后采用像素级可编程性,通过底层图形API提供可控制能力,最常见的图形API包括OpenGL和DirectX,其中DirectX主要是作为微软视窗来使用,OpenGL是被广泛接受的一种。这种方法目前仍然在使用,在新的CPU产品上执行效率会存在很大的不足。
2.采用低层次抽象的轻量级编程工具的异构计算程序开发方法
CUPA在GPU中主要是作为数据并行计算设备的软硬件体系,是一个完整的图形处理器,提供一个硬件的直接访问接口,保证GPU无需采用图形API就能实现访问,编程语言采用的是C语言,能够提供计算指令开发能力,建立高效的密集数据计算方法,适合使用在CPU等类型架构中。CUDA是一种开放标准,能够为CPU和GPU提供异构群进行编程,不需要再采用映射到底层图形API的方法,操作更加简单。
3.高层次抽象的编译器的异构计算程序开发方法
这种方法是通过使用指示语句、编译器自动生产GPU内核程序的一种方式。GPU编译器引进一种语句来指示代码在进行执行,所采用的HMPP处理语言是一种基于标签语法的语言程序,利用HMPP能够保证软硬件的独立,同时具有CUDA和OpenCL代码生成器,改进硬件加速程序段。代码生成器从原来的C程序提取并行化的部分,转化为CUPA代码,不需要重新编写程序。针对采用少量专业领域算法的应用程序,这是一种比较好的开发方法,影响性能的关键在于少量程序段,能够获得最大的加速效果,但是在使用中一般不适合使用在遗留代码较多的场所。
除了以上几种开发方法之外,还有基于高层抽象的函数库的开发方法,提供广泛使用快速极端离散相似的接口,不能直接取代,需要先进行封装后才能代替程序中的函数,方便使用在简单的矩阵计算中。管理多个GPU设备可以采用OpenMPa技术,管理CPU+GPU异构系统可以采用MPI或者是Charm++技术。
综上所述,本文主要研究CPU+GPU异构计算模式程序开发中编程方法,总结各种方法的优缺点,目前关于研究CPU+GPU异构计算研究非常快速,随着编程方法研究的不断成熟,CPU+GPU异构计算将会发挥出更大的作用。
参考文献:
[1]王伟,郭绍忠,王磊,等.一种基于CPU-GPU异构计算的混合编程模型[J]信息工程大学学报,2010,1(06):674-678.
[2]卢风顺,宋君强,银福康,等.CPU/GPU协同并行计算研究综述[J]计算机科学,2011,11(03):5-9+46.
[3]冯颖,袁庆华,沈健炜.基于CPU+GPU异构计算的编程方法研究[J]通信技术,2011,21(02):141-143