OpenACC高性能並行編程

OpenACC高性能並行編程

《openacc高性能並行編程:概念與策略》是2019年機械工業出版社出版的圖書,作者是蘇妮塔·錢德拉塞克蘭。本書是介紹大規模並行編程OpenACC的綜合實踐性書籍之一。書中前3章介紹了OpenACC背後的概念和OpenACC開發工具;第4章至第7章帶你了解第1個真實世界的OpenACC程式,並揭示OpenACC程式編譯背後的魔力,從而引入更多概念;第8章至第10章涵蓋高級主題,例如OpenACC的替代方案、底層設備互動、多設備編程和任務並行性;第11章和第12章探討了OpenACC實現潛在新語言特性的各種研究領域。

基本介紹

  • 中文名:openacc高性能並行編程:概念與策略 
  • 作者:蘇妮塔·錢德拉塞克蘭
  • 出版社:機械工業出版社
  • ISBN:9787111623236
內容簡介,圖書目錄,

內容簡介

歡迎閱讀本書。這本書匯聚了來自學術界、公共研究和工業界的19位資深作者的前沿觀點。作者的共同目標是彙編一系列章節,對使用OpenACC進行並行編程做系統介紹。我們設計這些章節是為了提供借鑑,以便在課堂中使用。因此,親愛的讀者,你也許是一名報名參加這個可能令人生畏的並行編程課程學習的學生。請放心,這門課你選對了。計算機設備不再屬於非並行類型,並行編程比以往更加重要。
本書的組織結構
我們的目標是循序漸進地介紹OpenACC是如何表達並行性的,以避免讓你承受過多的學習壓力。以下是本書的組織方式。
前3章介紹了OpenACC背後的概念和OpenACC開發工具。
第4~7章帶你了解第一個真實世界的OpenACC程式,並揭示OpenACC程式編譯背後的魔力,從而引入更多概念。
第8~10章涵蓋高級主題,例如OpenACC的替代方案、底層設備互動、多設備編程和任務並行性。
第11章和第12章探討了OpenACC實現潛在新語言特性的各種研究領域。

圖書目錄

