OpenACC 高性能并行编程:概念与策略 (28):OpenACC 编程工具 3.2

阅读数:1 2020 年 1 月 5 日 18:32

OpenACC高性能并行编程:概念与策略(28):OpenACC编程工具 3.2

(编译 OpenACC 代码)

内容简介
本书是介绍大规模并行编程 OpenACC 的综合实践性书籍之一。书中前 3 章介绍了 OpenACC 背后的概念和 OpenACC 开发工具;第 4 章至第 7 章带你了解第 1 个真实世界的 OpenACC 程序,并揭示 OpenACC 程序编译背后的魔力,从而引入更多概念;第 8 章至第 10 章涵盖高级主题,例如 OpenACC 的替代方案、底层设备交互、多设备编程和任务并行性;第 11 章和第 12 章探讨了 OpenACC 实现潜在新语言特性的各种研究领域。

OpenACC 是构建在编程语言 C、C++ 和 Fortran 之上的,因此 OpenACC 程序的编译方法与这三种语言编写的程序的编译方法很类似。由于编译器导语的性质,用于这几种语言的编译器都可以编译包含 OpenACC 导语的程序。编译器可以简单地忽略导语,就如同它是注释一样。当使用 OpenACC 运行时库例程时,就需要支持 OpenACC 的编译器。如果你打算在不使用 OpenACC 的情况下运行代码,请记住这一点。

支持 OpenACC API 的编译器通常提供一个开关(switch),这个开关启用对 OpenACC 导语的解释(例如,PGI 编译器的 -acc,GNU 编译器的 -fopenacc)。开关打开后,通常会自动包含头文件 openacc.h,并链接编译器的 OpenACC 运行时库。因为 OpenACC 是为实现性能可移植编程而开发的,因此通常有一个编译器选项用来指定目标架构。默认的目标架构可适配各种设备,但是大多数情况下默认的目标架构并不能提供最佳性能。表 3.1 简要介绍了已知的几种 OpenACC 编译器的编译器标记。

表 3.1 各种 OpenACC 编译器的编译器标记

编译器 编译器标记 附加标记
PGI -acc -ta=target architecture
-Minfo=accel
GCC -fopenacc -foffload=offload target
OpenUH Compile: -fopenacc
Link: -lopenacc
-Wb,-accarch:target architecture
Cray C/C++: -h pragma=acc
Fortran: -h acc,noomp
-h msgs

代码清单 3.1 给出了 PGI C 编译器完整的编译命令和编译器输出示例。它将 OpenACC 程序 prog.c 编译生成一个可执行的 prog。开关 -ta=tesla:kepler 为 NIVIDIA Kepler 架构优化了设备代码。标记 -Minfo=accel 用于打印与 OpenACC 导语和子语实现有关的额外信息。

代码清单 3.1 针对一个简单的 OpenACC 归约,使用 -Minfo=accel 标记的 PGI 编译器输出示例

OpenACC高性能并行编程:概念与策略(28):OpenACC编程工具 3.2

支持 OpenACC 的编译器1正在不断增加。PGI 和 Cray 是商用编译器。PGI 也提供了不需要许可证的免费社区版本。还有一些开源的编译器:GCC2和数个 OpenACC 研究编译器,例如筑波大学的 Omni3、橡树岭国家实验室(Oak Ridge National Laboratory)的 OpenARC4和休斯敦大学的 OpenUH5

1 http://www.openacc.org/content/tools .

2 https://gcc.gnu.org/wiki/OpenACC .

3 http://omni-compiler.org .

4 http://ft.ornl.gov/research/openarc .

5 https://you.stonybrook.edu/exascallab/downloads/openuh-compiler/

OpenACC高性能并行编程:概念与策略(28):OpenACC编程工具 3.2

购书地址 https://item.jd.com/12596484.html?dist=jd

评论

发布