在ISC(国际超算会议)上展现实力之前,OpenACC标准集团就已经宣布了其首个OpenPOWER工具,以及三个新增成员 - 伊利诺伊大学、 布鲁克海文国家实验室、以及石溪大学 。与此同时,OpenACC的技术主管Michael Wolfe,也和编者谈到,由于处理器(所有类型)数量的增长和内存管理问题变得愈加复杂,棘手的编译器挑战依然存在。

据Wolfe说,PGI OpenACC 编译器对于 OpenPOWER 的支持取得了稳定的进步,目前正处于非公开的beta测试阶段,正计划在八月开始公开beta测试。Wolfe也是PGI(NVIDIA)的一位编译器工程师。“它包含了相同的命令行,你可以得到一个应用,你可以复制所有的源,把所有文件生成一遍,只需要输入‘make’,它就会在新系统上进行构建了。”Wolfe说道。

OpenACC 是一种用于 并行计算 的、由 Cray, Nvidia 和 PGI开发的基于指令的编程标准。该标准的设计目的是简化 异构CPU/GPU 系统的并行计算。和在OpenMP中一样,程序员可以注释CC++ 和Fortran源代码 来标注应当被 编译器指令 和附加函数所加速的区域。就像OpenMP 4.0 和更高版本一样,代码均可被CPU 和GPU启动。

即将到来的、具有 OpenPOWER 功能的PGI OpenACC 编译器版本将具有以下特点:

与Linux/x86+Tesla平台上的PGI 编译器具有相同的特点

CUDA Fortran、OpenACC、OpenMP、CUDA C/C++ 主机编译器

整合了IBM优化版的 LLVM OpenPOWER代码产生器

一次写入,即可在任意地点编译和运行

 

“我们实现的方式就是使用PGI的前端和PGI优化器,并把它连接到LLVM 后端代码生成器。我们得到了IBM的支持,他们在LLVM 上、在代码生成器和库文件上做了很多工作。我们的很多工作就变得轻松了。”Wolfe说道。

目前这一代的IBM POWER芯片是POWER8+,蓝色巨人表示在2017年POWER9 也将准备就绪。Wolfe 预计OpenACC编译器应当不会有大的兼容问题。 

“微架构方面,我确定在门和布局还有逻辑设计上会有所不同,但是在指令集方面,我不知道会有多少不一样。一般来说,按惯例会增加一些新的指令。 Intel 可能会将SIMD (单指令多数据)寄存器的长度翻倍。我不知道IBM 会不会有这样的打算。”

“到时会有具备 CAPI 界面版本的POWER8 ,我们将可以利用 NVLINK 来进行工作,我认为这些在所有的POWER9中也会有。它是否会被兼容,是否会被优化,那就是另外的问题了。我们希望的是,LLVM代码生成器的大部分都可以对此进行低层级的优化。”Wolfe说道。

 NVIDIA的加速计算组战略联盟主管及 OpenACC 主席Duncan Poole表示,新加入的伊利诺伊大学、 布鲁克海文和石溪证明了OpenACC 正在逐步增长的吸引力。他指出,对新成员有着重大的吸引力、并时常为计算机科学家提供发布作品的机会,这些就是OpenACC 各项培训活动(黑客马拉松、研讨会等等)的价值所在。

“在NCSA(国家超级计算机应用中心)进行的黑客马拉松把伊利诺伊大学带到了这个领域。布鲁克海文参加了一个单独的黑客马拉松 - 它以QCD(量子色动力学)的专业知识和一个特别的库而知名,Grid QCD,是C++代码。C++更强调编译器指令模式,因此让他们参与进来,在我们应当如何修改标准、跟他们一起将他们的代码移植到OpenACC 这两方面给予我们的反馈是很重要的。他们看到了价值,我们也看到了价值。”Poole说道。

“加入OpenACC 的UIUC(伊利诺伊大学香槟分校)是为两项关键拨款和项目来提供支持的,这两项拨款和项目与NSF(国家科学基金会)/NCSA和能源部的’使用复杂非优化代码科学研究’相关。”伊利诺伊大学香槟分校研究科学家John Larson说。“成为OpenACC标准组织的成员既可以先一步体验到正在开发中的OpenACC语言的技术特点,也可以注入一些也许会影响新版OpenACC语言特色的东西。”

OpenACC 在过去的14 中已经举办了五次活动,另外三次OpenACC黑客马拉松已计划于2016年下半年在瑞士的超级计算机中心(CSCS)举办。(而)CSC (IT Center for Science Ltd)是在芬兰的赫尔辛基以及橡树岭国家实验室。黑客马拉松是一个为期五天的强化手动编码活动,旨在帮助科学家并行化他们的应用以运行在加速器和多核处理器上。

