OpenACC 高性能并行编程:概念与策略 (15):循环级并行性 2

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

OpenACC高性能并行编程:概念与策略(15):循环级并行性 2

(循环级并行性)

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

Adrian Jackson, EPCC

循环是很多应用程序的关键计算核心,尤其是在计算机的仿真应用中更是如此。由于应用程序或算法所操作的数据有其固有的特点,所以数据通常存储在数组中,并以多维形式出现。这意味着应用程序中的大部分工作是迭代这些数组,并使用算法来更新它们。

在 C、C++ 和 Fortran 等编程语言中,在一个多维数组上进行迭代的最简单方法是使用嵌套的循环。这是一个 C 语言的例子:

OpenACC高性能并行编程:概念与策略(15):循环级并行性 2

这是一个 Fortran 语言的例子:

OpenACC高性能并行编程:概念与策略(15):循环级并行性 2

当你在寻找一种方法来利用并行计算硬件中大量可用的计算资源时,自然会想到将这些嵌套循环的迭代分配到计算资源的不同处理单元中进行处理;这样就可以通过可用硬件分配工作,并减少应用程序的总体运行时长。实际上,这是并行编程构件的核心特性,例如 OpenMP1和 OpenCL2

1 http://www.openmp.org .

2 https://www.khronos.org/opencl/ .

正如第 1 章所述,OpenACC 还提供了将循环映射到计算硬件的功能,方法是使用 kernels 导语(对于 C/C++ 使用:#pragma acc kernels;对于 Fortran 使用:!acc kernels)或 parallel loop 导语(对于 C/C++ 使用:#pragma parallel loop;对于 Fortran 使用:!acc parallel loop)对循环如何并行化做注释。

然而要知道,加速器或众核(超过 12~18 个核)硬件可能具有许多并行性级别,即核(core)、线程(thread)和向量单元(vector unit)。OpenACC 允许你更详细地描述将循环映射到硬件的方法,这样应用程序可以利用此硬件执行指定任务。

本章将详细探讨如何使用 OpenACC 将循环并行化,讨论了提供的各种级别的并行性,以及可以添加到并行化导语中的子语,以确保生成的并行性仍然能产生正确的结果或者提高性能。

OpenACC高性能并行编程:概念与策略(15):循环级并行性 2

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

评论

发布