首页>参考读物>计算机科学与技术>计算机科学理论与基础知识

基于MATLAB的GPU编程
作者 : [希腊]尼古劳斯·普洛斯卡斯(Nikolaos Ploskas) 尼古劳斯·萨马拉斯(Nikolaos Samaras)著
译者 : 张帆 倪军 李征 译
出版日期 : 2019-05-21
ISBN : 978-7-111-62585-8
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 264
开本 : 16
原书名 : GPU Programming in MATLAB
原出版社: Elsevier (Singapore) Pte Ltd
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书首先介绍了并行计算工具箱和其他用于GPU计算的MATLAB工具箱,这使得应用程序可以直接移植到GPU上,而不需要大量的GPU编程知识。接下来介绍MATLAB的内置的、支持GPU的特性,包括在多核或不同的计算机系统中利用GPU的方法。最后介绍了一些进阶主题,如在MATLAB中引入CUDA代码,以优化现有的GPU应用。书中通过例子和源代码来说明每个概念,以便读者可以立即将它们应用到自己的开发中。

图书特色

快速学习使用GPU加速MATLAB代码的全面指南
囊括各类工具箱和函数,以及不同领域的实践案例
灵活调用CUDA加速库,无须用其他语言重写代码
GPU Programming in MATLAB
基于MATLAB的
GPU编程
[ 希 ]   尼古劳斯·普洛斯卡斯(Nikolaos Ploskas)
             尼古劳斯·萨马拉斯(Nikolaos Samaras)     著
张帆 倪军 李征  译

图书前言

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功能实现与实例展示,最后感谢家人多年来对我们工作的支持与关怀。

Nikolaos Ploskas
Nikolaos Samaras

上架指导

计算机\并行计算

封底文字

“随着GPU编程的普及,这本专业、详细且可读性强的书籍将备受欢迎,成为任何一个想利用GPU将自己的MATLAB程序进行并行化的程序员的必读之作。”
——Yair Altman,《Accelerating MATLAB Performance》的作者


本书面向的读者群主要是想在保留MATLAB优点的同时利用GPU编程实现加速的科研人员、工程师或学生。书中对各种工具箱和函数做了清晰的梳理,不仅是对当前MATLAB文档的有益补充,而且提供了大量来自不同领域的应用实例。

本书首先介绍支持GPU计算的MATLAB工具箱,这使得程序可以直接在GPU上运行,而不需要太多关于GPU编程的知识。接着介绍了MATLAB内置的GPU计算功能,包括在多核或不同计算机系统中利用GPU的方法。最后介绍了一些高阶主题,如在MATLAB中引入CUDA代码,以优化现有的GPU应用。

本书特点
·介绍支持GPU的MATLAB工具箱及函数,如并行计算工具箱、通信系统工具箱、神经网络工具箱以及统计和机器学习工具箱等。
·讲解如何在不使用另一门编程语言(如CUDA C/C++或CUDA Fortran)的情况下加速计算密集型的MATLAB应用。
·涵盖图像处理、信号处理、统计学等不同领域的实例,帮助读者快速理解GPU编程的关键概念。

译者序

