本書介紹CPU和MATLAB的聯(lián)合編程方法,包括首先介紹了不使用GPU實現(xiàn)MATLAB加速的方法;然后介紹了MATLAB和計算統(tǒng)一設(shè)備架(CUDA)配置通過分析進行zuiyou規(guī)劃,以及利用c-mex進行CUDA編程;接著介紹了MATLAB與并行計算工具箱和運用CUDA加速函數(shù)庫;zui后給出計算機圖形實例和CUDA轉(zhuǎn)換實例。本書還通過大量的實例、圖示和代碼,深入淺出地引導(dǎo)讀者進入GPU的殿堂,易于讀者理解和掌握。通過閱讀本書,讀者無需付出很多的精力和時間,就可以學(xué)習(xí)使用GPU進行并行處理,實現(xiàn)MATLAB代碼的加速,提高工作效率,從而將更多的時間和精力用于創(chuàng)造性工作和其他事情。
本書可作為相關(guān)專業(yè)高年級本科生和研究生的教材,也可作為工程技術(shù)人員的參考書。
除了仿真和算法開發(fā),當(dāng)前越來越多的研發(fā)人員使用MATLAB進行復(fù)雜計算領(lǐng)域的產(chǎn)品部署。用戶可以借助圖像處理器分布式并行處理,提升MATLAB代碼的性能。由于提供了很多高層函數(shù),MATLAB成功成為用于快速原型設(shè)計的出色仿真工具。但面對紛繁復(fù)雜的GPU細節(jié)和背景知識,MATLAB用戶在面對GPU強大計算能力時,總是猶豫不決。本書為用戶提供了入門讀物,架起了MATLAB和GPU之間的橋梁。本書從零基礎(chǔ)開始,深入淺出,如介紹MATLAB使用CUDA所需的設(shè)置(支持Windows、Linux和Mac OX等多種操作系統(tǒng)),引導(dǎo)用戶通過一個個的專題(如CDUA庫),逐步掌握GPU編程。作者還與讀者分享了在大數(shù)據(jù)計算領(lǐng)域的MATLAB、C++和GPU的編程經(jīng)驗,展示了如何修改MATLAB代碼以更好地利用GPU的計算能力,以及如何將代碼整合到商用軟件產(chǎn)品中。全書提供了大量的代碼示例,能夠作為用戶C-MEX和CUDA代碼的模板。
前言
第1章 不使用GPU實現(xiàn)MATLAB加速
1.1 本章學(xué)習(xí)目標(biāo)
1.2 向量化
1.2.1 元素運算
1.2.2 向量/矩陣運算
1.2.3 實用技巧
1.3 預(yù)分配
1.4 for-loop
1.5 考慮稀疏矩陣形式
1.6 其他技巧
1.6.1 盡量減少循環(huán)中的文件讀/寫
1.6.2 盡量減少動態(tài)改變路徑和改變變量類型
1.6.3 在代碼易讀性和優(yōu)化間保持平衡
1.7 實例
第2章 MATLAB和CUDA配置
2.1 本章學(xué)習(xí)目標(biāo)
2.2 配置MATLAB進行c-mex編程
2.2.1 備忘錄
2.2.2 編譯器的選擇
2.3 使用c-mex實現(xiàn)“Hello,mex!”
2.4 MATLAB中的CUDA配置
2.5 實例:使用CUDA實現(xiàn)簡單的向量加法
2.6 圖像卷積實例
2.6.1 MATLAB中卷積運算
2.6.2 用編寫的c-mex計算卷積
2.6.3 在編寫的c-mex中利用CUDA計算卷積
2.6.4 簡單的時間性能分析
2.7 總結(jié)
第3章 通過耗時分析進行最優(yōu)規(guī)劃
3.1 本章學(xué)習(xí)目標(biāo)
3.2 分析MATLAB代碼查找瓶頸
3.2.1 分析器的使用方法
3.2.2 針對多核CPU更精確的耗時分析
3.3 CUDA的c-mex代碼分析
3.3.1 利用VisualStudio進行CUDA分析
3.3.2 利用NVIDIAVisual Profiler進行CUDA分析
3.4 c-mex調(diào)試器的環(huán)境設(shè)置
第4章 利用c-mex進行CUDA編程
4.1 本章學(xué)習(xí)目標(biāo)
4.2 c-mex中的存儲布局
4.2.1 按列存儲
4.2.2 按行存儲
4.2.3 c-mex中復(fù)數(shù)的存儲布局
4.3 邏輯編程模型
4.3.1 邏輯分組1
4.3.2 邏輯分組2
4.3.3 邏輯分組3
4.4 GPU簡單介紹
4.4.1 數(shù)據(jù)并行
4.4.2 流處理器
4.4.3 流處理器簇
4.4.4 線程束
4.4.5 存儲器
4.5 第一種初級方法的分析
4.5.1 優(yōu)化方案A:線程塊
4.5.2 優(yōu)化方案B
4.5.3 總結(jié)
第5章 MATLAB與并行計算工具箱
5.1 本章學(xué)習(xí)目標(biāo)
5.2 GPU處理MATLAB內(nèi)置函數(shù)
5.3 GPU處理非內(nèi)置MATLAB函數(shù)
5.4 并行任務(wù)處理
5.4.1 MATLAB worker
5.4.2 parfor
5.5 并行數(shù)據(jù)處理
5.5.1 spmd
5.5.2 分布式數(shù)組與同分布數(shù)組
5.5.3 多個GPU時的worker
5.6 無需c-mex的CUDA文件直接使用
第6章 運用CUDA加速函數(shù)庫
6.1 本章學(xué)習(xí)目標(biāo)
6.2 CUBLAS
6.2.1 CUBLAS函數(shù)
6.2.2 CUBLAS矩陣乘法
6.2.3 使用VisualProfiler進行CUBLAS分析
6.3 CUFFT
6.3.1 通過CUFFT進行二維FFT運算
6.3.2 用VisualProfiler進行CUFFT時間分析
6.4 Thrust
6.4.1 通過Thrust排序
6.4.2 采用VisualProfiler分析Thrust
第7章 計算機圖形學(xué)實例
7.1 本章學(xué)習(xí)目標(biāo)
7.2 Marching-Cubes算法
7.3 MATLAB實現(xiàn)
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實現(xiàn)算法
7.4.1 步驟1
7.4.2 步驟2
7.4.3 時間分析
7.5 用c-mex函數(shù)和GPU實現(xiàn)
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 總結(jié)
第8章 CUDA 轉(zhuǎn)換實例:3D圖像處理
8.1 本章學(xué)習(xí)目標(biāo)
8.2 基于Atlas分割方法的MATLAB代碼
8.2.1 基于Atlas分割背景知識
8.2.2 用于分割的MATLAB代碼
8.3 通過分析進行CUDA最優(yōu)設(shè)計
8.3.1 分析MATLAB代碼
8.3.2 概要結(jié)果分析和CUDA最優(yōu)設(shè)計
8.4 CUDA轉(zhuǎn)換1——正則化
8.5 CUDA轉(zhuǎn)換2——圖像配準
8.6 CUDA轉(zhuǎn)換結(jié)果
8.7 結(jié)論
附錄
附錄A 下載和安裝CUDA庫
A.1 CUDA工具箱下載
A.2 安裝
A.3 確認
附錄B 安裝NVIDIA Nsight到Visual Studio