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

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

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

(架构的通用特性)

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

OpenACC 编程模型是针对很多核心设备(如 GPU)而开发的。OpenACC 面向的是那些由主机主导却使用附加或集成加速器执行的程序。这意味着由主机来执行主程序,并控制加速器的行为。为了从 OpenACC 导语中受益,执行设备应该具有并行计算能力,这种能力至少可以通过三种并行级别中的一种来实现:gang、worker 或 vector。

OpenACC 加速器通常具有高效的向量处理能力,例如 CUDA 设备的线程束(warp),AMD GPU 的 wavefront 和 Intel Xeon Phi 的 512 位 SIMD(single-instruction,multiple-data:单指令、多数据)单元。Intel 的 MIC(Many Integrated Core,集成众核)设备架构可以很好地支持多线程,从而实现 worker 并行性。GPU 通常被分为多个 ALU(arithmetic logic unit,算术逻辑单元)集群,例如 NVIDIA SM(streaming multiprocessor,流式多处理器),可以映射为 gang 并行性。因此,设备的能力应该与 OpenACC vector、worker 和 gang 的尺寸值相匹配。由于这些值在每个计算 kernel 中是固定的,因此使用 OpenACC 2.5 性能分析接口的性能工具,可以在相应的 enqueue 操作中获取计算 kernel 的信息。

OpenACC 使用计算卸载(computation offloading)的概念。这允许你在卸载设备上执行计算密集型工作或仅适合在加速器架构上执行的工作负载。这意味着,OpenACC 设备通常是由主机控制的(host-controlled),而非自主控制的(self-hosted)。然而,一些 OpenACC 编译器(例如 PGI 的多核后端)可以从 OpenACC 导语中生成面向多核 CPU 的代码。

在性能分析方面,计算卸载需要捕获与主机和设备执行有关的信息,并且需要在主机和设备数据之间建立关联。主机处理器上的性能测量可以提供细粒度的(fine-grained)数据,而加速器上的数据通常最多只能精确到任务级别,例如计算 kernel 和数据传输的开始和结束。传输次数可以决定数据移动的带宽。

一般来说,设备侧性能数据的获取取决于加速器和用于实现加速器访问的相应 API。例如,设备特定的 API 可以提供对硬件计数器的访问,如缓存访问计数器或 IPC(instruction per cycle,每周期指令数)计数器。

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

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

评论

发布