在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC。这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上。
出于显而易见的原因,NVIDIA在大力推广和支持OpenACC。但事实上PGI和Cray才是最早推动这项技术商业化的公司。PGI已经推出了一组非常类似的加速器指令,目前也成为了OpenACC标准的基础部分之一。Cray公司正在开发自己的OpenACC编译器,并且他的XK6客户如橡树岭国家实验室和瑞士国家超级计算机中心,预计将成为该技术的第一批超级计算机用户。
简而言之,OpenACC指令与OpenMP指令工作方式很类似,但前者特别适用于高度数据并行代码。它们可插入标准的C,C + +和Fortran程序直接指导编译器进行某些代码段的并行。编译器会特别注意数据在CPU和GPU(或其他)之间来回转移的逻辑关系,并将计算映射到适当的处理器上。
这样,开发人员就可以在现存的或者新的代码上做相对小的改动以标示出加速并行区域。由于指令设计适用于一个通用并行处理器,这样相同的代码可以运行在多核CPU、GPU或任何编译器支持的其他类型的并行硬件上。这种硬件的独立性对于HPC的用户来说特别重要,因为他们不愿意接受那种受供应商限制的,非便携式编程环境。
站在NVIDIA的角度,目标就是将GPU计算带入后CUDA时代。今天,CUDA C和CUDA Fortran广泛用于GPU编程。但是这个底层技术属于NVIDIA,对于GPU计算提供了一个相对低阶的软件模型,因此想较于对一般编程人员或者研究人员,CUDA的使用对于计算科学类型而言受限制程度越来越明显。
受NVIDIA、AMD等支持的OpenCL同样也提供了GPU和其他加速器的并行编程框架。与CUDA不一样的是,OpenCL是个真正开放的标准。 但与CUDA相似的是,OpenCL相对底层,需要对目标处理器的内部结构有一定了解。因此与CUDA一样,使用OpenCL对于计算机科学家来说有很大的局限性。
NVIDIA公司估计这个星球上有超过10万的CUDA程序员和比较多的的OpenCL开发人员,但他们也意识到如果能够使GPU编程更加开放且开发界面更加友好,就会有一个更大的潜在观众。从本质上讲,他们认为OpenACC将能够被数以百万计的科学家和研究人员使用,这些人不需要关心和涉足处理器架构,也不需要关心芯片与芯片之间通信。
NVIDIA的Tesla业务部门的首席技术官Steve Scott总结了OpenACC目标:“我们确实想在这一点上做到大幅提高适用性和人们利用GPU的广度和深度。”Scott表示作为高层OpenACC不会影响执行性能。这来自于他以前在Cray公司做首席技术官的经验,他遇到了基于加速器的指令代码只比手工CUDA编码的性能低5%到10%而已。据他介绍,这是相当典型的。Scott说,有些应用程序甚至做的比他们用CUDA编程要好,这受益于编译器在对某些代码进行优化的能力超越了凡人。在任何情况下,OpenACC的目的是要利用CUDA进行互操作,因此如果需要的话,可以手工调整内核,并与指令代码做无缝连接。
除了PGI和Cray公司,法国的多核软件工具的开发者CAPS公司,也签署了协议支持新的指令。这三家厂商预计在2012年上半年推出支持OpenACC的编译器。值得注意的是OpenACC支持者列表中缺少了英特尔和AMD,不过这也不会阻止PGI、CAPS或者Cray建立支持英特尔和AMD硬件的OpenACC编译器。
PGI和NVIDIA目前向开发人员推出了30天免费试用PGI的加速指令编译器。活动宣传说可以在四周之内将应用性能翻倍。上百位研究人员已经注册了申请试用,不过对于OpenACC的支持者来说真正终结这场游戏的是将指令纳入到OpenMP标准。因为OpenACC的一部分工作来源于OpenMP,所以就意味着这件事情发生的可能性很高,不过目前没有时间表,但最有可能结合的时间是在2012年某时OpenMP 4.0发布的时候。