自2007年英伟达公司推出CUDA以来,众核并行的GPU通用计算已经发展了12年,并成功应用于各个自然科学领域。相较于20世纪90年代兴起的第一代GPU通用计算(GPGPU),即利用图形描述语言(如OpenGL)控制GPU硬件进行通用数值计算,本次基于CUDA的GPGPU在影响范围、应用范围、参与人群等方面取得了阶跃式的进展。究其原因,一方面是硬件的发展,使得GPU并行的优势更加凸显;另一方面是软件的易用,使得基于C、Fortran等高级语言的CUDA架构对于算法的实现更加直观、便捷。
从我自己多年的学习和教学经验来看,GPU编程还存在“入门容易、进阶难”的问题。和其他高级语言相比,CUDA C不仅要求程序员掌握众核并行的语法、算法,将常规的“串行编程思路”转换为“众核并行编程思路”,还要求对于GPU硬件工作机制有深入理解,以满足不断优化的需求。这对于非计算机背景的程序员、科研工作者和学生来说,无疑是雪上加霜。
MATLAB由于数据处理能力强大、编程友好、集成函数功能多等优点在工科领域得到广泛应用,特别是在算法研究、系统原型设计等初期设计阶段成为编程工具的首选。但是MATLAB对于大数据的处理还存在计算效率低的问题,虽然可以通过转化为C语言或者使用内置的并行语句来解决,但仍旧杯水车薪。尽管C语言改写的方式能够取得更好的效率,但是高集成度的MATLAB函数使得改写工作成为一项“浩大”的工程。
MATLAB的GPU计算功能无疑为算法设计人员打开了一扇窗,无论内置函数或者MEX文件等方式均能快速地将现有代码分发至GPU上运行,从而达到一个数量级以上的运行效率提升。因而,对于广大使用MATLAB的读者来说,经过简单的语法学习就能够节省大量的程序运行时间,从而缩短研究的迭代周期和开发的研制周期。本书所提供的代码能够让读者更加方便、快捷地学习到MATLAB的GPU编程方法,并将其应用到自己的工作中。
本书的翻译工作由张帆、倪军、李征负责,参与其中的还有吴优、王云冲、唐嘉昕、赵晨茜等硕士研究生。由于译者的时间和水平有限,翻译中难免存在错误和疏漏,希望得到各位同行和专家的批评指正。

张帆
2019年1月于北京

推荐序

本书是对一系列专业MATLAB参考书的重要补充。很多MATLAB参考书通常将重点放在特定的工程领域,而本书主要针对那些熟悉MATLAB并希望使用多核处理器和GPU并行来提高程序运行速度的用户。近年来,并行计算技术虽然已被超级计算机广泛应用,但是对于普通MATLAB用户来说,还存在一定的技术门槛。现代计算机普遍安装了多核CPU和功能强大的GPU,计算密集型MATLAB程序如果无法使用这些资源进行并行加速,将是一种严重的计算资源浪费。然而,鲜有资料能够详细介绍如何正确地将MATLAB程序运行在GPU上。此外,虽然MATLAB帮助文档中有对并行计算的初步介绍,但是对于专业的并行开发来说还是远远不够的。我相信本书能够填补这一空白。本书详细介绍了MATLAB中的GPU编程,从概述开始讨论了如何使用方便的gpuArray,详细介绍了如何编译CUDA内核并将其集成到MEX文件中,读者可以从由浅入深、循序渐进的讲解中获取知识。本书介绍了很多实例,包括对内存或带宽等实际限制的讨论,使不同工程学科的用户都能够有所收获。针对难以理解和解决的MATLAB错误信息,本书也提供了相应的解决方案。虽然本书没有详细介绍MATLAB性能调优的更多细节,但是对于MATLAB的GPU编程的讨论是非常详细且新颖的。随着GPU编程的普及,这本专业、详细且可读性强的书籍将备受欢迎,成为任何一个想利用GPU将自己的MATLAB程序进行并行化的程序员的必读之作。

Yair Altman
《Accelerating MATLAB Performance》的作者,http://UndocumentedMatlab.com

图书目录

译者序
推荐序
前言
关于作者
第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

教学资源推荐
作者: [美] 贝赫鲁兹·佛罗赞(Behrouz Forouzan) 著
作者: 田富鹏
作者: 刘艺 蔡敏 等编著
作者: 郭纯一 韩英杰 编著
参考读物推荐
作者: [美]戴维·埃文斯(David Evans),弗拉基米尔·科列斯尼科夫( Vladimir Kolesnikov),迈克·罗苏莱克(Mike Rosulek)著
作者: 华诚科技 编著
作者: [美]布莱恩·W. 柯尼汉(Brian W. Kernighan) 著