-
>
全國計算機等級考試最新真考題庫模擬考場及詳解·二級MSOffice高級應用
-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
JAVA持續交付
-
>
EXCEL最強教科書(完全版)(全彩印刷)
-
>
深度學習
高性能計算技術叢書基于CUDA的GPU并行程序開發指南 版權信息
- ISBN:9787111630616
- 條形碼:9787111630616 ; 978-7-111-63061-6
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
高性能計算技術叢書基于CUDA的GPU并行程序開發指南 本書特色
作者結合多年CUDA教學和工程實踐經驗精心撰寫。內容豐富詳實、通俗易懂,是學習CUDA編程的*佳選擇。
高性能計算技術叢書基于CUDA的GPU并行程序開發指南 內容簡介
近10年來,隨著大數據、深度學習等相關領域的發展,對計算能力的需求呈幾何級數增長。與此同時,大規模集成電路的發展卻受到功耗、散熱、晶體管尺寸等客觀因素的,難以繼續維持摩爾定律。因此,人們逐漸把目光轉向了并行系統。GPU自誕生之日起就是為計算機的圖形圖像渲染等大規模并行處理任務而服務的,因而越來越受到研究界和企業界的關注。隨著CUDA等計算架構模型的出現,這一趨勢更加明顯。CUDA(Compute Unified Device Architecture,統一計算設備架構)是Nvidia(英偉達)提出的并行計算架構,它可以結合CPU和GPU的優點,處理大規模的計算密集型任務。同時,它采用了基于C語言風格的語法,又將CPU端和GPU端的開發有效地集成到了同一環境中,對于大多數C程序員來說,使用十分方便,因而一經推出就迅速占領了GPU開發環境的市場。然而,會寫CUDA程序與會寫好的CUDA程序相差甚遠!阻礙CUDA程序獲得高性能的原因有很多。首先,GPU屬于單指令多數據類型的并行計算,因而任務切分方式很好關鍵,既要充分挖掘線程級的并行性,也要充分利用流來實現任務級的并行。其次,GPU的存儲類型和訪問模式比CPU的要豐富得多,一個成功的CUDA程序要能充分利用不同類型的存儲。再次,Nvidia GPU的架構還處于高速發展期,新一代GPU所推出的新功能也能夠有效地提升計算效率。很后,萬丈高樓平地起并不是CUDA開發的很好方式,Nvidia和一些第三方機構都開發了很多基于CUDA的支撐庫,利用好這些第三方庫可以讓你的開發過程事半功倍。Tolga Soyata結合他10多年的CUDA教學經驗以及與Nvidia多年合作的經歷精心撰寫了本書,針對上述問題進行了詳細而生動的闡述。本書很獨特的地方是它在部分中通過CPU多線程解釋并行計算,使沒有太多并行計算基礎的讀者也能毫無阻礙地進入CUDA天地。第二部分重點介紹了基于CUDA的GPU大規模并行程序的開發與實現。與現有的同類書籍相比,本書的特點是在多個Nvidia GPU平臺(Fermi、Kepler、Maxwell和Pascal)上并行化,并進行性能分析,幫助讀者理解GPU架構對程序性能的影響。第三部分介紹了一些重要的CUDA庫,比如cuBLAS、cuFFT、NPP和Thrust(2章);OpenCL編程語言(3章);使用其他編程語言和API庫進行GPU編程,包括Python、Metal、Swift、OpenGL、OpenGL ES、OpenCV和微軟HLSL(4章);當下流行的深度學習庫cuDNN(5章)。本書通過生動的類比、大量的代碼和詳細的解釋向讀者循序漸進地介紹了基于CUDA編程開發的GPU并行計算方法,內容豐富翔實,適合所有具備基本的C語言知識的程序員閱讀,也適合作為GPU并行計算相關課程的教材。
高性能計算技術叢書基于CUDA的GPU并行程序開發指南 目錄
前言
關于作者
**部分 理解CPU的并行性
第1章 CPU并行編程概述 2
1.1 并行編程的演化 2
1.2 核心越多,并行性越高 3
1.3 核心與線程 4
1.3.1 并行化更多的是線程還是核心 5
1.3.2 核心資源共享的影響 6
1.3.3 內存資源共享的影響 6
1.4 **個串行程序 7
1.4.1 理解數據傳輸速度 8
1.4.2 imflip.c中的main( )函數 9
1.4.3 垂直翻轉行:FlipImageV( ) 10
1.4.4 水平翻轉列:FlipImageH( ) 11
1.5 程序的編輯、編譯、運行 12
1.5.1 選擇編輯器和編譯器 12
1.5.2 在Windows 7、8、10平臺上開發 12
1.5.3 在Mac平臺上開發 14
1.5.4 在Unix平臺上開發 14
1.6 Unix速成 15
1.6.1 與目錄相關的Unix命令 15
1.6.2 與文件相關的Unix命令 16
1.7 調試程序 19
1.7.1 gdb 19
1.7.2 古典調試方法 20
1.7.3 valgrind 22
1.8 **個串行程序的性能 22
1.8.1 可以估計執行時間嗎 23
1.8.2 代碼執行時OS在做什么 23
1.8.3 如何并行化 24
1.8.4 關于資源的思考 25
第2章 開發**個CPU并行程序 26
2.1 **個并行程序 26
2.1.1 imflipP.c中的main( )函數 27
2.1.2 運行時間 28
2.1.3 imflipP.c中main( )函數代碼的劃分 28
2.1.4 線程初始化 30
2.1.5 創建線程 31
2.1.6 線程啟動/執行 32
2.1.7 線程終止(合并) 33
2.1.8 線程任務和數據劃分 34
2.2 位圖文件 35
2.2.1 BMP是一種無損/不壓縮的文件格式 35
2.2.2 BMP圖像文件格式 36
2.2.3 頭文件ImageStuff.h 37
2.2.4 ImageStuff.c中的圖像操作函數 38
2.3 執行線程任務 40
2.3.1 啟動線程 41
2.3.2 多線程垂直翻轉函數MTFlipV( ) 43
2.3.3 FlipImageV( )和MTFlipV( )的比較 46
2.3.4 多線程水平翻轉函數MTFlipH(?) 47
2.4 多線程代碼的測試/計時 49
第3章 改進**個CPU并行程序 51
3.1 程序員對性能的影響 51
3.2 CPU對性能的影響 52
3.2.1 按序核心與亂序核心 53
3.2.2 瘦線程與胖線程 55
3.3 imf?lipP的性能 55
3.4 操作系統對性能的影響 56
3.4.1 創建線程 57
3.4.2 線程啟動和執行 57
3.4.3 線程狀態 58
3.4.4 將軟件線程映射到硬件線程 59
3.4.5 程序性能與啟動的線程 60
3.5 改進imf?lipP 61
3.5.1 分析MTFlipH( )中的內存訪問模式 62
3.5.2 MTFlipH( )的多線程內存訪問 63
3.5.3 DRAM訪問的規則 64
3.6 imf?lipPM:遵循DRAM的規則 65
3.6.1 imflipP的混亂內存訪問模式 65
3.6.2 改進imflipP的內存訪問模式 65
3.6.3 MTFlipHM( ):內存友好的MTFlipH( ) 66
3.6.4 MTFlipVM( ):內存友好的MTFlipV( ) 69
3.7 imflipPM.C的性能 69
3.7.1 imflipP.c和imflipPM.c的性能比較 70
3.7.2 速度提升:MTFlipV( )與MTFlipVM( ) 71
3.7.3 速度提升:MTFlipH( )與MTFlipHM( ) 71
3.7.4 理解加速:MTFlipH( )與MTFlipHM( ) 71
3.8 進程內存映像 72
3.9 英特爾MIC架構:Xeon Phi 74
3.10 GPU是怎樣的 75
3.11 本章小結 76
第4章 理解核心和內存 77
4.1 曾經的英特爾 77
4.2 CPU和內存制造商 78
4.3 動態存儲器與靜態存儲器 79
4.3.1 靜態隨機存取存儲器(SRAM) 79
4.3.2 動態隨機存取存儲器(DRAM) 79
4.3.3 DRAM接口標準 79
4.3.4 DRAM對程序性能的影響 80
4.3.5 SRAM對程序性能的影響 81
4.4 圖像旋轉程序:imrotate.c 81
4.4.1 imrotate.c的說明 82
4.4.2 imrotate.c:參數限制和簡化 82
4.4.3 imrotate.c:實現原理 83
4.5 imrotate的性能 87
4.5.1 線程效率的定性分析 87
4.5.2 定量分析:定義線程效率 87
4.6 計算機的體系結構 89
4.6.1 核心、L1$和L2$ 89
4.6.2 核心內部資源 90
4.6.3 共享L3高速緩存(L3 $) 91
4.6.4 內存控制器 92
4.6.5 主存 92
4.6.6 隊列、非核心和I/O 93
4.7 imrotateMC:讓imrotate更高效 94
4.7.1 Rotate2( ):平方根和浮點除法有多差 96
4.7.2 Rotate3( )和Rotate4( ):sin( )和cos( )有多差 97
4.7.3 Rotate5( ):整數除法/乘法有多差 98
4.7.4 Rotate6( ):合并計算 100
4.7.5 Rotate7( ):合并更多計算 100
4.7.6 imrotateMC的總體性能 101
4.8 本章小結 103
第5章 線程管理和同步 104
5.1 邊緣檢測程序:imedge.c 104
5.1.1 imedge.c的說明 105
5.1.2 imedge.c:參數限制和簡化 106
5.1.3 imedge.c:實現原理 106
5.2 imedge.c:實現 108
5.2.1 初始化和時間戳 109
5.2.2 不同圖像表示的初始化函數 110
5.2.3 啟動和終止線程 111
5.2.4 高斯濾波 112
5.2.5 Sobel 113
5.2.6 閾值過濾 114
5.3 imedge的性能 115
5.4 imedgeMC:讓imedge更高效 116
5.4.1 利用預計算降低帶寬 116
5.4.2 存儲預計算的像素值 117
5.4.3 預計算像素值 118
5.4.4 讀取圖像并預計算像素值 119
5.4.5 PrGaussianFilter 1
高性能計算技術叢書基于CUDA的GPU并行程序開發指南 作者簡介
Tolga Soyata于1988年在伊斯坦布爾技術大學電子與通信工程系獲得學士學位,1992年在美國馬里蘭州巴爾的摩的約翰·霍普金斯大學電氣與計算機工程系(ECE)獲得碩士學位,2000年在羅切斯特大學電氣與計算機工程系獲得博士學位。2000年至2015年間,他成立了一家IT外包和復印機銷售/服務公司。在運營公司的同時,他重返學術界,在羅切斯特大學電氣與計算機工程系擔任研究員。之后,他成為助理教授,并一直擔任電氣與計算機工程系教職研究人員至2016年。在羅切斯特大學電氣與計算機工程系任職期間,他指導了三名博士研究生。其中兩人在他的指導下獲得博士學位,另一位在他2016年加入紐約州立大學奧爾巴尼分校擔任電氣與計算機工程系副教授時留在了羅切斯特大學。Soyata的教學課程包括大規模集成電路、模擬電路以及使用FPGA和GPU進行并行編程。他的研究興趣包括信息物理系統、數字健康和高性能醫療移動云計算系統等。
Tolga Soyata從2009年開始從事GPU編程的教學,當時他聯系Nvidia將羅切斯特大學認證為CUDA教學中心(CTC)。在Nvidia將羅切斯特大學認證為教學中心后,他成為主要負責人。之后,Nvidia還將羅切斯特大學認證為CUDA研究中心(CRC),他也成為項目負責人。Tolga Soyata在羅切斯特大學擔任這些計劃的負責人直到他于2016年加入紐約州立大學奧爾巴尼分校。這些計劃后來被Nvidia命名為GPU教育中心和GPU研究中心。在羅切斯特大學期間,他講授了5年GPU編程和高級GPU項目開發課程,這些課程同時被列入電氣與計算機工程系以及計算機科學與技術系的課程體系。自2016年加入紐約州立大學奧爾巴尼分校以來,他一直在講授類似的課程。本書是他在兩所大學講授GPU課程的經驗結晶。
- >
龍榆生:詞曲概論/大家小書
- >
苦雨齋序跋文-周作人自編集
- >
小考拉的故事-套裝共3冊
- >
史學評論
- >
回憶愛瑪儂
- >
山海經
- >
伯納黛特,你要去哪(2021新版)
- >
推拿