《加速MATLAB编程指南 CUDA实现》PDF下载

  • 购买积分:10 如何计算积分?
  • 作  者:赵地著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2018
  • ISBN:9787302493174
  • 页数:202 页
图书介绍:现代众核CPU和加速器(GPU和Intel MIC)的发展,为MATLAB代码的加速提供了硬件条件。本书全面介绍了基于众核CPU和加速器(GPU和Intel Xeon Phi)加速MATLAB代码的理论与编程方法。读者运用这些方法,MATLAB代码的运行速度将有极大的提高。

第1章 绪论 1

1.1 MATLAB程序的加速 1

1.2 MATLAB程序加速的可能途径 2

1.2.1 基于多核CPU的MATLAB程序加速 2

1.2.2 基于大内存的MATLAB程序加速 3

1.2.3 基于英伟达公司GPU的MATLAB程序加速 3

1.2.4 基于AMD公司GPU的MATLAB程序加速 4

1.2.5 基于Intel公司Xeon Phi的MATLAB程序加速 4

1.3 MATLAB程序加速的度量 4

1.4 基于GPU计算的MATLAB程序的编制 5

1.4.1 并行计算工具箱简介 6

1.4.2 CUDA库 6

1.4.3 CUDA编程 6

第2章 MATLAB程序的性能评估 7

2.1 bench()函数 8

2.2 tic()函数/toc()函数 8

2.3 timeit()函数 9

2.4 cputime()函数 9

2.5 clock()函数和etime()函数 10

2.6 gputimeit()函数 11

2.7 MATLAB探查器 11

第3章 基于多核处理器的MATLAB程序加速 16

3.1 MATLAB矩阵及运算符 16

3.1.1 MATLAB矩阵的创建 17

3.1.2 矩阵的性质的检验 18

3.1.3 MATLAB矩阵的操作 19

3.2 MATLAB函数 24

3.2.1 MATLAB函数的定义 24

3.2.2 MATLAB函数的执行 25

3.3 语句与代码 25

3.3.1 分支结构 26

3.3.2 循环结构 27

3.4 MATLAB代码 28

3.5 MATLAB并行设置 28

3.6 基于并行for循环(parfor循环)的MATLAB程序加速 29

第4章 基于大内存的MATLAB程序的加速 31

4.1 内存条的选择与安装 31

4.2 内存预分配 32

4.2.1 已知数组大小 33

4.2.2 未知数组大小 33

4.3 MATLAB向量化简介 34

4.4 MATLAB矩阵运算的向量化 35

4.4.1 创建MATLAB矩阵的函数 35

4.4.2 数据复制 36

4.4.3 MATLAB的矩阵变换函数 36

4.4.4 索引 38

4.4.5 矩阵操作的向量化 39

4.4.6 符合条件的元素总数 41

4.5 MATLAB函数的向量化 42

4.5.1 基于arrayfun()函数、bsxfun()函数、cellfun()函数、spfun()函数和structfun()函数的向量化 42

4.5.2 基于pagefun()函数的向量化 44

4.6 MATLAB语句的向量化 48

第5章 基于并行计算工具箱的MATLAB加速 50

5.1 GPU卡的选择与安装 50

5.1.1 GPU卡的选择 50

5.1.2 电源功率 51

5.1.3 散热问题 51

5.2 基于并行计算工具箱的GPU计算简介 51

5.3 基于并行计算工具箱的矩阵运算 54

5.3.1 在设备端(GPU端)直接创建MATLAB矩阵 54

5.3.2 在设备端(GPU端)生成随机数矩阵 59

5.3.3 设备端(GPU端)的稀疏矩阵 60

5.3.4 设备端(GPU端)矩阵的数据类型 61

5.3.5 设备端(GPU端)矩阵的检验 61

5.3.6 设备端(GPU端)矩阵的操作 62

5.4 基于并行计算工具箱的设备端(GPU端)函数 62

5.4.1 设备端(GPU端)函数的定义 62

5.4.2 设备端(GPU端)函数的执行 63

5.5 基于设备端(GPU端)大内存的MATLAB程序的加速 63

5.6 例子 64

5.6.1 卷积神经网络前向传播的卷积层 64

5.6.2 卷积神经网络前向传播的激活函数 65

5.6.3 卷积神经网络前向传播的降采样层 66

5.6.4 卷积神经网络后向传播的升采样层 66

5.6.5 卷积神经网络后向传播的卷积层 67

5.6.6 卷积神经网络后向传播中的梯度计算 68

第6章 MATLAB与C/C++的接口 70

6.1 MEX库API 71

6.1.1 MEX相关的函数 71

6.1.2 从MEX中调用MATLAB函数 72

6.1.3 mexGet()函数 72

6.1.4 MEX库API与输入输出相关的函数 73

6.1.5 MEX库API与锁定相关的函数 73

6.2 MATLAB的C/C++矩阵库API 74

6.2.1 定义MEX函数的数据类型 74

6.2.2 创建数组、分配内存和释放内存 75

6.2.3 数据类型校验:数组的数据类型和性质 78

6.2.4 数据存取:从数组读取和写入数据 80

