OpenACC 高性能并行编程:概念与策略 (20):循环级并行性 2.3&2.3.1

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

OpenACC高性能并行编程:概念与策略(20):循环级并行性 2.3&2.3.1

(其他 loop 构件)

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

本节讨论 OpenACC 中可用的 loop 构件。

(循环折叠)

当你要手动指定循环迭代到可用的并行硬件上的映射关系时,被并行化的循环中必须有足够数量的循环迭代来映射到各种硬件级别。你也必须为 parallel 区域中的所有循环指定循环子语(loop clause)。这可能是非常乏味的工作,并且可能影响代码的可读性。

另一种选择是,将整个循环嵌套视为单个循环空间(single loop space),分配给并行硬件。在单个循环级别指定并行性,并允许编译器整理这些循环并映射到特定硬件。这种方法还有个好处就是可以提供更大的循环迭代空间,以便跨硬件线程或向量硬件进行分配。当循环嵌套中的某些循环迭代次数很少时,这是很有用的。如下面的代码所示:

OpenACC高性能并行编程:概念与策略(20):循环级并行性 2.3&2.3.1

要指示编译器将整个循环嵌套视为单个循环,可以使用 loop 导语的 collapse 关键字。loop 导语携带一个正整数参数,此数字确定循环嵌套中有多少个循环折叠成单个循环。这里有一个例子:

OpenACC高性能并行编程:概念与策略(20):循环级并行性 2.3&2.3.1

为了使 collapse 关键字有效,循环需要紧密嵌套。也就是说,循环与循环之间不能有任何代码。循环的大小必须是可计算的,并且在循环期间不得改变。

OpenACC高性能并行编程:概念与策略(20):循环级并行性 2.3&2.3.1

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

评论

发布