讚譽
推薦序
譯者序
前言
致謝
貢獻者簡介
譯者簡介
第1章 OpenACC概述 1
1.1 OpenACC語法 2
1.1.1 導語 3
1.1.2 子語 3
1.1.3 API例程與環境變數 4
1.2 計算構件 4
1.2.1 kernels 5
1.2.2 parallel 6
1.2.3 loop 7
1.2.4 routine 7
1.3 數據環境 9
1.3.1 數據導語 9
1.3.2 數據子語 10
1.3.3 cache導語 11
1.3.4 部分數據傳輸 11
1.4 總結 12
1.5 練習 12
第2章 循環級並行性 14
2.1 kernels循環與parallel循環的比較 15
2.2 並行性的三個級別 18
2.2.1 gang、worker與vector子語 18
2.2.2 將並行性映射到硬體 19
2.3 其他loop構件 20
2.3.1 循環摺疊 20
2.3.2 independent子語 21
2.3.3 seq與auto子語 22
2.3.4 reduction子語 23
2.4 總結 25
2.5 練習 26
第3章 OpenACC編程工具 27
3.1 架構的通用特性 27
3.2 編譯OpenACC代碼 28
3.3 OpenACC應用程式的性能分析 30
3.3.1 性能分析層次和術語 30
3.3.2 性能數據獲取 31
3.3.3 性能數據記錄和顯示 32
3.3.4 OpenACC性能分析接口 32
3.3.5 支持OpenACC的性能工具 33
3.3.6 NVIDIA性能分析工具 34
3.3.7 針對混合應用程式的Score-P工具基礎架構 35
3.3.8 TAU性能系統 40
3.4 識別OpenACC程式中的bug 42
3.5 總結 44
3.6 練習 45
第4章 使用OpenACC編寫第一個程式 48
4.1 案例研究 48
4.1.1 串列代碼 49
4.1.2 編譯代碼 55
4.2 創建一個原生的並行版本 56
4.2.1 找到熱點 56
4.2.2 使用kernels安全嗎 56
4.2.3 OpenACC實現 56
4.3 OpenACC程式的性能 59
4.4 最佳化的並行版本 60
4.4.1 減少數據移動 61
4.4.2 特別聰明的小改動 62
4.4.3 最終的結果 63
4.5 總結 65
4.6 練習 66
第5章 編譯OpenACC 67
5.1 並行性的挑戰 68
5.1.1 並行硬體 68
5.1.2 映射循環 69
5.1.3 記憶體層次結構 71
5.1.4 歸約 72
5.1.5 應對並行性的OpenACC 72
5.2 重建編譯器 73
5.2.1 編譯器可以做什麼 74
5.2.2 編譯器不能做什麼 75
5.3 編譯OpenACC 76
5.3.1 代碼預備工作 77
5.3.2 調度 77
5.3.3 串列代碼 78
5.3.4 用戶錯誤 79
5.4 總結 80
5.5 練習 81
第6章 最佳編程實踐 83
6.1 通用準則 84
6.1.1 最大化設備計算 84
6.1.2 最佳化數據局部性 85
6.2 最大化設備計算 86
6.2.1 原子操作 86
6.2.2 kernels構件與parallel構件 87
6.2.3 運行時調優和if子語 88
6.3 最佳化數據局部性 89
6.3.1 最少化數據傳輸 89
6.3.2 數據復用和present子語 90
6.3.3 非結構化數據生命周期 91
6.3.4 指定數組形狀 92
6.4 典型示例 92
6.4.1 背景知識:熱力學報表 92
6.4.2 基線CPU版本的實現 93
6.4.3 性能分析 93
6.4.4 使用OpenACC進行加速 94
6.4.5 最佳化數據局部性 96
6.4.6 性能研究 97
6.5 總結 98
6.6 練習 98
第7章 OpenACC與性能可移植性 99
7.1 挑戰 99
7.2 目標架構 100
7.2.1 特定平台的編譯 101
7.2.2 x86_64多核與NVIDIA 101
7.3 OpenACC性能可移植性 101
7.3.1 OpenACC記憶體模型 102
7.3.2 記憶體架構 102
7.3.3 代碼生成 102
7.3.4 性能可移植性的數據布局 103
7.4 代碼重構以實現性能可移植性 103
7.4.1 HACCmk 103
7.4.2 面向多種架構 105
7.4.3 openACC在NVIDIA K20x GPU上的套用 106
7.4.4 openACC在AMD Bulldozer多核上的套用 107
7.5 總結 108
7.6 練習 109
第8章 並行編程的其他方式 111
8.1 編程模型 111
8.1.1 OpenACC 113
8.1.2 OpenMP 113
8.1.3 CUDA 114
8.1.4 OpenCL 114
8.1.5 C++ AMP 115
8.1.6 Kokkos 115
8.1.7 RAJA 116
8.1.8 執行緒構建模組 116
8.1.9 C++17 116
8.1.10 Fortran 2008 117
8.2 編程模型組件 117
8.2.1 並行循環 118
8.2.2 並行歸約 119
8.2.3 緊密嵌套循環 121
8.2.4 分層並行性(非緊密嵌套循環) 122
8.2.5 任務並行性 124
8.2.6 數據分配 125
8.2.7 數據傳輸 126
8.3 案例研究 127
8.3.1 串列實現 128
8.3.2 OpenACC實現 129
8.3.3 OpenMP實現 130
8.3.4 CUDA實現 131
8.3.5 Kokkos實現 134
8.3.6 TBB實現 136
8.3.7 一些性能數字 138
8.4 總結 140
8.5 練習 140
第9章 OpenACC與互操作性 142
9.1 在OpenACC中調用原生設備代碼 142
9.1.1 示例:使用DFT進行圖像濾波 143
9.1.2 host_data導語及use_device子語 145
9.1.3 目標平台相關API例程 147
9.2 在原生設備代碼中調用OpenACC 149
9.3 OpenACC互操作性高級話題 149
9.3.1 acc_map_data 149
9.3.2 在OpenACC kernel中調用CUDA設備例程 151
9.4 總結 152
9.5 練習 152
第10章 OpenACC高級特性 153
10.1 異步操作 153
10.1.1 OpenACC異步編程 155
10.1.2 軟體流水線 160
10.2 多設備編程 168
10.2.1 多設備流水線 169
10.2.2 OpenACC與MPI 172
10.3 總結 176
10.4 練習 176
第11章 使用OpenACC的創新研究思路,第1部分 177
11.1 神威OpenACC 177
11.1.1 SW26010眾核處理器 178
11.1.2 神威太湖之光中的記憶體模型 178
11.1.3 執行模型 180
11.1.4 數據管理 181
11.1.5 總結 183
11.2 針對加速器的嵌套循環編譯器轉換 184
11.2.1 OpenUH編譯器基礎架構 185
11.2.2 循環調度轉換 187
11.2.3 循環調度的性能評估 190
11.2.4 OpenUH的其他研究課題 193
第12章 使用OpenACC的創新研究思路,第2部分 194
12.1 一個基於導語的高性能可重構計算框架 194
12.1.1 介紹 195
12.1.2 OpenACC到FPGA的基線翻譯 196
12.1.3 用於高效FPGA編程的OpenACC擴展和最佳化 198
12.1.4 評估 203
12.1.5 總結 207
12.2 使用XcalableACC編程加速集群 207
12.2.1 XcalableMP介紹 208
12.2.2 XcalableACC:當XcalableMP遇上OpenACC 211
12.2.3 Omni編譯器的實現 213
12.2.4 在HA-PACS上的性能評估 215
12.2.5 總結 220

相關詞條

熱門詞條

聯絡我們