论文部分内容阅读
【摘要】 随着半导体技术的发展,在高性能计算领域中异构众核系统的设计已经成为技术发展的趋势和学术研究的热点。随之而来的基于异构系统上的编程,主要面临以下几个方面的挑战:第一方面就是针对异构平台同时在CPU+GPU上编程复杂;第二就是针对异构平台的移植性。原有的编程模型(CILK、OpenMP、CUDA)都是针对特定平台的,可移植性比较差。那么针对异构平台的编程模型随之产生。本文针对PGI等公司提出的异构平台的编程模型openACC进行分析与研究。
【关键词】 异构众核系统 异构编程模型 GPU openACC[1]
随着硬件技术的发展,在高性能计算领域中从单核到多核的发展,但由于功耗、互连、设计复杂度三方面因素的限制,性能并不能通过增加计算核心数带来提升,众核设计就成为技术发展的趋势和学术研究的热点。目前面向高性能的众核处理器分为同构加速器的方式和异构加速器的方式。同构加速器如:Intel MIC/Xeon Phi众核协处理器;nVIDIA公司自家GPU架构General Purpose computing on graphics Processing Units GPGPU平台。异构加速器,2016年6月份第47届全球顶级超级计算机TOP500榜单中位于榜首的Sunway TaihuLight - Sunway MPP, Sunway SW26010 260C 便是异构众核处理器结构。第二名的天河2 号结合Intel Ivy Bridge 多核处理器和Intel Xeon Phi 众核协处理器的混合架构。
为了解决异构编程带来的复杂性和移植性的问题,异构平台上的编程模型已经被广泛的使用和优化。如:PGI公司等提出的openACC;Khronos Group宣布成立GPU通用计算开放行业标准工作组,以苹果的提案为基础创立OpenCL行业规范;微软Visual Studio和C++编程语言的新扩展C++ AMP等都是异构平台的并行编程模型[2]。本文首先针对异构平台面临得挑战做简要描述,分别分析和研究OpenACC异构并行编程模型,总结未来异构编程模型的发展。
一、异构平台面临的挑战
CPU-GPU异构众核系统与同构系统相比在编程方面面临着一些问题。第一,GPU之间的通信、CPU与GPU之间的通信、GPU存储空间的管理都是用户负责的;第二,可移植性差,由于第一种描述的,CPU-GPU之间的通信都是用户负责的,而异构平台具有不同的硬件架构、编程模型、cache大小等,代码移植比较复杂,及时移植后,很难达到高性能,需要深入了解新的异构平台特点,针对性的重新进行性能优化。第三,GPU的代码的调试比较困难,多个线程间是异步执行的,产生的错误或者异常是很难复现的,导致错误或者异常很难被定位,只有通过逻辑判断,或者打印输出等辅助调试。
二、OpenACC编程模型
PGI公司等提出的OpenACC克服了上一章节中提到的异构平台面临的挑战,编程简单,在串行代码上增加几句编程制导就实现了并行化,再经过异构平台特点和串行程序的特点进行性能调优,就可以实现程序的并行化。更新硬件时,需要手工改动的代码仅仅是编译和运行的MAKEFILE文件,代码的手工改动量是很小的。
2.1 OpenACC的执行模型
OpenACC的执行模型是host指导加速设备的运行,形成协作的一种执行模型。在大型程序执行过程中,串行部分是host执行,当出现热点函数的计算时,在host控制下热点函数交给加速设备执行。热点函数在加速设备上的执行过程:在加速设备上分配私有数据空间并加载热点函数代码;将所需的数据从MMEM加载到加速器的私有数据空间中,加速设备进行执行,并将结果从加速设备的数据空间传输到MMEM中;释放掉加速设备上申请的数据空间。
2.2 OpenACC的存储模型
在同构系统上,CPU的片内存储模式是软件cache结构;片外存储模式则是同享的模式。因此数据只能分配在片外存储中,且数据是同享的,并不需要显示的进行CPU和加速设备之间的通信。而在异构系统中,数据可分配在CPU或者加速设备的局部存储的多个位置,数据的分配和管理起来比较复杂,加速设备间的通信是通过直接内存访问(Direct Memory Access)的方式由程序员进行显示的调用才能实现。
2.3 OpenACC指令语法
OpenACC指令语法包括:加速计算构件、循环映射构件、组合编译、加速数据区构件、同步和执行导语、加速编译指示的子句等。下面以c代码为例简单介绍OpenACC指令语法。
Fortran语言编译指示格式如下:(!$acc间不能有其它字符,其它类似)
!$acc directive-name [clause[ [,] clause]...] new-line
c$acc directive-name [clause[ [,] clause]...] new-line
*$acc directive-name [clause[ [,] clause]...] new-line
三、未来异构编程模型的发展
异构编程模型是否能提供更加高效的性能优化,程序在异构平台上并行性的研究的最终目的是想达到高效的性能加速。而现有的异构编程模型提供的构件仍然需要程序员了解异构的架构,硬件特征,才能达到想要达到的性能优化,那么,根据不同的硬件细节设置不同的编程导语,便成为未来研究的一个方向。
参 考 文 献
[1]OpenAcc: Directives for Accelerators. 2013. http://www.openacc-standard.org/
[2]王文義,王晗. 基于多核与众核结构的并行编程模型研究[J].中原工学院报,2014,03:52-56.
【关键词】 异构众核系统 异构编程模型 GPU openACC[1]
随着硬件技术的发展,在高性能计算领域中从单核到多核的发展,但由于功耗、互连、设计复杂度三方面因素的限制,性能并不能通过增加计算核心数带来提升,众核设计就成为技术发展的趋势和学术研究的热点。目前面向高性能的众核处理器分为同构加速器的方式和异构加速器的方式。同构加速器如:Intel MIC/Xeon Phi众核协处理器;nVIDIA公司自家GPU架构General Purpose computing on graphics Processing Units GPGPU平台。异构加速器,2016年6月份第47届全球顶级超级计算机TOP500榜单中位于榜首的Sunway TaihuLight - Sunway MPP, Sunway SW26010 260C 便是异构众核处理器结构。第二名的天河2 号结合Intel Ivy Bridge 多核处理器和Intel Xeon Phi 众核协处理器的混合架构。
为了解决异构编程带来的复杂性和移植性的问题,异构平台上的编程模型已经被广泛的使用和优化。如:PGI公司等提出的openACC;Khronos Group宣布成立GPU通用计算开放行业标准工作组,以苹果的提案为基础创立OpenCL行业规范;微软Visual Studio和C++编程语言的新扩展C++ AMP等都是异构平台的并行编程模型[2]。本文首先针对异构平台面临得挑战做简要描述,分别分析和研究OpenACC异构并行编程模型,总结未来异构编程模型的发展。
一、异构平台面临的挑战
CPU-GPU异构众核系统与同构系统相比在编程方面面临着一些问题。第一,GPU之间的通信、CPU与GPU之间的通信、GPU存储空间的管理都是用户负责的;第二,可移植性差,由于第一种描述的,CPU-GPU之间的通信都是用户负责的,而异构平台具有不同的硬件架构、编程模型、cache大小等,代码移植比较复杂,及时移植后,很难达到高性能,需要深入了解新的异构平台特点,针对性的重新进行性能优化。第三,GPU的代码的调试比较困难,多个线程间是异步执行的,产生的错误或者异常是很难复现的,导致错误或者异常很难被定位,只有通过逻辑判断,或者打印输出等辅助调试。
二、OpenACC编程模型
PGI公司等提出的OpenACC克服了上一章节中提到的异构平台面临的挑战,编程简单,在串行代码上增加几句编程制导就实现了并行化,再经过异构平台特点和串行程序的特点进行性能调优,就可以实现程序的并行化。更新硬件时,需要手工改动的代码仅仅是编译和运行的MAKEFILE文件,代码的手工改动量是很小的。
2.1 OpenACC的执行模型
OpenACC的执行模型是host指导加速设备的运行,形成协作的一种执行模型。在大型程序执行过程中,串行部分是host执行,当出现热点函数的计算时,在host控制下热点函数交给加速设备执行。热点函数在加速设备上的执行过程:在加速设备上分配私有数据空间并加载热点函数代码;将所需的数据从MMEM加载到加速器的私有数据空间中,加速设备进行执行,并将结果从加速设备的数据空间传输到MMEM中;释放掉加速设备上申请的数据空间。
2.2 OpenACC的存储模型
在同构系统上,CPU的片内存储模式是软件cache结构;片外存储模式则是同享的模式。因此数据只能分配在片外存储中,且数据是同享的,并不需要显示的进行CPU和加速设备之间的通信。而在异构系统中,数据可分配在CPU或者加速设备的局部存储的多个位置,数据的分配和管理起来比较复杂,加速设备间的通信是通过直接内存访问(Direct Memory Access)的方式由程序员进行显示的调用才能实现。
2.3 OpenACC指令语法
OpenACC指令语法包括:加速计算构件、循环映射构件、组合编译、加速数据区构件、同步和执行导语、加速编译指示的子句等。下面以c代码为例简单介绍OpenACC指令语法。
Fortran语言编译指示格式如下:(!$acc间不能有其它字符,其它类似)
!$acc directive-name [clause[ [,] clause]...] new-line
c$acc directive-name [clause[ [,] clause]...] new-line
*$acc directive-name [clause[ [,] clause]...] new-line
三、未来异构编程模型的发展
异构编程模型是否能提供更加高效的性能优化,程序在异构平台上并行性的研究的最终目的是想达到高效的性能加速。而现有的异构编程模型提供的构件仍然需要程序员了解异构的架构,硬件特征,才能达到想要达到的性能优化,那么,根据不同的硬件细节设置不同的编程导语,便成为未来研究的一个方向。
参 考 文 献
[1]OpenAcc: Directives for Accelerators. 2013. http://www.openacc-standard.org/
[2]王文義,王晗. 基于多核与众核结构的并行编程模型研究[J].中原工学院报,2014,03:52-56.