OpenACC

OpenACC应用编程接口1.0中文版

OpenACC编程标准介绍

OpenACC应用编程接口2.0中文版

版权所有:小小河

2007年以来,以nVidia GPU为代表的加速器并行计算风起云涌,带有加速器的超级计算机在TOP500中的份额逐年增加,支持加速器的主流应用软件也呈爆炸式增长,研究加速器计算的技术人员数以百万计,世界范围内的大学、研究机构竞相开设相关课程。

目前有三家厂商提供加速器产品:nVidia GPU、AMD GPU、Intel至强Phi协处理器。三种加速器使用的编程语言分别为CUDA C/CUDA Fortran、OpenCL和MIC导语。加速器计算有四个技术困难:一是CUDA/OpenCL等低级语言编程难度大,且需要深入了解加速器的硬件结构。而大部分的用户不是专业编程人员,学习一门新的编程技术将耗费大量时间、人力、财力。二是加速器的计算模型与CPU差别很大,移植旧程序需要几乎完全重写。大量的旧程序在性能优化上已经千锤百炼,稳定性上也久经考验,完全重写是不可完成的任务。三是低级编程语言开发的程序与硬件结构密切相关,硬件升级时必须升级软件,否则将损失性能。而硬件每隔两三年就升级一次,频繁的软件升级将给用户带来巨大负担。四是投资方向难以选择。三种加速器均有自己独特的编程语言,且互不兼容。用户在投资建设硬件平台、选择软件开发语言时就会陷入困境,不知三种设备中哪个会在将来胜出。如果所选加速器将来落败,将会带来巨大损失;而犹豫不决又将错过技术变革的历史机遇。

OpenACC可以克服这四个困难。OpenACC应用编程接口的机制是,编译器根据作者的意图自动产生低级语言代码。程序员只需要在原程序中添加少量导语,无须学习新的编程语言和加速器硬件知识,可以迅速掌握。只在原始程序上添加少量导语,不破坏原代码,开发速度快,既可并行执行又可恢复串行执行。在硬件更新时,重新编译一次代码即可,不必手工修改代码。OpenACC标准制定时就考虑了目前及将来的多种加速器产品,同一份代码可以在多种加速器设备上编译、运行,零代价切换硬件平台。

本文档将directive翻译为导语,将clause翻译为子语,将construct翻译为构件。directive的作用是给编译器一些指导,指出哪些代码需要并行化、需要怎么并行化,编译器根据程序员的指导信息生成最佳的并行化代码。有人将directive翻译为编译制导语句、编译指导语句、指令语、指令等,意思都对,但编译制导语句、编译指导语句太长,使用不便,指令语、指令中的指令一词太普通,易混,且只有强制的含义,没有指导的含义,不太恰当。导语一词长度、意思都比较合适。clause是导语的修饰部分,更详细地表明导语的意图。有人将clause翻译为子句,而子句一词含有小句子的意思,实际上OpenACC中的clause都只有一个词,很短,不能称为一个句子。子语一词既说明了它与导语的关系,又有一个相同的语字,读起来顺口。construct翻译为构件,取自建筑名词,实际功能也很相像。

本人水平有限,错误疏漏在所难免,欢迎批评指正,感激不尽。原始英文版请到http://www.openacc.org/下载。本文档的最新版请到http://www.bytes.me/openacc/下载。联系译者请发送电子邮件至openacc@foxmail.com。

OpenACC技术交流QQ群:284876008,欢迎加入,共同进步。

 

 

 

 

 

 

 

发表评论

电子邮件地址不会被公开。

验证图片

*