描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111606697
内容简介
本书为我们呈现了异构系统架构(HSA)的关键技术、实现方法和案例应用。首先回顾异构并行处理的发展进程、相关问题,分析HSA相对于其他技术的优势。之后深入探讨了运行时、内存模型、队列、上下文交换、架构队列语言、模拟器、工具链等问题。*后选取三个实际案例,基于C++应用程序,说明了HSA如何能够显著提升程序性能。
目 录
出版者的话
译者序
推荐序
前言
作者简介
第1章 引言 1
第2章 HSA 概述 5
2.1 GPU计算简史:HSA解决的问题 5
2.2 HSA的支柱 9
2.2.1 HSA内存模型 9
2.2.2 HSA排队模型 9
2.2.3 HSAIL虚拟ISA 10
2.2.4 HSA上下文切换 10
2.3 HSA规范 10
2.3.1 HSA平台系统体系结构规范 10
2.3.2 HSA运行时规范 10
2.3.3 HSA程序员参考手册—HSAIL SPEC 11
2.4 HSA软件 11
2.5 HSA基金会 12
2.6 小结 13
第3章 HSAIL——虚拟并行ISA 14
3.1 引言 14
3.2 编译流程示例 15
3.3 HSAIL执行模型 16
3.4 HSAIL指令集简介 17
3.4.1 原子操作 18
3.4.2 寄存器 18
3.4.3 分段 19
3.4.4 波前和通道 20
3.5 HSAIL机器模型和配置文件 21
3.6 HSAIL编译流程 22
3.7 HSAIL编译工具 23
3.7.1 编译器框架 23
3.7.2 CL离线编译 24
3.7.3 HSAIL汇编器/反汇编器 25
3.7.4 ISA和机器码汇编器/反汇编器 25
3.8 小结 25
第4章 HSA运行时 26
4.1 引言 26
4.2 HSA核心运行时API 28
4.2.1 运行时的初始化和关闭 28
4.2.2 运行时的通知 29
4.2.3 系统和HSA代理信息 29
4.2.4 信号 30
4.2.5 队列 31
4.2.6 体系结构排队语言 31
4.2.7 内存 32
4.2.8 代码对象和可执行文件 34
4.3 HSA运行时扩展 35
4.3.1 HSAIL 终止化 35
4.3.2 图像和采样器 35
4.4 小结 37
参考文献 38
第5章 HSA 内存模型 39
5.1 引言 39
5.2 HSA内存结构 40
5.2.1 分段 41
5.2.2 平面寻址 42
5.2.3 共享虚拟寻址 42
5.2.4 所有权 43
5.2.5 图像内存 43
5.3 HSA内存一致性基础 43
5.3.1 背景:顺序一致性 44
5.3.2 背景:冲突和竞争 45
5.3.3 单一内存范围的HSA内存模型 45
5.3.4 多个内存范围的HSA内存模型 48
5.3.5 内存段 51
5.3.6 汇总:HSA竞争自由 51
5.3.7 附加观察和注意事项 52
5.4 HSA内存模型中的高级一致性 52
5.4.1 松弛原子 52
5.4.2 所有权和范围界限 54
5.5 小结 54
参考文献 55
第6章 HSA 排队模型 56
6.1 引言 56
6.2 用户模式队列 56
6.3 体系结构排队语言 59
6.3.1 包的类型 60
6.3.2 创建数据包 63
6.4 包的提交与调度 64
6.5 小结 70
参考文献 70
第7章 编译器技术 71
7.1 引言 71
7.2 C++ AMP简介 71
7.2.1 C++ AMP array_view 73
7.2.2 C++ AMP parallel_for_each或内核调用 73
7.3 将HSA作为编译器目标 74
7.4 将关键的C++ AMP构造映射到HSA 75
7.5 C++ AMP编译流程 77
7.6 编译生成的C++ AMP代码 78
7.7 C++ AMP中平铺的编译器支持 80
7.7.1 划分计算域 81
7.7.2 指定地址空间和屏障 81
7.8 内存段注释 82
7.9 针对HSA的通用C++ 84
7.10 平台原子的编译器支持 86
7.11 新建/删除操作符的编译器支持 91
7.11.1 实现具有平台原子性的新建/删除操作符 92
7.11.2 将新建/删除返回的地址提升到全局内存段 94
7.11.3 基于等待 API /信号HSAIL指令改进新建/删除操作符 94
7.12 小结 96
参考文献 96
第8章 应用用例:平台原子性 97
8.1 引言 97
8.2 HSA中的原子性 98
8.3 任务队列系统 100
8.3.1 静态执行 100
8.3.2 动态执行 101
8.3.3 HSA任务队列系统 101
8.3.4 评估 104
8.4 广度优先搜索 107
8.4.1 传统实现 109
8.4.2 HSA实现 110
8.4.3 评估 112
8.5 数据布局转换 113
8.5.1 使用PTTWAC算法进行SoA-ASTA转换 115
8.5.2 PTTWAC的HSA实现 116
8.5.3 评估 116
8.6 小结 118
致谢 118
参考文献 118
第9章 HSA模拟器 120
9.1 在Multi2Sim中模拟HSA 120
9.1.1 引言 120
9.1.2 Multi2Sim-HSA 121
9.1.3 HSAIL 宿主机 HSA 122
9.1.4 HSA 运行时 124
9.1.5 仿真器设计 124
9.1.6 日志与调试 125
9.1.7 Mulit2Sim-HSA路线图 126
9.1.8 安装与支持 126
9.2 HSAemu仿真HSA 127
9.2.1 引言 127
9.2.2 建模的HSA组件 128
9.2.3 HSAemu的设计 129
9.2.4 多线程HSA GPU仿真器 131
9.2.5 剖析、调试与性能模型 132
9.3 softHSA模拟器 133
9.3.1 引言 133
9.3.2 高层次设计 133
9.3.3 创建与测试模拟器 134
9.3.4 使用LLVM HSA模拟器进行调试 135
参考文献 137
索引 139
译者序
推荐序
前言
作者简介
第1章 引言 1
第2章 HSA 概述 5
2.1 GPU计算简史:HSA解决的问题 5
2.2 HSA的支柱 9
2.2.1 HSA内存模型 9
2.2.2 HSA排队模型 9
2.2.3 HSAIL虚拟ISA 10
2.2.4 HSA上下文切换 10
2.3 HSA规范 10
2.3.1 HSA平台系统体系结构规范 10
2.3.2 HSA运行时规范 10
2.3.3 HSA程序员参考手册—HSAIL SPEC 11
2.4 HSA软件 11
2.5 HSA基金会 12
2.6 小结 13
第3章 HSAIL——虚拟并行ISA 14
3.1 引言 14
3.2 编译流程示例 15
3.3 HSAIL执行模型 16
3.4 HSAIL指令集简介 17
3.4.1 原子操作 18
3.4.2 寄存器 18
3.4.3 分段 19
3.4.4 波前和通道 20
3.5 HSAIL机器模型和配置文件 21
3.6 HSAIL编译流程 22
3.7 HSAIL编译工具 23
3.7.1 编译器框架 23
3.7.2 CL离线编译 24
3.7.3 HSAIL汇编器/反汇编器 25
3.7.4 ISA和机器码汇编器/反汇编器 25
3.8 小结 25
第4章 HSA运行时 26
4.1 引言 26
4.2 HSA核心运行时API 28
4.2.1 运行时的初始化和关闭 28
4.2.2 运行时的通知 29
4.2.3 系统和HSA代理信息 29
4.2.4 信号 30
4.2.5 队列 31
4.2.6 体系结构排队语言 31
4.2.7 内存 32
4.2.8 代码对象和可执行文件 34
4.3 HSA运行时扩展 35
4.3.1 HSAIL 终止化 35
4.3.2 图像和采样器 35
4.4 小结 37
参考文献 38
第5章 HSA 内存模型 39
5.1 引言 39
5.2 HSA内存结构 40
5.2.1 分段 41
5.2.2 平面寻址 42
5.2.3 共享虚拟寻址 42
5.2.4 所有权 43
5.2.5 图像内存 43
5.3 HSA内存一致性基础 43
5.3.1 背景:顺序一致性 44
5.3.2 背景:冲突和竞争 45
5.3.3 单一内存范围的HSA内存模型 45
5.3.4 多个内存范围的HSA内存模型 48
5.3.5 内存段 51
5.3.6 汇总:HSA竞争自由 51
5.3.7 附加观察和注意事项 52
5.4 HSA内存模型中的高级一致性 52
5.4.1 松弛原子 52
5.4.2 所有权和范围界限 54
5.5 小结 54
参考文献 55
第6章 HSA 排队模型 56
6.1 引言 56
6.2 用户模式队列 56
6.3 体系结构排队语言 59
6.3.1 包的类型 60
6.3.2 创建数据包 63
6.4 包的提交与调度 64
6.5 小结 70
参考文献 70
第7章 编译器技术 71
7.1 引言 71
7.2 C++ AMP简介 71
7.2.1 C++ AMP array_view 73
7.2.2 C++ AMP parallel_for_each或内核调用 73
7.3 将HSA作为编译器目标 74
7.4 将关键的C++ AMP构造映射到HSA 75
7.5 C++ AMP编译流程 77
7.6 编译生成的C++ AMP代码 78
7.7 C++ AMP中平铺的编译器支持 80
7.7.1 划分计算域 81
7.7.2 指定地址空间和屏障 81
7.8 内存段注释 82
7.9 针对HSA的通用C++ 84
7.10 平台原子的编译器支持 86
7.11 新建/删除操作符的编译器支持 91
7.11.1 实现具有平台原子性的新建/删除操作符 92
7.11.2 将新建/删除返回的地址提升到全局内存段 94
7.11.3 基于等待 API /信号HSAIL指令改进新建/删除操作符 94
7.12 小结 96
参考文献 96
第8章 应用用例:平台原子性 97
8.1 引言 97
8.2 HSA中的原子性 98
8.3 任务队列系统 100
8.3.1 静态执行 100
8.3.2 动态执行 101
8.3.3 HSA任务队列系统 101
8.3.4 评估 104
8.4 广度优先搜索 107
8.4.1 传统实现 109
8.4.2 HSA实现 110
8.4.3 评估 112
8.5 数据布局转换 113
8.5.1 使用PTTWAC算法进行SoA-ASTA转换 115
8.5.2 PTTWAC的HSA实现 116
8.5.3 评估 116
8.6 小结 118
致谢 118
参考文献 118
第9章 HSA模拟器 120
9.1 在Multi2Sim中模拟HSA 120
9.1.1 引言 120
9.1.2 Multi2Sim-HSA 121
9.1.3 HSAIL 宿主机 HSA 122
9.1.4 HSA 运行时 124
9.1.5 仿真器设计 124
9.1.6 日志与调试 125
9.1.7 Mulit2Sim-HSA路线图 126
9.1.8 安装与支持 126
9.2 HSAemu仿真HSA 127
9.2.1 引言 127
9.2.2 建模的HSA组件 128
9.2.3 HSAemu的设计 129
9.2.4 多线程HSA GPU仿真器 131
9.2.5 剖析、调试与性能模型 132
9.3 softHSA模拟器 133
9.3.1 引言 133
9.3.2 高层次设计 133
9.3.3 创建与测试模拟器 134
9.3.4 使用LLVM HSA模拟器进行调试 135
参考文献 137
索引 139
前 言
我很自豪地向你介绍异构系统体系结构—一个新的计算平台。异构系统体系结构(HSA)是多方面协作的结果,它定义了一个新的系统体系结构,为CPU和专用计算设备提供必要的支持,以便在要求苛刻的任务上进行高效协作。本书汇集了那些创建HSA及其相关软件栈的专家撰写的一系列著作。这些著作解释了规范和产品背后的基本原理和设计权衡,这是仅仅通过阅读手册和文件不能轻易获得的。这些作者中的一些来自工业界,另一些来自学术界。我有幸有机会与这些的专家合作。
有许多人做出了未以章节形式展现的重要贡献。我想要感谢的个人是Manju Hegde(AMD),他说服我担任本书的主编,在整个过程中他始终是重要的合作伙伴。Manju提供了本书的原始构思,并帮助招募了许多作者和审稿人。他还亲自审查了各章,并提供了宝贵的意见。
本书的内容源自于2013年HotChips和2014年ACM / IEEE国际计算机体系结构研讨会(ISCA)上的会议资料。大多数演讲者成为本书各章的作者。然而,初介绍HSA排队模型的Chien-Ping Lu(联发科)、Hakan Persson(ARM)和Ian Bratt(ARM)由于时间关系不能参与写作。我还要感谢J. P. Bordes(AMD),他对HSA应用程序部分做出了重大贡献。
我还要特别感谢五位特别的人。HSA首席布道者Greg Stoner(AMD)为HSA基金会创作本书提供了宝贵的支持。Anton Lokhmotov(ARM)和我一起确立了本书的原始大纲。Tom Jablin(MulticoreWare)是HSA方面的专家,他在编辑过程中为我提供了宝贵的技术支持。Marty Johnson(AMD)和Sui Chi Chan(AMD)审读了全书,并为我和其他作者提供了宝贵的反馈意见。
后,我要感谢担任本书项目经理的Bob Whitecotton(AMD),他确保我和其他作者的写作不离题。他的项目管理技巧使我避免了许多陷阱。没有他的帮助,我将无法完成这个项目。
有许多人做出了未以章节形式展现的重要贡献。我想要感谢的个人是Manju Hegde(AMD),他说服我担任本书的主编,在整个过程中他始终是重要的合作伙伴。Manju提供了本书的原始构思,并帮助招募了许多作者和审稿人。他还亲自审查了各章,并提供了宝贵的意见。
本书的内容源自于2013年HotChips和2014年ACM / IEEE国际计算机体系结构研讨会(ISCA)上的会议资料。大多数演讲者成为本书各章的作者。然而,初介绍HSA排队模型的Chien-Ping Lu(联发科)、Hakan Persson(ARM)和Ian Bratt(ARM)由于时间关系不能参与写作。我还要感谢J. P. Bordes(AMD),他对HSA应用程序部分做出了重大贡献。
我还要特别感谢五位特别的人。HSA首席布道者Greg Stoner(AMD)为HSA基金会创作本书提供了宝贵的支持。Anton Lokhmotov(ARM)和我一起确立了本书的原始大纲。Tom Jablin(MulticoreWare)是HSA方面的专家,他在编辑过程中为我提供了宝贵的技术支持。Marty Johnson(AMD)和Sui Chi Chan(AMD)审读了全书,并为我和其他作者提供了宝贵的反馈意见。
后,我要感谢担任本书项目经理的Bob Whitecotton(AMD),他确保我和其他作者的写作不离题。他的项目管理技巧使我避免了许多陷阱。没有他的帮助,我将无法完成这个项目。
评论
还没有评论。