编辑推荐
适读人群:工程技术人员、高等院校学生
除了仿真和算法开发,当前越来越多的研发人员使用MATLAB进行复杂计算领域的产品部署。用户可以借助图像处理器分布式并行处理,提升MATLAB代码的性能。由于提供了很多高层函数,MATLAB成功成为用于快速原型设计的出色仿真工具。但面对纷繁复杂的GPU细节和背景知识,MATLAB用户在面对GPU强大计算能力时,总是犹豫不决。《GPU与MATLAB混合编程》为用户提供了入门读物,架起了MATLAB和GPU之间的桥梁。《GPU与MATLAB混合编程》从零基础开始,深入浅出,如介绍MATLAB使用CUDA所需的设置(支持Windows、Linux和MacOX等多种操作系统),引导用户通过一个个的专题(如CDUA库),逐步掌握GPU编程。作者还与读者分享了在大数据计算领域的MATLAB、C++和GPU的编程经验,展示了如何修改MATLAB代码以更好地利用GPU的计算能力,以及如何将代码整合到商用软件产品中。《GPU与MATLAB混合编程》提供了大量的代码示例,能够作为用户C-MEX和CUDA代码的模板。
内容简介
《GPU与MATLAB混合编程》介绍CPU和MATLAB的联合编程方法,包括首先介绍了不使用GPU实现MATLAB加速的方法;然后介绍了MATLAB和计算统一设备架(CUDA)配置通过分析进行zuiyou规划,以及利用c-mex进行CUDA编程;接着介绍了MATLAB与并行计算工具箱和运用CUDA加速函数库;zui后给出计算机图形实例和CUDA转换实例。《GPU与MATLAB混合编程》还通过大量的实例、图示和代码,深入浅出地引导读者进入GPU的殿堂,易于读者理解和掌握。通过阅读《GPU与MATLAB混合编程》,读者无需付出很多的精力和时间,就可以学习使用GPU进行并行处理,实现MATLAB代码的加速,提高工作效率,从而将更多的时间和精力用于创造性工作和其他事情。
《GPU与MATLAB混合编程》可作为相关专业高年级本科生和研究生的教材,也可作为工程技术人员的参考书。
作者简介
JungW.Suh,美国KLA-Tencor(科天)公司的高级算法工程师和研究科学家。2007年因其在3D医学图像处理领域的工作,从弗吉尼亚理工大学获得博士学位。他参与了三星电子在MPEG-4和数字移动广播(DMB)系统的研发工作。在任职KLA-Tencor公司前,他还担任HeartFlow公司高级科学家。研究领域包括生物图像处理、模式识别、机器学习和图像/视频压缩。发表30余篇期刊和会议论文,并拥有6项专利。
YoungminKim,美国LifeTechnologies(生命科技)公司的高级软件工程师,从事实时图像获取和高吞吐量图像分析程序开发工作。他之前的工作还包括设计和开发自动显微镜和用于实时分析的集成成像算法软件。先后从伊利诺伊大学(厄巴纳-香槟校区)电子工程专业获得学士和硕士学位。在加入LifeTechnologies公司前,他还在三星公司开发了3D图像软件,并在一家创业公司领导软件团队。
目录
前言
第1章不使用GPU实现MATLAB加速
1.1本章学习目标
1.2向量化
1.2.1元素运算
1.2.2向量/矩阵运算
1.2.3实用技巧
1.3预分配
1.4for-loop
1.5考虑稀疏矩阵形式
1.6其他技巧
1.6.1尽量减少循环中的文件读/写
1.6.2尽量减少动态改变路径和改变变量类型
1.6.3在代码易读性和优化间保持平衡
1.7实例
第2章MATLAB和CUDA配置
2.1本章学习目标
2.2配置MATLAB进行c-mex编程
2.2.1备忘录
2.2.2编译器的选择
2.3使用c-mex实现“Hello,mex!”
2.4MATLAB中的CUDA配置
2.5实例:使用CUDA实现简单的向量加法
2.6图像卷积实例
2.6.1MATLAB中卷积运算
2.6.2用编写的c-mex计算卷积
2.6.3在编写的c-mex中利用CUDA计算卷积
2.6.4简单的时间性能分析
2.7总结
第3章通过耗时分析进行最优规划
3.1本章学习目标
3.2分析MATLAB代码查找瓶颈
3.2.1分析器的使用方法
3.2.2针对多核CPU更精确的耗时分析
3.3CUDA的c-mex代码分析
3.3.1利用VisualStudio进行CUDA分析
3.3.2利用NVIDIAVisualProfiler进行CUDA分析
3.4c-mex调试器的环境设置
第4章利用c-mex进行CUDA编程
4.1本章学习目标
4.2c-mex中的存储布局
4.2.1按列存储
4.2.2按行存储
4.2.3c-mex中复数的存储布局
4.3逻辑编程模型
4.3.1逻辑分组1
4.3.2逻辑分组2
4.3.3逻辑分组3
4.4GPU简单介绍
4.4.1数据并行
4.4.2流处理器
4.4.3流处理器簇
4.4.4线程束
4.4.5存储器
4.5第一种初级方法的分析
4.5.1优化方案A:线程块
4.5.2优化方案B
4.5.3总结
第5章MATLAB与并行计算工具箱
5.1本章学习目标
5.2GPU处理MATLAB内置函数
5.3GPU处理非内置MATLAB函数
5.4并行任务处理
5.4.1MATLABworker
5.4.2parfor
5.5并行数据处理
5.5.1spmd
5.5.2分布式数组与同分布数组
5.5.3多个GPU时的worker
5.6无需c-mex的CUDA文件直接使用
第6章运用CUDA加速函数库
6.1本章学习目标
6.2CUBLAS
6.2.1CUBLAS函数
6.2.2CUBLAS矩阵乘法
6.2.3使用VisualProfiler进行CUBLAS分析
6.3CUFFT
6.3.1通过CUFFT进行二维FFT运算
6.3.2用VisualProfiler进行CUFFT时间分析
6.4Thrust
6.4.1通过Thrust排序
6.4.2采用VisualProfiler分析Thrust
第7章计算机图形学实例
7.1本章学习目标
7.2Marching-Cubes算法
7.3MATLAB实现
7.3.1步骤1
7.3.2步骤2
7.3.3步骤3
7.3.4步骤4
7.3.5步骤5
7.3.6步骤6
7.3.7步骤7
7.3.8步骤8
7.3.9步骤9
7.3.10时间分析
7.4采用CUDA和c-mex实现算法
7.4.1步骤1
7.4.2步骤2
7.4.3时间分析
7.5用c-mex函数和GPU实现
7.5.1步骤1
7.5.2步骤2
7.5.3步骤3
7.5.4步骤4
7.5.5步骤5
7.5.6时间分析
7.6总结
第8章CUDA转换实例:3D图像处理
8.1本章学习目标
8.2基于Atlas分割方法的MATLAB代码
8.2.1基于Atlas分割背景知识
8.2.2用于分割的MATLAB代码
8.3通过分析进行CUDA最优设计
8.3.1分析MATLAB代码
8.3.2概要结果分析和CUDA最优设计
8.4CUDA转换1——正则化
8.5CUDA转换2——图像配准
8.6CUDA转换结果
8.7结论
附录
附录A下载和安装CUDA库
A.1CUDA工具箱下载
A.2安装
A.3确认
附录B安装NVIDIANsight到VisualStudio
前言/序言
MATLAB是广泛应用于快速原型设计和算法开发的仿真工具,功能强大,简单易用。许多实验室和研究机构都迫切地希望MATLAB代码能够更快地运行,以满足大运算量项目的需要。由于MATLAB采用向量/矩阵的数据形式,适合于并行处理,因此采用图形处理单元(GraphicsProcessingUnit,GPU)对提升MATLAB运行速度大有裨益。
《GPU与MATLAB混合编程》主要面向工程、科学、技术等专业领域,需要利用MATLAB进行海量数据处理的师生和科研人员。MATLAB用户可能来自各个领域,不一定都具有丰富的程序开发经验。对于那些没有程序开发基础的读者,利用GPU加速MATLAB需要对他们的算法进行移植,会引入一些不必要的麻烦,甚至还需要设定环境。《GPU与MATLAB混合编程》面向具有一定或较多MATLAB编程经验,但对C语言和计算机并行架构不是很了解的读者,以帮助读者将精力集中在他们的研究工作上,从而避免因使用GPU和CUDA而对MATLAB程序而非算法本身进行大量调整。
作为入门读物,《GPU与MATLAB混合编程》从基础知识开始,首先介绍如何设置MATLAB运行CUDA(在Windows和MacOSX),创建c-mex和m文件;接着引导读者进入专业级别的主题,如第三方CUDA库。《GPU与MATLAB混合编程》还提供了许多修改用户MATLAB代码的实用方法,以更好地利用GPU强大的计算能力。
《GPU与MATLAB混合编程》将指导读者使用NVIDIA的GPU显著提升MATLAB的运行速度。NVIDIA的CUDA作为一种并行计算架构,最早用于计算机游戏设计,但由于其高效的大规模计算能力,在基础科学和工程领域也声誉日隆。通过《GPU与MATLAB混合编程》,读者无需付出很多的精力和时间,就可以利用GPU的并行处理和丰富的CUDA科学库,实现MATLAB代码的加速,从而提升读者的科研工作水平。
通过阅读《GPU与MATLAB混合编程》,读者很快就能体会到MATLAB代码运行速度惊人的提升,而且通过使用开源CUDA资源,可以更好地进行科学研究。支持Windows和Mac操作系统也是《GPU与MATLAB混合编程》的特点之一。