OpenACC 高性能并行编程:概念与策略 (7):OpenACC 概述 1.2.2

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

OpenACC高性能并行编程:概念与策略(7):OpenACC概述 1.2.2

(parallel)

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

parallel 导语是 OpenACC 提供的第二个计算构件。尽管 kernels 导语将责任放在编译器上以生成正确的代码,但 parallel 导语将责任放在用户的头上以阐明并行化的内容,并确保生成正确的代码。parallel 导语采取的立场是,用户非常了解正在编写的代码的并行特性,并可以正确表达该区域中的所有并行性。

现在看一下前面的例子,将其单纯地改为只使用 parallel 构件。

OpenACC高性能并行编程:概念与策略(7):OpenACC概述 1.2.2

这段代码有什么问题呢?它正在使用一些并行方式运行循环嵌套,但存在冗余。稍后我们将修复冗余的执行,但重点关注的是,编译器可以自由选择执行此循环的线程数。这意味着代码可能运行缓慢,且可能给出正确的结果,也可能给出错误的结果。

还请注意,编译器将检测到 parallel 区域内使用的对象 a 和 b,并产生数据迁移,这些迁移可能在将对象移动到设备时用得到。由于编译器可以使用任意数目的并行线程随意运行这段代码,因此它不具有可移植性。因为某些实现会选择采用一个线程并给出正确答案,而其他实现可能会选择其他方式并给出错误答案。

OpenACC高性能并行编程:概念与策略(7):OpenACC概述 1.2.2

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

评论

发布