《OpenCL异构计算》讲解了OpenCL和如何为复杂的异构系统(多核处理器、GPU和APU)进行并行编程。OpenCL是为支持多平台设计的,受行业广泛支持,有助于帮助读者为异构环境编写高性能应用程序。
本书由并行计算和OpenCL社区中的领头人所撰写,可帮助读者体验OpenCL从而了解大量基础的并行算法。书中探索了内存空间、优化技术、图形的互操作、性能扩展,调试和性能剖析等。
本书读者对象为软件工程师、程序员、硬件工程师、高年级本科生/研究生,可供并行编程课程使用,包含有详细的案例,附有额外的网上练习和其他支持材料。
本书特色
- 解释OpenCL并行编程的原理和策略,从理解四大抽象模型开始,一直介绍到测试和调试完整的应用
- 覆盖图像处理、Web插件、粒子模拟、视频编辑和性能优化等主题
- 展示OpenCL如何映射到目标体系结构,并解释一些映射到各种体系结构的折衷方案
-
提出一系列基础编程技术,并通过若干个实例和案例分析来展示针对不同硬件平台的OpenCL扩展
目录
- 第1章 并行编程入门 1
- 引言 1
- opencl 1
- 本书目标 2
- 并行思维 2
- 并发编程模型和并行编程模型 6
- 线程和共享内存 9
- 消息传递通信 9
- 不同的并行粒度 10
- 数据共享和同步 11
- 本书结构 11
- 参考文献 12
- 扩展阅读和相关网站 13
- 第2章 opencl简介 15
- 引言 15
- opencl标准 15
- opencl 规范 15
- kernel和opencl执行模型 16
- 平台和设备 19
- .主机-设备交互 19
- 执行环境 21
- 上下文 22
- 命令队列 22
- 事件 23
- 内存对象 23
- flush命令和finish命令 26
- 新建一个opencl程序对象 26
- opencl的kernel 27
- 内存模型 29
- 编写kernel 31
- 向量相加实例的完整代码 32
- 小结 39
- 参考文献 39
- 第3章 opencl设备架构 41
- 引言 41
- 硬件权衡 41
- 性能随频率的提升及其限制 43
- 超标量执行 44
- vliw 44
- simd和向量处理 47
- 硬件多线程 48
- 多核架构 51
- 集成:片上系统和apu 53
- 高速缓存层次和内存系统 54
- 架构设计空间 55
- cpu设计 56
- gpu体系结构 60
- apu和类apu的设计 63
- 小结 64
- 参考文献 65
- 第4章 opencl基本实例 67
- 引言 67
- 应用实例 67
- 简单的矩阵相乘 67
- 图像卷积实例 77
- 小结 85
- 第5章 opencl的并发与执行模型 87
- 引言 87
- kernel,work_item,workgroup和
- 执行域 87
- opencl同步:kernel,fence和barrier 90
- 队列与全局同步 94
- opencl内存一致性 96
- 事件 96
- 命令barrier与marker 108
- 主机端内存模型 109
- buffer对象 110
- image对象 113
- 设备端内存模型 115
- 设备端宽松的内存一致性 116
- 全局内存 117
- 本地内存 119
- 常量内存 121
- 私有内存 122
- 小结 122
- 第6章 opencl在cpu/gpu
- 平台上的实现 123
- 引言 123
- opencl在amd phenom ii x6上的
- 实现 123
- opencl在amd radeon hd6970
- gpu上的实现 128
- 多线程和内存系统 130
- 基于clause的simd执行 132
- 资源分配 137
- opencl的内存性能 139
- opencl全局内存 139
- 本地内存——软件管理的cache 142
- 小结 148
- 参考文献 149
- 第7章 opencl案例学习1:卷积 151
- 引言 151
- 计算卷积的kernel 151
- 选择合适的workgroup大小 151
- 将数据缓存到本地内存 154
- 执行卷积 160
- 小结 161
- 代码清单 162
- 主机端代码 162
- kernel代码 166
- 参考文献 171
- 第8章 opencl案例学习2:
- 视频处理 173
- 引言 173
- 获得视频帧 173
- cpu上的解码 174
- 在gpu上解码视频 175
- 在opencl中处理一个视频 179
- 在多个视频上处理多个不同effect 180
- 事件链 180
- 最终输出显示到屏幕 181
- opencl/opengl协同工作能力 181
- 小结 184
- 第9章 opencl案例学习3:
- 直方图 185
- 引言 185
- 选择适量的work-group 185
- 选择最优的work-group大小 186
- 全局内存访存优化 187
- 使用原子操作计算局部直方图 189
- 本地内存访存优化 190
- 局部直方图的规约 192
- 全局规约 193
- 完整的kernel代码 193
- 性能和小结 196
- 第10章 opencl案例学习4:
- 混合粒子模拟 197
- 引言 197
- 计算概览 197
- gpu实现 200
- 创建buffer 200
- 构造加速结构 201
- 计算碰撞 201
- 合成 202
- cpu实现 202
- 负载均衡 203
- 性能和小结 204
- 生成均匀网格的kernel代码 205
- 粒子模拟的kernel代码 206
- 第11章 opencl扩展 211
- 引言 211
- 扩展机制概览 211
- 设备拆分 214
- 双精度 225
- 参考文献 233
- 第12章 opencl的性能剖析和
- 调试 235
- 引言 235
- 基于事件的剖析 236
- amd app profiler 238
- 收集opencl程序轨迹 239
- 收集opencl gpu kernel性能
- 计数器 242
- amd app kernelanalyzer 243
- 演示amd app profiler 245
- 启动amd app profiler 245
- 使用应用程序的轨迹数据
- 以发现性能瓶颈 245
- 使用gpu性能计数器发现kernel的
- 性能瓶颈 247
- 调试opencl应用程序 248
- gdebugger概览 249
- 使用gdebugger调试并行opencl
- 应用程序 249
- amd printf扩展 251
- 小结 253
- 第13章 webcl 255
- 引言 255
- 框架设计 256
- webcl 实验性实现 257
- firefox扩展 257
- 连接javascript和opencl 258
- webcl动手练习 260
- web照片编辑器 264
- 讨论 266
- 小结 268
- 参考文献 268
- 扩展阅读和相关网站 269
- 索引 271