6.2.5 数据类型转换:将字符串数组和结构数组转换成对象数组 82

6.3 MEX函数编译器 82

6.3.1 MEX介绍 82

6.3.2 编译MEX 83

6.3.3 MEX文件的查错 83

第7章 基于CUDA库的MATLAB加速 84

7.1 基于CUDA库的MATLAB加速简介 85

7.2 基于ArrayFire库的MATLAB加速简介 85

7.2.1 ArrayFire简介 85

7.2.2 ArrayFire数组 86

7.2.3 ArrayFire函数 87

7.2.4 CUDA的混合编程 88

7.2.5 实例 88

7.3 基于其他CUDA库的MATLAB加速简介 94

第8章 GPU计算简介 95

8.1 芯片技术的发展与摩尔定律 95

8.2 每秒浮点运算次数 96

8.3 GPU计算加速的度量 98

8.3.1 GPU程序的加速比 98

8.3.2 阿姆达尔定律和古斯塔夫森定律 98

8.3.3 并行程序的并行状况 99

8.4 并行计算部件 99

8.4.1 张量处理器 99

8.4.2 现场可编程门阵列 100

8.4.3 类脑处理器 100

8.4.4 视觉处理器 101

8.4.5 物理处理器 101

8.4.6 图形处理器 101

8.5 英伟达公司GPU简介 102

8.5.1 计算单元 102

8.5.2 GPU内存 102

8.5.3 计算能力 104

8.5.4 GPU当前状态的检测 104

8.5.5 GPU集群设置 106

8.5.6 集群管理软件 107

第9章 CUDA编程简介 108

9.1 CUDA核 110

9.2 CUDA线程与线程块 112

9.2.1 CUDA线程 112

9.2.2 CUDA线程块 114

9.3 内存结构与管理 116

9.3.1 全局内存 117

9.3.2 共享内存 118

9.3.3 锁页内存 120

9.3.4 纹理内存和表面内存 122

9.4 并行管理 122

9.4.1 非同步并行执行 122

9.4.2 流和事件 124

9.4.3 同步调用 124

9.5 CUDA流 124

9.5.1 CUDA流的创建和结束 125

9.5.2 默认CUDA流 125

9.5.3 显式同步 125

9.5.4 隐式同步 126

9.5.5 重叠行为 126

9.5.6 回调函数 127

9.5.7 CUDA流的优先级 127

9.6 CUDA事件 127

9.6.1 CUDA事件的创建与清除 128

9.6.2 CUDA事件的运行 128

9.7 多设备系统 129

9.7.1 多设备系统的初始化 129

9.7.2 多设备系统的设备计数 129

9.7.3 多设备系统的设备选择 130

9.7.4 多设备系统的CUDA流和CUDA事件 130

9.7.5 不通过统一虚拟地址的多设备系统的设备间的内存复制 131

9.7.6 通过统一虚拟地址的多设备系统的设备间的内存复制 132

9.8 动态并行 133

9.8.1 动态并行简介 133

9.8.2 动态并行的编程模型 134

9.8.3 动态并行的环境配置 135

9.8.4 动态并行的内存管理 135

9.8.5 动态并行的嵌套深度 137

9.9 统一虚拟地址空间 138

9.9.1 统一虚拟地址空间简介 138

9.9.2 统一内存编程的优点 139

9.9.3 统一内存分配 141

9.9.4 统一内存的连续性与并行性 142

9.9.5 统一内存的检验 144

9.9.6 统一内存的性能优化 145

9.10 CUDA的编译 146

9.10.1 CUDA编译工作流 147

9.11 CUDA程序实例 148

9.11.1 序列蒙特卡罗的类别分布随机数 149

9.11.2 哈尔变换 152

第10章 CUDA程序优化 154

10.1 CUDA程序优化的策略 154

10.2 指令级别的优化 154

10.2.1 算术指令吞吐量最大化 155

10.2.2 控制流指令 156

10.2.3 同步指令 157

10.3 线程和线程块级别的优化 157

10.3.1 warp简介 157

10.3.2 CUDA线程块的warp数量 158

10.3.3 CUDA占用率 159

10.3.4 线程warp对设备端(GPU端)内存读写 160

10.4 CUDA核级别的优化 164

10.4.1 优化CUDA核参数 164

10.4.2 减少内存同步 165

10.4.3 减少寄存器总量 165

10.4.4 提高指令层次的并行度 165

10.5 CUDA程序级别的优化 166

第11章 基于CUDA的MATLAB加速 168

11.1 基于CUDAKernel的MATLAB加速 168

11.2 基于MEX函数的MATLAB加速 169

11.3 多GPU编程 170

11.4 例子 172

11.4.1 基于MEX函数的多GPU矩阵相加 172

11.4.2 基于MEX函数的多GPU的LSE函数 187

第12章 总结 196

12.1 加速MATLAB编程方法的比较 196

12.2 进一步加速MATLAB 198

12.2.1 多路多核处理器的MATLAB程序加速 198

12.2.2 基于AMD公司GPU的MATLAB程序加速 199

12.2.3 基于Intel公司Xeon Phi的MATLAB程序加速 199

参考文献 201