« 于: 七月 01, 2016, 09:47:05 pm »
《CUDA专家手册:GPU编程权威指南》详细讨论CUDA的硬件和软件,包括CUDA 5.0和开普勒架构的最新特性。每个CUDA开发人员,不论新手还是高手,都可以在这里找到感兴趣的内容并即时上手。新晋的CUDA开发者将理解硬件如何处理命令以及驱动程序如何检查状态;更有经验者,将会在驱动程序API、上下文迁移以及如何让CPU/GPU最有效率地进行数据交换和同步等骨灰级的主题上得到指导。
本书所附的开源代码有25000多行,欢迎开发者自由重用。
本书不仅是权威手册,也是实用代码大全。全书分为以下三个部分:
第一部分是基础知识概述,对支持CUDA的硬件和软件进行高屋建瓴的描述。
第二部分是CUDA编程细节,对CUDA进行全方位的描述,包括内存,流和事件,执行模型(包括动态并行特性以及CUDA 5.0和SM 3.5的新特性),流处理器簇(包括SM 3.5的所有功能介绍),多GPU编程,纹理操作。这部分附带的源代码作为可重用的验证型代码和演示型代码,旨在展示特殊的硬件特性或强调特定的应用方法。
第三部分是案例剖析,深入分析精选的CUDA应用场景以及关键的并行算法,包括流式负载、归约、扫描(并行前缀求和)、N-体问题和图像处理,这些算法全方位涵盖各种CUDA应用场景。
中文版序推荐序译者序前 言第一部分 基础知识第1章 简介1.1 方法1.2 代码1.2.1 验证型代码1.2.2 演示型代码1.2.3 探究型代码1.3 资源1.3.1 开源代码1.3.2 CUDA专家手册库(chLib)1.3.3 编码风格1.3.4 CUDA SDK1.4 结构第2章 硬件架构2.1 CPU配置2.1.1 前端总线2.1.2 对称处理器簇2.1.3 非一致内存访问(NUMA)2.1.4 集成的PCIe2.2 集成GPU2.3 多GPU2.4 CUDA中的地址空间2.4.1 虚拟寻址简史2.4.2 不相交的地址空间2.4.3 映射锁页内存2.4.4 可分享锁页内存2.4.5 统一寻址2.4.6 点对点映射2.5 CPU/GPU交互2.5.1 锁页主机内存和命令缓冲区2.5.2 CPU/GPU并发2.5.3 主机接口和内部GPU同步2.5.4 GPU间同步2.6 GPU架构2.6.1 综述2.6.2 流处理器簇2.7 延伸阅读第3章 软件架构3.1 软件层3.1.1 CUDA运行时和驱动程序3.1.2 驱动程序模型3.1.3 nvcc、PTX和微码3.2 设备与初始化3.2.1 设备数量3.2.2 设备属性3.2.3 无CUDA支持情况3.3 上下文3.3.1 生命周期与作用域3.3.2 资源预分配3.3.3 地址空间3.3.4 当前上下文栈3.3.5 上下文状态3.4 模块与函数3.5 内核(函数)3.6 设备内存3.7 流与事件3.7.1 软件流水线3.7.2 流回调3.7.3 NULL流3.7.4 事件3.8 主机内存3.8.1 锁页主机内存3.8.2 可分享的锁页内存3.8.3 映射锁页内存3.8.4 主机内存注册3.9 CUDA数组与纹理操作3.9.1 纹理引用3.9.2 表面引用3.10 图形互操作性3.11 CUDA运行时与CUDA驱动程序API第4章 软件环境4.1 nvcc--CUDA编译器驱动程序4.2 ptxas--PTX汇编工具4.3 cuobjdump4.4 nvidia-smi4.5 亚马逊Web服务4.5.1 命令行工具4.5.2 EC2和虚拟化4.5.3 密钥对4.5.4 可用区域(AZ)和地理区域4.5.5 S34.5.6 EBS4.5.7 AMI4.5.8 EC2上的Linux4.5.9 EC2上的Windows第二部分 CUDA编程第5章 内存5.1 主机内存5.1.1 分配锁页内存5.1.2 可共享锁页内存5.1.3 映射锁页内存5.1.4 写结合锁页内存5.1.5 注册锁页内存5.1.6 锁页内存与统一虚拟寻址5.1.7 映射锁页内存用法5.1.8 NUMA、线程亲和性与锁页内存5.2 全局内存5.2.1 指针5.2.2 动态内存分配5.2.3 查询全局内存数量5.2.4 静态内存分配5.2.5 内存初始化API5.2.6 指针查询5.2.7 点对点内存访问5.2.8 读写全局内存5.2.9 合并限制5.2.10 验证实验:内存峰值带宽5.2.11 原子操作5.2.12 全局内存的纹理操作5.2.13 ECC(纠错码)5.3 常量内存5.3.1 主机与设备常量内存5.3.2 访问常量内存5.4 本地内存5.5 纹理内存5.6 共享内存5.6.1 不定大小共享内存声明5.6.2 束同步编码5.6.3 共享内存的指针5.7 内存复制5.7.1 同步内存复制与异步内存复制5.7.2 统一虚拟寻址5.7.3 CUDA运行时5.7.4 驱动程序API第6章 流与事件6.1 CPU/GPU的并发:隐藏驱动程序开销6.2 异步的内存复制6.2.1 异步的内存复制:主机端到设备端6.2.2 异步内存复制:设备端到主机端6.2.3 NULL流和并发中断6.3 CUDA事件:CPU/GPU同步6.3.1 阻塞事件6.3.2 查询6.4 CUDA事件:计时6.5 并发复制和内核处理6.5.1 concurrencyMemcpyKernel.cu6.5.2 性能结果6.5.3 中断引擎间的并发性6.6 映射锁页内存6.7 并发内核处理6.8 GPU/GPU同步:cudaStreamWaitEvent()6.9 源代码参考第7章 内核执行7.1 概况7.2 语法7.2.1 局限性7.2.2 高速缓存和一致性7.2.3 异步与错误处理7.2.4 超时7.2.5 本地内存7.2.6 共享内存7.3 线程块、线程、线程束、束内线程7.3.1 线程块网格7.3.2 执行保证7.3.3 线程块与线程ID7.4 占用率7.5 动态并行7.5.1 作用域和同步7.5.2 内存模型7.5.3 流与事件7.5.4 错误处理7.5.5 编译和链接7.5.6 资源管理7.5.7 小结第8章 流处理器簇8.1 内存8.1.1 寄存器8.1.2 本地内存8.1.3 全局内存8.1.4 常量内存8.1.5 共享内存8.1.6 栅栏和一致性8.2 整型支持8.2.1 乘法8.2.2 其他操作(位操作)8.2.3 漏斗移位(SM 3.5)8.3 浮点支持8.3.1 格式8.3.2 单精度(32位)8.3.3 双精度(64位)8.3.4 半精度(16位)8.3.5 案例分析:float到half的转换8.3.6 数学函数库8.3.7 延伸阅读8.4 条件代码8.4.1 断定8.4.2 分支与汇聚8.4.3 特殊情况:最小值、最大值和绝对值8.5 纹理与表面操作8.6 其他指令8.6.1 线程束级原语8.6.2 线程块级原语8.6.3 性能计数器8.6.4 视频指令8.6.5 特殊寄存器8.7 指令集第9章 多GPU9.1 概述9.2 点对点机制9.2.1 点对点内存复制9.2.2 点对点寻址9.3 UVA:从地址推断设备9.4 多GPU间同步9.5 单线程多GPU方案9.5.1 当前上下文栈9.5.2 N-体问题9.6 多线程多GPU方案第10章 纹理操作10.1 简介10.2 纹理内存10.2.1 设备内存10.2.2 CUDA数组与块的线性寻址10.2.3 设备内存与CUDA数组对比10.3 一维纹理操作10.4 纹理作为数据读取方式10.4.1 增加有效地址范围10.4.2 主机内存纹理操作10.5 使用非归一化坐标的纹理操作10.6 使用归一化坐标的纹理操作10.7 一维表面内存的读写10.8 二维纹理操作10.9 二维纹理操作:避免复制10.9.1 设备内存上的二维纹理操作10.9.2 二维表面内存的读写10.10 三维纹理操作10.11 分层纹理10.11.1 一维分层纹理10.11.2 二维分层纹理10.12 最优线程块大小选择以及性能10.13 纹理操作快速参考10.13.1 硬件能力10.13.2 CUDA运行时10.13.3 驱动API第三部分 实例第11章 流式负载11.1 设备内存11.2 异步内存复制11.3 流11.4 映射锁页内存11.5 性能评价与本章小结第12章 归约算法12.1 概述12.2 两遍归约12.3 单遍归约12.4 使用原子操作的归约12.5 任意线程块大小的归约12.6 适应任意数据类型的归约12.7 基于断定的归约12.8 基于洗牌指令的线程束归约第13章 扫描算法13.1 定义与变形13.2 概述13.3 扫描和电路设计13.4 CUDA实现13.4.1 先扫描再扇出13.4.2 先归约再扫描(递归)13.4.3 先归约再扫描(两阶段)13.5 线程束扫描13.5.1 零填充13.5.2 带模板的版本13.5.3 线程束洗牌13.5.4 指令数对比13.6 流压缩13.7 参考文献(并行扫描算法)13.8 延伸阅读(并行前缀求和电路)第14章 N-体问题14.1 概述14.2 简单实现14.3 基于共享内存实现14.4 基于常量内存实现14.5 基于线程束洗牌实现14.6 多GPU及其扩展性14.7 CPU的优化14.8 小结14.9 参考文献与延伸阅读第15章 图像处理的归一化相关系数计算15.1 概述15.2 简单的纹理实现15.3 常量内存中的模板15.4 共享内存中的图像15.5 进一步优化15.5.1 基于流处理器簇的实现代码15.5.2 循环展开15.6 源代码15.7 性能评价15.8 延伸阅读附录A CUDA专家手册库术语表请购买正版书籍
电子试读版本下载:
[hide]链接:
http://pan.baidu.com/s/1i4IgPtN 密码: 7hym[/hide]