在黑客马拉松活动中,小队(2-6人)都会搭配一位来自OpenACC的专家。“有一位编译器工程师明显不一样,当你在运行出问题的时候,马上就能从中得到好处,开发人员问的第一件事就是‘是我的代码引起的问题还是因为别的。’早期的时候在编译器中有很多bug,不过最近就没有什么问题了,对代码并行化这一步上有了更多的理解。”Poole说道。

最初的两步,Poole说他们更希望小队能在黑客马拉松之前完成,以便确定他们所选择的特定的编译器,并进行代码分析来确定什么地方可以进行加速。“不过并非总是这样。你基本上都要经过插入指令这个过程来让你的代码并行化,然后下一步要插入数据指令来协助表示主机与加速器之间的数据移动。”

活动的目的并不是“把OpenACC 强加给每一个人,即便是在黑客马拉松,那也更多的是说,能促进你代码的进步,无论你使用什么工具那都是最合适的。所以可以是一个数学库,可以是CUDA、OpenACC、OpenCL,无论是什么对开发人员来说都是有意义的。”Poole说。

Poole赞同把研讨会一词使用的更为宽泛。OpenACC对这些活动有一个相当独特的观点:培训课程(两天);研讨会(三天);黑客马拉松(四天);还有学术研讨会(五天)。他们在规模和时间上各有不同(请参看下方的即将进行的活动列表)。

学术研讨会是最为严谨的。“我们目前每年举办两次。一个在今年的ISC - (针对加速器的性能移植编程模型 (P3MA) 国际研讨会,Sandia的Simon Hammond主讲)- 这是一个学术活动:你可以把你想发表论文的想法提交上来;专业学者会进行同行评议;最好的会被选上并在研讨会上展示出来。这对于计算机学者来说是一个很合适的发表机会。”Poole说。

在加速器和处理器快速变化的情形之下,Poole 和 Wolfe也赞同面对大量挑战仍然需要在并行化代码和增强性能以及可移植性方面做出努力。Wolfe指出了目前存在的三点问题。

整体清理是其中之一。“坦白的说,写规范的人,我是说我和其他人,并不是以写规范为职业谋生的。我们把我们认为正确的写出来,但有时并不像你需要的那样精确。有时这是个错误,但有时这是一种没有考虑到阅读人的假定情况。所以在这里有一些关于指定方式之类的东西 - 其中一个就是要减少子句,无论它是否是数据子句。在OpenACC中,不带有数据子句,但它具有一些数据子句的特性,所以要做一些清理,我们需要保证我们所定义的东西的准确性。”他说。

多设备支持是第二条,也是最头疼的一条,Wolfe说。“比如,瑞士的Mateo 购买了一套系统,这套系统每个节点都有一个双路Haswell(Intel)和八个K80 。像在OpenACC这样的语言里,你只是想说这里有个并行循环,用它把我的资源都跑一下,这样的情况下你如何利用好它。你打算要怎么样来管理内存一致性,如何分配数据计算和数据存储?你怎么保证能让K80保持满负荷。”

深度存储(Deep Memory)是另一个困难。“如果你有一个深度动态结构,使用他们的数据结构进行了多重连接和嵌入,然后你想要把整个结构挪到设备上,那么这是一个特定的情况:这时你有了系统内存和设备内存,并把数据从其中的一个移动到另一个上。这里有几种不同的、具备不同特性的内存池。比如,Xeon Phi,你会得到系统内存和多通道DRAM、高带宽内存。这些节点中的一部分会使用NVRAM来放置系统内存,我们并不十分清楚其特性究竟会怎样,不过我看到的计划是,是字节寻址的。”Wolfe说道。

 “我看了幻灯片演示 - 不过没有电路设计 - 展示的是一份AMD的设计,他们把APU和CPU放到了一块芯片上,还配置有多种内存 - 大型系统内存和一种小型的高带宽内存 - 所有这些内存都披露了。它们不是通过系统来管理的,也不是通过缓存那种硬件来管理的;它通过应用来管理。还要看看能不能、怎样才能通过植入一些特定的程序指令来在运行时中进行管理。我认为这会是一个巨大的挑战,因为我们在这方面没有太多经验。这不仅改变了你表达并行化的方式,现在也改变了内存管理的方式。”他说道。

除了挑战, Wolfe和Poole都表示OpenACC也在发展,而且发展的不错。比如OpenACC在阿尔贡领先计算设备的NekCEM(Nekton for Computational Electromagnetics)编码中取得了2.5倍的速度提升以及能耗的大幅降低。

 

[i] https://en.wikipedia.org/wiki/OpenACC