《C++ AMP:用Visual C++加速大規模並行計算》是2014年4月人民郵電出版社出版的圖書,作者是[美]Kate Gregory、Ade Miller。
基本介紹
- 中文名:C++ AMP:用Visual C++加速大規模並行計算
- 作者:[美]Kate Gregory、Ade Miller
- 出版時間:2014年4月
- 出版社:人民郵電出版社
- 頁數:300 頁
- ISBN:9787115345035
- 定價:69 元
- 開本:16 開
- 裝幀:平裝
內容簡介,圖書目錄,
內容簡介
C++ AMP是Microsoft Visual Studio和C++程式語言的新擴展,用於幫助開發人員充分適應現在和未來的高度並行和異構計算環境。C++ AMP更易用,與C++配合得更好。《C++ AMP:用Visual C++加速大規模並行計算》的目標是幫助C++開發人員在理解C++ AMP核心概念的基礎上,掌握更高級的功能。書中包含了C++ AMP程式開發的設計思路、使用方法、真實案例及代碼示例,並提供了案例的原始碼。通過學習《C++ AMP:用Visual C++加速大規模並行計算》,讀者能理解如何在應用程式中**好地使用C++ AMP,還能利用Microsoft Visual Studio 2012提供的調試和剖析工具來解決問題、最佳化性能。
《C++ AMP:用Visual C++加速大規模並行計算》的兩位作者一位是有20多年C++實踐經驗的講師、演講人和作家,一位是微軟工作室的首席軟體架構師,他們有豐富的實踐經驗,因此,本書極具實際套用參考價值。《C++ AMP:用Visual C++加速大規模並行計算》適合專業C++異構編程人員及熟悉C++並希望從事並行編程及異構編程的開發人員。
圖書目錄
第 1章 C++ AMP概述 1
1.1 為什麼選擇GPGPU?什麼是異構計算? 1
1.1.1 性能提升史 1
1.1.2 異構平台 2
1.1.3 GPU架構 3
1.1.4 通過並行性提升性能的候選方案 4
1.2 CPU並行技術 7
1.2.1 向量化 7
1.2.2 OpenMP 9
1.2.3 並發運行時庫(ConcRT)和並行模式庫 10
1.2.4 任務並行庫 11
1.2.5 WARP-Windows高級柵格化平台 11
1.2.6 GPU並行技術 12
1.2.7 成功並行化的要求 13
1.3 C++ AMP方法 14
1.3.1 C++ AMP將GPGPU(以及更多)帶進主流 14
1.3.2 C++ AMP是C++,而不是C 14
1.3.3 C++ AMP使用了我們熟識的工具 15
1.3.4 C++ AMP是一個近乎全面的代碼庫 15
1.3.5 C++ AMP可以生成可移植的、不會過時的執行代碼 17
1.4 小結 18
第 2章 Nbody案例 19
2.1 運行示例前的準備工作 19
2.2 運行Nbody示例 20
2.3 示例的結構 24
2.4 CPU計算 25
2.4.1 數據結構 25
2.4.2 wWinMain函式 26
2.4.3 OnFrameMove回調函式 26
2.4.4 OnD3D11CreateDevice回調函式 27
2.4.5 OnGUIEvent回調函式 29
2.4.6 OnD3D11FrameRender回調函式 30
2.5 CPU NBody類 30
2.5.1 NBodySimpleInteractionEngine 30
2.5.2 NBodySimpleSingleCore 31
2.5.3 NBodySimpleMultiCore 31
2.5.4 NBodySimpleInteractionEngine::BodyBodyInteraction 32
2.6 C++ AMP計算 33
2.6.1 數據結構 33
2.6.2 CreateTasks 35
2.7 C++ AMP NBody類 37
2.7.1 NBodyAmpSimple::Integrate 37
2.7.2 BodyBodyInteraction 38
2.8 小結 40
第3章 C++ AMP基礎 41
3.1 array 41
3.2 accelerator與accelerator_view 43
3.3 index 45
3.4 extent 46
3.5 array_view 46
3.6 parallel_for_each 50
3.7 使用restrict(amp)標記的函式 52
3.8 在CPU和GPU之間複製數據 54
3.9 數學庫函式 56
3.10 小結 57
第4章 分組 58
4.1 使用分組的目的和好處 58
4.2 tile_static記憶體 60
4.3 tiled_extent 60
4.4 tiled_index 62
4.5 將簡單算法改成分組算法 63
4.5.1 使用tile_static記憶體 64
4.5.2 分組柵和同步 68
4.5.3 完成簡單版本到分組版本的修改 70
4.6 分組大小的影響 71
4.7 選擇分組大小 74
4.8 小結 75
第5章 分組NBody案例 76
5.1 分組功能對NBody的提速有多大幫助 76
5.2 N體問題的分組算法 77
5.2.1 NBodyAmpTiled類 78
5.2.2 NBodyAmpTiled::Integrate 79
5.3 使用Concurrency Visualizer 83
5.4 選擇分組大小 88
5.5 小結 92
第6章 調試 93
6.1 第 一步 93
6.1.1 選擇GPU調試還是CPU調試 94
6.1.2 參考加速器 97
6.2 GPU調試基礎 100
6.2.1 熟悉的視窗和技巧 100
6.2.2 Debug Location工具列 101
6.2.3 檢測競態 101
6.3 檢查執行緒運行狀況 103
6.3.1 執行緒標記 104
6.3.2 GPU Threads視窗 105
6.3.3 Parallel Stacks視窗 107
6.3.4 Parallel Watch視窗 108
6.3.5 對執行緒置標記、分組和過濾 110
6.4 施加更多的控制 112
6.4.1 凍結與解凍執行緒 113
6.4.2 Run Tile to Cursor 114
6.5 小結 116
第7章 最佳化 117
7.1 一種性能最佳化方法 117
7.2 分析性能 118
7.2.1 測量核心性能 118
7.2.2 使用Concurrency Visualizer 121
7.2.3 使用Concurrency Visualizer SDK 126
7.3 最佳化記憶體訪問模式 127
7.3.1 別名和parallel_for_each調用 127
7.3.2 往返GPU的高效數據複製 131
7.3.3 高效加速器全局記憶體訪問 136
7.3.4 結構體數組與數組結構體 139
7.3.5 高效的分組靜態記憶體訪問 141
7.3.6 常量記憶體 145
7.3.7 紋理記憶體 146
7.3.8 占用比和暫存器 146
7.4 最佳化計算 147
7.4.1 避免分支代碼 147
7.4.2 選擇合適的精度 151
7.4.3 數學運算的成本估算 153
7.4.4 循環展開 153
7.4.5 障柵 154
7.4.6 排隊模式 157
7.5 小結 159
第8章 性能案例——歸約 160
8.1 問題 160
8.2 示例的結構 161
8.2.1 初始化和負載 164
8.2.2 Concurrency Visualizer標記 164
8.2.3 TimeFunc( ) 165
8.2.4 開銷 167
8.3 CPU算法 167
8.3.1 串列算法 167
8.3.2 並行算法 168
8.4 C++ AMP算法 168
8.4.1 簡單版本 169
8.4.2 使用array_view的簡單版本 171
8.4.3 簡單最佳化版本 172
8.4.4 原始分組版本 174
8.4.5 共享記憶體的分組版本 176
8.4.6 使分支數降到**低的版本 182
8.4.7 消除槽位衝突版本 182
8.4.8 減少停滯執行緒版本 184
8.4.9 循環展開版本 185
8.4.10 級聯歸約版本 188
8.4.11 帶循環展開的級聯歸約版本 190
8.5 小結 191
第9章 使用多個加速器工作 192
9.1 選擇加速器 192
9.2 使用一個以上的GPU 197
9.3 在加速器之間交換數據 201
9.4 動態負載均衡 206
9.5 交織並行性 209
9.6 回退到CPU執行 210
9.7 小結 211
第 10章 Cartoonizer案例 213
10.1 前提條件 213
10.2 運行示例 214
10.3 示例的結構 217
10.4 流水線 218
10.4.1 數據結構 218
10.4.2 CartoonizerDlg::OnBnClickedButtonStart( )方法 220
10.4.3 ImagePipeline類 221
10.5 流水線卡通化階段 225
10.5.1 ImageCartoonizerAgent類 225
10.5.2 IFrameProcessor實現 228
10.6 使用多個C++ AMP加速器工作 236
10.6.1 FrameProcessorAmpMulti類 236
10.6.2 複製流水線 239
10.6.3 ImageCartoonizerAgentParallel類 239
10.7 卡通器性能 242
10.8 小結 244
第 11章 圖形互操作 245
11.1 基礎知識 245
11.1.1 norm與unorm 245
11.1.2 短向量類型 247
11.1.3 texture 251
11.1.4 writeonly_texture_view 257
11.1.5 紋理與數組 258
11.2 使用紋理和短向量 259
11.3 HLSL內建函式 262
11.4 DirectX互操作 264
11.4.1 加速器視圖與Direct3D設備互操作 264
11.4.2 數組與Direct3D設備互操作 265
11.4.3 紋理與Direct3D紋理資源互操作 266
11.4.4 使用圖形互操作庫 269
11.5 小結 271
第 12章 提示、技巧與最佳實踐 273
12.1 處理分組大小不匹配的問題 273
12.1.1 填充分組 275
12.1.2 截取分組 276
12.1.3 對比方法 280
12.2 初始化數組 280
12.3 函式對象與lambda函式 281
12.4 原子操作 282
12.5 Windows 8上其他的C++ AMP功能 285
12.6 逾時檢測與恢復 286
12.6.1 避免TDR 287
12.6.2 在Windows 8上取消TDR 288
12.6.3 檢測TDR和從TDR中恢復 288
12.7 雙精度支持 290
12.7.1 有限雙精度支持 290
12.7.2 完整雙精度支持 290
12.8 在Windows 7上調試 291
12.8.1 配置遠程計算機 291
12.8.2 配置項目 291
12.8.3 部署和調試項目 292
12.9 其他調試函式 293
12.10 部署 294
12.10.1 部署應用程式 294
12.10.2 在伺服器上運行C++ AMP 294
12.11 C++ AMP與Windows 8的Windows套用商店 296
12.12 在託管代碼中使用C++ AMP 296
12.12.1 從.NET應用程式、Windows 7 Windows套用商店或庫中調用 297
12.12.2 從C++ CLR應用程式中調用 297
12.12.3 從C++ CLR項目中調用 297
12.13 小結 298
附錄 其他資源 299