HPCWire网站在 2008年12月刊登了一片关于开发者工具的文章Heterogeneous Compilers Ready for Takeoff ,主要讲GPGPU 平台上开发者工具的第二次浪潮,代表是PGI和CAPS的工具,可以让C和Fortran程序员利用GPU加速。作者认为第一次浪潮是以NVIDIA的 CUDA和AMD的Brook+为代表。这里不用去争论这两次浪潮的分界线是否合理,关键是看对于开发者工具来说又有什么新玩意,以及究竟新不新。
有很多应用(比如视频处理,信号处理,石油勘探软件等),GPU比CPU呈现更好的性能和可扩展性,但是为GPU编程并不容易。比如NVIDIA GeForce 8800包含128个处理器,可以同时运行1000多个线程,如何让开发者编程来更好的利用并行是个难题。NVIDIA设计了CUDA模型来简化GPU编 程,提高生产力,但是开发者仍然要熟悉GPU硬件的线程模型以及底层设备的管理。OpenCL 是苹果公司在 2008年提出的用于在异构平台上进行并行编程的开放标准,NVIDIA和AMD公司的GPU产品都提供了符合OpenCL标准的API。但是这些编程接 口仍然比较底层,目前一些新的语言对CUDA和OpenCL进行了高层抽象,以隐藏硬件底层细节。
PGI公司 开发工具面向的是 x86-NVIDIA异构计算平台,期望将开发者从GPU的硬件细节中解放出来。PGI提供了一套c和Fortran的编译指示符(pragmas)和运 行库,称之为加速器编程模型(Accelerator Programming Model ),编译器可以将程序中指示符区域的代码并行化并生成在加速器上(比如GPU)执行的代码,然后和程序中其它部分的CPU代码连接,生成一个可执行文件。 这些指示符可以控制代码区域、数据区域以及循环映射等,比如#pragma acc region表示代码区域将编译到加速器上运行。运行库中的函数可以获得系统的加速器信息以及绑定代码区域到特定的加速器上。其机制和OpenMP类似。
CAPS公司 是 一家多核软件开发工具和培训/资讯服务提供商,创业团队源自法国国家信息与自动化研究所(INRIA)。CAPS提供的开发工具也是利用编译指示符,称之 为HMPP (Heterogeneous Multicore Parallel Programming)。其产品的具体结构如图所示。CAPS提供的是一个整合的平台 ,其产品的核心是他们开发的面 向CUDA和OpenCL的数据级并行转换工具,
将HMPP指示符区域的程序代码转换为NVIDIA CUDA或者OpenCL代码(开发者也可以对生成的代码修改和调优),然后利用NVIDIA CUDA编译器或OpenCL编译器生成GPU上执行的代码,其余的程序代码用第三方的x86平台编译器(比如GCC、Open64、Intel compiler)编译。HMPP是底层的指示符,允许开发者优化CPU-GPU数据传输、同步/异步操作、数据预加载和设备管理等。CAPS公司与 PathScale公司合作共同推动HMPP模型作为混合编程的开放标准,吸引应用开发者和开发工具厂商标准化GPU编程模型。PathScale ENZO编译器已使用HMPP来支持NVIDIA GPU编程,主要针对高性能计算 中广泛使用的NVIDIA Tesla系列GPU,对Fermi系列GPU的支持正在进行中。目前ENZO编译器为测试版,PathScale正在加强编译优化能力,减小GPU寄存 器压力,隐藏访存延迟,减小流水线停顿,和提高指令调度。
PathScale是一家为64位x86平台提供高性能编译器的公司,其编译器代码基于Open64。PathScale公司CTO Christopher Bergström讲述了选择HMPP的背景 (信息源自HPCWire网站 )。最初PathScale想整合NVIDIA CUDA软件栈(编译器/运行时/设备驱动)来为异构系统提供开发工具,但是发现CUDA的代码生成和驱动没有为高性能计算进行足够的优化,开发者仍然需 要手工调优,并且CUDA中寄存器的使用模式是针对有所类型的GPU,这使得Tesla GPU丧失了一些特定的优化机会。由于PathScale不能修改CUDA,同时也认为OpenCL比较糟糕:(,他们决定为NVIDIA GPU开发面 向高性能计算的软件栈 。可是GPU ISA属于NVIDIA机密,开发者只能通过CUDA、OpenCL和DirectX等接口来操作GPU硬件。于是他们基于Linux Kernel中开源的NVIDIA显卡驱动Nouveau进行设计,着重加强高性能计算支持,并且雇佣了优秀的工程师,可以反向NVIDIA GPU ISA、寄存器细节和设备例外处理等。他们重写了GPU代码生成器、运行时和设备驱动,来提高存储管理、错误处理、安全性以及高性能计算性能。要注意 PathScale的ENZO编译器与CAPS的产品差异,CAPS编译器的方法是将带有HPMM指示符的C和Fortran程序转换为CUDA或 OpenCL代码,然后调用第三方的编译器处理,而 PathScale ENZO编译器完全使用自己的编译器(包括GPU代码生成器)、运行时和设备驱动。可以认为,PathScale ENZO编译器是CAPS产品在高性能计算领域的一个特定化。
更多精彩:www.icompiler.cn
本文介绍了面向异构多核系统,特别是GPU加速的开发工具,如PGI和CAPS公司的解决方案。PGI的加速器编程模型使用编译指示符简化GPU编程,而CAPS的HMPP模型通过数据级并行转换工具将代码转换为CUDA或OpenCL。文章还提到了PathScale公司的ENZO编译器,它使用HMPP支持NVIDIA GPU编程,特别针对高性能计算进行优化。
7148

被折叠的 条评论
为什么被折叠?



