描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111625858
内容简介
本书首先介绍了并行计算工具箱和其他用于GPU计算的MATLAB工具箱,这使得应用程序可以直接移植到GPU上,而不需要大量的GPU编程知识。接下来介绍MATLAB的内置的、支持GPU的特性,包括在多核或不同的计算机系统中利用GPU的方法。*后介绍了一些进阶主题,如在MATLAB中引入CUDA代码,以优化现有的GPU应用。书中通过例子和源代码来说明每个概念,以便读者可以立即将它们应用到自己的开发中。
目 录
译者序
推荐序
前言
关于作者
第1章 引言 1
1.1 并行编程 1
1.1.1 并行计算导引 1
1.1.2 并行计算机的类别 4
1.1.3 并行计算机的内存架构 6
1.2 GPU编程 7
1.3 CUDA架构 7
1.4 为什么在MATLAB中进行GPU编程,什么情况下使用GPU编程 11
1.5 本书的组织结构 15
1.6 本章回顾 16
第2章 入门准备 17
2.1 硬件要求 17
2.2 软件要求 19
2.2.1 NVIDIA CUDA 工具包 19
2.2.2 MATLAB 26
2.3 本章回顾 29
第3章 并行计算工具箱 30
3.1 产品描述与目标 30
3.2 并行for循环(parfor) 32
3.3 单程序多数据(spmd) 43
3.4 分布式数组和共分布式数组 47
3.5 交互式并行开发(pmode) 52
3.6 GPU计算 53
3.7 集群和作业调度 53
3.8 本章回顾 57
第4章 基于MATLAB的GPU编程介绍 58
4.1 基于MATLAB的GPU编程特性 58
4.2 GPU数组 59
4.3 基于GPU的MATLAB内置函数 66
4.4 基于GPU的MATLAB逐元素操作 78
4.5 本章回顾 91
第5章 基于MATLAB工具箱的GPU编程 92
5.1 通信系统工具箱 92
5.2 图像处理工具箱 109
5.3 神经网络工具箱 112
5.4 相控阵系统工具箱 131
5.5 信号处理工具箱 136
5.6 统计和机器学习工具箱 137
5.7 本章回顾 142
第6章 多GPU并行 143
6.1 在指定GPU设备上定义和运行代码 143
6.2 多GPU运算举例 150
6.3 本章回顾 166
第7章 运行CUDA或PTX代码 168
7.1 CUDA C编程简介 168
7.2 在GPU上通过MATLAB运行CUDA或PTX代码的步骤 172
7.3 示例:向量加法 180
7.4 示例:矩阵乘法 182
7.5 本章回顾 185
第8章 包含CUDA代码的MATLAB MEX函数 186
8.1 MATLAB MEX文件简介 186
8.2 在GPU上执行MATLAB MEX函数的步骤 191
8.3 示例:向量加法 198
8.4 示例:矩阵乘法 201
8.5 本章回顾 204
第9章 CUDA加速库 205
9.1 引言 205
9.2 cuBLAS 206
9.3 cuFFT 210
9.4 cuRAND 213
9.5 cuSOLVER 216
9.6 cuSPARSE 219
9.7 NPP 223
9.8 Thrust 227
9.9 本章回顾 229
第10章 代码分析与GPU性能提升 230
10.1 MATLAB分析 230
10.2 CUDA分析 242
10.3 提升GPU性能的最佳实践 246
10.4 本章回顾 251
参考文献 252
推荐序
前言
关于作者
第1章 引言 1
1.1 并行编程 1
1.1.1 并行计算导引 1
1.1.2 并行计算机的类别 4
1.1.3 并行计算机的内存架构 6
1.2 GPU编程 7
1.3 CUDA架构 7
1.4 为什么在MATLAB中进行GPU编程,什么情况下使用GPU编程 11
1.5 本书的组织结构 15
1.6 本章回顾 16
第2章 入门准备 17
2.1 硬件要求 17
2.2 软件要求 19
2.2.1 NVIDIA CUDA 工具包 19
2.2.2 MATLAB 26
2.3 本章回顾 29
第3章 并行计算工具箱 30
3.1 产品描述与目标 30
3.2 并行for循环(parfor) 32
3.3 单程序多数据(spmd) 43
3.4 分布式数组和共分布式数组 47
3.5 交互式并行开发(pmode) 52
3.6 GPU计算 53
3.7 集群和作业调度 53
3.8 本章回顾 57
第4章 基于MATLAB的GPU编程介绍 58
4.1 基于MATLAB的GPU编程特性 58
4.2 GPU数组 59
4.3 基于GPU的MATLAB内置函数 66
4.4 基于GPU的MATLAB逐元素操作 78
4.5 本章回顾 91
第5章 基于MATLAB工具箱的GPU编程 92
5.1 通信系统工具箱 92
5.2 图像处理工具箱 109
5.3 神经网络工具箱 112
5.4 相控阵系统工具箱 131
5.5 信号处理工具箱 136
5.6 统计和机器学习工具箱 137
5.7 本章回顾 142
第6章 多GPU并行 143
6.1 在指定GPU设备上定义和运行代码 143
6.2 多GPU运算举例 150
6.3 本章回顾 166
第7章 运行CUDA或PTX代码 168
7.1 CUDA C编程简介 168
7.2 在GPU上通过MATLAB运行CUDA或PTX代码的步骤 172
7.3 示例:向量加法 180
7.4 示例:矩阵乘法 182
7.5 本章回顾 185
第8章 包含CUDA代码的MATLAB MEX函数 186
8.1 MATLAB MEX文件简介 186
8.2 在GPU上执行MATLAB MEX函数的步骤 191
8.3 示例:向量加法 198
8.4 示例:矩阵乘法 201
8.5 本章回顾 204
第9章 CUDA加速库 205
9.1 引言 205
9.2 cuBLAS 206
9.3 cuFFT 210
9.4 cuRAND 213
9.5 cuSOLVER 216
9.6 cuSPARSE 219
9.7 NPP 223
9.8 Thrust 227
9.9 本章回顾 229
第10章 代码分析与GPU性能提升 230
10.1 MATLAB分析 230
10.2 CUDA分析 242
10.3 提升GPU性能的最佳实践 246
10.4 本章回顾 251
参考文献 252
前 言
MATLAB是面向科学计算的高级语言,在很多科学领域它都作为一个快速的原型设计工具而被广泛使用。很多研究人员和公司使用MATLAB来解决计算密集型问题,并用它来加快代码运行速度。MATLAB提供了并行计算工具箱,让用户可以使用多核处理器、计算机集群和GPU来解决计算密集型问题。
随着硬件的发展,在过去的十几年里GPU已经普及开来,并广泛应用在计算密集型问题上。目前主要有两个关于GPU的编程模型—CUDA和OpenCL,其中CUDA更加成熟稳定。程序员可以通过使用CUDA C编写C/C++代码或使用PGI的CUDA Fortran编写Fortran代码等途径来使用CUDA架构。
本书采用的是另外一种使用CUDA架构的方法,适用的人群是学生、科研人员和工程师,他们使用MATLAB开发或维护应用程序,并希望在保留MATLAB优点的同时利用GPU编程实现加速。本书适用于对MATLAB编程有一定的经验但是不一定熟悉并行架构的读者,致力于帮助读者通过GPU来优化MATLAB程序,使其能够充分利用硬件优势来加速。
对于每个概念,本书都提供了示例,以便读者能够将理论运用到实际中。由于MATLAB使用者的专业背景不同,本书是以教程式学习方法为主,而不采用案例式学习方法。因此,本书的示例重点在于GPU实用编程技术,而不是特定的应用领域。所提供的例子包括图像处理、信号处理、优化、通信系统、统计学等多个领域的常见问题。
虽然有关GPU计算的MATLAB文档非常有用,但是文档对于GPU编程的具体实现问题并没有进行深入的讨论,从而使其对程序开发的指导作用非常有限。自2010年MATLAB支持GPU编程功能以来,已经开发了各种函数和工具箱,但是这些信息比较分散,本书的目的就是填补这个空白。另外,本书提供了很多来自不同科学领域的实际例子来阐述MATLAB的GPU功能。具有CUDA C/C++编程经验的读者也能够通过利用MATLAB中的CUDA C/C++代码或通过分析和优化GPU应用来获取更多的知识。
本书主要从两个方面着手进行介绍:
第一,MATLAB为GPU编程所提供的一系列功能。这一方面将分为三个部分:
支持GPU的MATLAB内置函数(依赖并行计算工具箱)。
GPU的逐元素操作(不依赖并行计算工具箱)。
除了并行计算工具箱外,支持GPU的其他MATLAB内置函数工具箱,包括通信系统工具箱、图像处理工具箱、神经网络工具箱、相控阵系统工具箱、信号处理工具箱以及统计和机器学习工具箱等。
第二,当MATLAB不能在GPU上执行现有的代码段或者用户想要使用CUDA提供的加速库时,可以将MATLAB代码与CUDA C/C++代码相链接。
本书的主要目标群体是:
学过GPU编程课程并想用MATLAB实现并行的本科生或研究生。
使用MATLAB开发或者维护应用程序并想使用GPU加速MATLAB代码的科研工作者。
希望在MATLAB中加速其计算密集型程序而无须用其他语言(如CUDA C/C++或CUDA Fortran)进行代码重写的工程师。
非常感谢MathWorks通过MathWorks Book Program提供的MATLAB学术许可,也感谢NVIDIA Academic Partnership提供的硬件支持,特别感谢Ioannis Athanasiadis提供的MATLAB工具箱的GPU功能实现与实例展示,最后感谢家人多年来对我们工作的支持与关怀。
随着硬件的发展,在过去的十几年里GPU已经普及开来,并广泛应用在计算密集型问题上。目前主要有两个关于GPU的编程模型—CUDA和OpenCL,其中CUDA更加成熟稳定。程序员可以通过使用CUDA C编写C/C++代码或使用PGI的CUDA Fortran编写Fortran代码等途径来使用CUDA架构。
本书采用的是另外一种使用CUDA架构的方法,适用的人群是学生、科研人员和工程师,他们使用MATLAB开发或维护应用程序,并希望在保留MATLAB优点的同时利用GPU编程实现加速。本书适用于对MATLAB编程有一定的经验但是不一定熟悉并行架构的读者,致力于帮助读者通过GPU来优化MATLAB程序,使其能够充分利用硬件优势来加速。
对于每个概念,本书都提供了示例,以便读者能够将理论运用到实际中。由于MATLAB使用者的专业背景不同,本书是以教程式学习方法为主,而不采用案例式学习方法。因此,本书的示例重点在于GPU实用编程技术,而不是特定的应用领域。所提供的例子包括图像处理、信号处理、优化、通信系统、统计学等多个领域的常见问题。
虽然有关GPU计算的MATLAB文档非常有用,但是文档对于GPU编程的具体实现问题并没有进行深入的讨论,从而使其对程序开发的指导作用非常有限。自2010年MATLAB支持GPU编程功能以来,已经开发了各种函数和工具箱,但是这些信息比较分散,本书的目的就是填补这个空白。另外,本书提供了很多来自不同科学领域的实际例子来阐述MATLAB的GPU功能。具有CUDA C/C++编程经验的读者也能够通过利用MATLAB中的CUDA C/C++代码或通过分析和优化GPU应用来获取更多的知识。
本书主要从两个方面着手进行介绍:
第一,MATLAB为GPU编程所提供的一系列功能。这一方面将分为三个部分:
支持GPU的MATLAB内置函数(依赖并行计算工具箱)。
GPU的逐元素操作(不依赖并行计算工具箱)。
除了并行计算工具箱外,支持GPU的其他MATLAB内置函数工具箱,包括通信系统工具箱、图像处理工具箱、神经网络工具箱、相控阵系统工具箱、信号处理工具箱以及统计和机器学习工具箱等。
第二,当MATLAB不能在GPU上执行现有的代码段或者用户想要使用CUDA提供的加速库时,可以将MATLAB代码与CUDA C/C++代码相链接。
本书的主要目标群体是:
学过GPU编程课程并想用MATLAB实现并行的本科生或研究生。
使用MATLAB开发或者维护应用程序并想使用GPU加速MATLAB代码的科研工作者。
希望在MATLAB中加速其计算密集型程序而无须用其他语言(如CUDA C/C++或CUDA Fortran)进行代码重写的工程师。
非常感谢MathWorks通过MathWorks Book Program提供的MATLAB学术许可,也感谢NVIDIA Academic Partnership提供的硬件支持,特别感谢Ioannis Athanasiadis提供的MATLAB工具箱的GPU功能实现与实例展示,最后感谢家人多年来对我们工作的支持与关怀。
Nikolaos Ploskas
Nikolaos Samaras
评论
还没有评论。