《Intel Xeon Phi協處理器高性能編程指南》是2014年4月人民郵電出版社出版的圖書,作者是[美]Jim Jeffers、James Reinders。
基本介紹
- 中文名:Intel Xeon Phi協處理器高性能編程指南
- 作者:[美]Jim Jeffers、James Reinders
- 出版社:人民郵電出版社
- 出版時間:2014年4月
- 頁數:379 頁
- 定價:79 元
- 開本:16 開
- 裝幀:平裝
- ISBN:9787115347848
內容簡介,圖書目錄,
內容簡介
《Intel Xeon Phi協處理器高性能編程指南》由英特爾的技術專家撰寫,是目前為止**全面、**系統地講解在英特爾到強處理器和到強融核協處理器上進行並行套用開發的專著。
《Intel Xeon Phi協處理器高性能編程指南》從賽車與到強融核協處理器之間的相似性入手,抽絲剝繭、層層深入,探討實際案例指導編程套用,並對協處理器向量化、協處理器分載模式、協處理器架構及Linux系統、數學庫,以及協處理器採樣、計時與最佳化等進行了詳細的解析,是一本詳盡的到強融核協處理器使用參考指南。特別是,《Intel Xeon Phi協處理器高性能編程指南》所採用的方法兼容了對未來編程模式的展望和支持,書中所闡述的統一、標準和靈活的編程模式,對於未來作為獨立處理器使用的MIC眾核產品同樣適用。
《Intel Xeon Phi協處理器高性能編程指南》適用於想要系統學習英特爾到強融核協處理器編程的讀者,無需藉助其他參考書,即可循序漸進、全面掌握。
圖書目錄
第 1章 緒論 1
1.1 更加並行化 1
1.2 為什麼需要Intel Xeon Phi協處理器 2
1.3 協處理器平台 5
1.4 第 一款Intel Xeon Phi協處理器 7
1.5 控制“Ninja鴻溝”於一定範圍 9
1.6 移植與最佳化的雙重優勢 9
1.7 何時使用Intel Xeon Phi協處理器 10
1.8 實現處理器性能**優 11
1.9 為何擴展超過100個執行緒如此重要 11
1.10 最大化並行程式性能 14
1.11 評估高度並行執行的能力 14
1.12 對於GPU是怎么樣的 15
1.13 易於移植,也易於提升性能 16
1.14 性能移植 16
1.15 超執行緒與多執行緒 17
1.16 協處理器主要使用模型:MPI和Offload 17
1.17 編譯器和編程模型 18
1.18 快取最佳化 19
1.19 案例和細節 20
1.20 更多信息 21
第 2章 高性能封閉追蹤測試驅動 23
2.1 揭開引擎蓋:協處理器詳解 24
2.2 發動汽車:與協處理器溝通 25
2.3 輕鬆上路:首次運行代碼 27
2.4 開始加速:多執行緒運行代碼 31
2.5 全速行駛:使用所有核心 36
2.6 輕鬆過彎:訪存頻寬 45
2.7 高速漂移:記憶體頻寬最大化 50
2.8 總結 52
第3章 一場鄉間公路友誼賽 55
3.1 賽前準備:本章重點 55
3.2 初識賽道:9點模板算法 56
3.3 起跑線上:9點模板基準程式 58
3.4 路在前方:運行基準模板代碼 63
3.5 石子路上:向量化而未擴展 65
3.6 全力比賽:向量化加上規模擴展 67
3.7 扳手和潤滑油:代碼微調 70
3.7.1 基準校正 70
3.7.2 使用流存儲 72
3.7.3 使用2MB大型存儲頁 73
3.8 總結 74
3.9 更多信息 75
第4章 都市暢遊:實際代碼最佳化案例 77
4.1 選擇方向:基本的擴散算法 78
4.2 到達路口:計算邊界效應 78
4.3 尋找林蔭大道:代碼擴展化 84
4.4 雷霆之路:保證向量化 86
4.5 剝離:從**內層循環開始 89
4.6 嘗試辛烷含量更高的燃料:利用數據局部性與切片分塊提升速度 92
4.7 高速駕駛認證:高速旅行的總結 96
第5章 大數據(向量) 99
5.1 為什麼向量化 99
5.2 如何向量化 100
5.3 實現向量化的五種方法 100
5.4 六步向量化方法論 102
5.5 通過Cache流:布局、對齊、預取數據 104
5.5.1 為什麼數據布局影響向量化性能 104
5.5.2 數據校準 106
5.5.3 預取 107
5.5.4 流存儲 112
5.6 編譯器技巧 114
5.6.1 避免手動展開循環 114
5.6.2 循環向量化的要求(英特爾編譯器) 115
5.6.3 內聯的重要性,簡單性能分析的干擾 116
5.7 編譯器選項 117
5.8 編譯器指導指令 118
5.8.1 SIMD指令 119
5.8.2 VECTOR與NOVECTOR指令 123
5.8.3 IVDEP指令 124
5.8.4 隨機數函式向量化 126
5.8.5 充分向量化 128
5.8.6 -opt-assume-safe-padding選項 130
5.8.7 數據對齊 130
5.8.8 在數組表示法(Array Notation)中權衡向量長度 134
5.9 使用數組段(Array Section)支持向量化 137
5.9.1 Fortran數組段 137
5.9.2 Cilk Plus數組段和元素函式 139
5.10 查看編譯器生成:彙編代碼檢測 143
5.10.1 如何找到彙編代碼 143
5.10.2 快速查看彙編代碼 145
5.11 向量化數值結果差異 149
5.12 總結 149
5.13 更多信息 149
第6章 多任務(非多執行緒) 151
6.1 OpenMP、Fortran2008、Intel TBB、Intel Cilk Plus、Intel MKL 152
6.1.1 需在協處理器上創建任務 153
6.1.2 執行緒池的重要性 154
6.2 OpenMP 154
6.2.1 並行處理模型 155
6.2.2 指導性語句 155
6.2.3 OpenMP上的有效控制 155
6.2.4 嵌套 156
6.3 Fortran 2008 157
6.3.1 DO CONCURRENT 157
6.3.2 DO CONCURRENT以及數據競爭 157
6.3.3 DO CONCURRENT定義 158
6.3.4 DO CONCURRENT對比FOR ALL 159
6.3.5 DO CONCURRENT對比OpenMP“Parallel” 160
6.4 Intel TBB 160
6.4.1 發展歷史 162
6.4.2 使用TBB 163
6.4.3 parallel_for 163
6.4.4 blocked_range 164
6.4.5 Partitioners 164
6.4.6 Parallel_reduce 165
6.4.7 Parallel_invoke 166
6.4.8 C + +11相關 166
6.4.9 TBB總結 167
6.5 Cilk Plus 167
6.5.1 發展歷史 169
6.5.2 從TBB借用組件 169
6.5.3 向TBB提供組件 170
6.5.4 關鍵字拼寫 170
6.5.5 cilk_for 170
6.5.6 cilk_spawn與cilk_sync 171
6.5.7 Reducers(超對象) 172
6.5.8 數組表示法與基本函式 173
6.5.9 Cilk Plus總結 173
6.6 總結 173
6.7 更多信息 173
第7章 分載(Offload) 175
7.1 兩種分載模式 176
7.2 分載執行與本地執行 176
7.2.1 非共享記憶體模式:使用分載編譯器指導指令(Pragma) 177
7.2.2 共享虛擬記憶體模式:通過共享虛擬記憶體使用分載 177
7.2.3 Intel數學函式館(Intel MKL)自動分載 178
7.3 分載的語言擴展支持 178
7.3.1 分載的編譯器選項和環境變數 179
7.3.2 分載的共享環境變數 181
7.3.3 針對多個協處理器分載 181
7.4 使用編譯器指導指令分載 182
7.4.1 設定協處理器上的變數與函式 184
7.4.2 指針變數的記憶體分配與管理 186
7.4.3 時間最佳化:堅持分配的另外一個原因 193
7.4.4 對C/C++目標代碼使用編譯器指導指令 193
7.4.5 對Fortran語言中的目標代碼使用指導指令 195
7.4.6 執行單一處理器時不創建代碼 196
7.4.7 英特爾MIC架構預定義宏 197
7.4.8 Fortran數組 197
7.4.9 為部分C/C++數組分配記憶體 197
7.4.10 為部分Fortran數組分配記憶體 198
7.4.11 兩變數間的數據轉移 199
7.4.12 分載代碼指令使用的限制條件 200
7.5 在共享虛擬存儲器上使用分載 202
7.5.1 使用共享記憶體及共享變數 203
7.5.2 關於共享函式 204
7.5.3 共享記憶體管理函式 204
7.5.4 同步函式執行與異步函式執行:_Cilk_offload 204
7.5.5 共享變數和函式:_Cilk_shared 205
7.5.6 _Cilk_shared和Cilk_offload的使用規則 207
7.5.7 處理器與目標之間的記憶體同步 208
7.5.8 使用_Cilk_offload寫入具體目標代碼 208
7.5.9 使用虛擬記憶體分載代碼的限制因素 209
7.5.10 使用共享虛擬記憶體時定義持久性數據 210
7.5.11 使用共享虛擬記憶體持久性數據的C++聲明 212
7.6 關於異步計算 212
7.7 關於異步數據轉移 213
7.8 套用目標屬性到多個聲明 218
7.8.1 分載使用的vec-report可選項 219
7.8.2 測量分載區域的時間與數據 219
7.8.3 _Offload_report 219
7.8.4 在分載代碼中使用庫 220
7.8.5 關於使用xiar和xild創建分載程式庫 220
7.9 在協處理器上執行I/O檔案 221
7.10 從分載代碼中記錄stdout和stderr 223
7.11 總結 223
7.12 更多信息 224
第8章 協處理器架構 225
8.1 Intel Xeon Phi協處理器產品家族 226
8.2 協處理器卡的設計 227
8.3 Intel Xeon Phi協處理器晶片概述 228
8.4 協處理器核架構 229
8.5 指令集和多執行緒處理 230
8.6 快取組織和記憶體訪問 232
8.7 預取 234
8.8 向量處理單元架構 234
8.9 協處理器PCI-E系統接口和DMA 239
8.10 協處理器電源管理 241
8.11 可靠性、可用性和可維護性(RAS) 244
8.12 協處理器系統管理控制器(SMC) 245
8.12.1 感測器 246
8.12.2 散熱設計監控和控制 246
8.12.3 風扇控制 247
8.12.4 潛在套用影響 247
8.13 基準測試 247
8.14 總結 248
8.15 更多信息 248
第9章 協處理器系統軟體 251
9.1 協處理器軟體體系架構概述 251
9.1.1 對稱性 253
9.1.2 Ring級別:用戶態和核心態 253
9.2 協處理器編程模型和選項 253
9.2.1 寬度與深度 254
9.2.2 MPI編程模型 255
9.3 協處理器軟體體系架構組件 257
9.4 英特爾眾核平台軟體棧 258
9.4.1 MYO: Mine Yours Ours 258
9.4.2 COI:Coprocessor Offload Infrastructure 259
9.4.3 SCIF:Symmetric Communications Interface 259
9.4.4 Virtual networking(NetDev)、TCP/IP及sockets 259
9.4.5 協處理器系統管理 260
9.4.6 面向MPI應用程式的協處理器組件 262
9.5 Linux對Intel Xeon Phi協處理器的支持 267
9.6 最佳化記憶體分配的性能 268
9.6.1 控制2MB記憶體頁的數量 268
9.6.2 監控協處理器上2MB記憶體頁的數量 269
9.6.3 分配2MB記憶體頁的方法示例 269
9.7 總結 270
9.8 更多信息 271
第 10章 協處理器的Linux系統 273
10.1 協處理器Linux基礎 273
10.2 協處理器Linux系統的啟動和配置簡介 274
10.3 協處理器Linux系統的默認配置 276
10.4 修改協處理器配置 277
10.4.1 可配置的組件 277
10.4.2 配置檔案 278
10.4.3 配置啟動參數 278
10.4.4 協處理器根檔案系統 280
10.5 micctrl工具 285
10.5.1 協處理器狀態控制 285
10.5.2 啟動協處理器 285
10.5.3 關閉協處理器 286
10.5.4 重新啟動協處理器 286
10.5.5 重置協處理器 286
10.5.6 協處理器配置初始化和信息傳播 287
10.5.7 配置參數的輔助功能 288
10.5.8 其他檔案系統相關的幫助功能 290
10.6 添加軟體 290
10.6.1 檔案系統創建流程 291
10.6.2 添加檔案到根檔案系統 292
10.6.3 示例:添加一組全局訪問檔案 293
10.7 Linux系統在協處理器上的啟動過程 294
10.8 Linux機群中的協處理器 296
10.8.1 Intel Cluster Ready 297
10.8.2 如何使用Intel Cluster Checker 298
10.8.3 Intel Cluster Checker對協處理器的支持 298
10.9 總結 300
10.10 更多信息 301
第 11章 數學庫 303
11.1 英特爾數學核心函式館綜述 304
11.2 英特爾數學核心函式館與英特爾編譯器 305
11.3 協處理器支持綜述 305
11.3.1 自動分載控制函式 306
11.3.2 設定環境變數 308
11.4 在本地模式下使用協處理器 309
11.5 使用自動分載模式 310
11.5.1 如何開啟自動分載 310
11.5.2 控制作業劃分 311
11.5.3 有效使用自動分載技巧 312
11.5.4 有、無分載情況下高效使用英特爾MKL的技巧 313
11.6 使用編譯器輔助分載 314
11.7 精度選擇和變化 316
11.7.1 快速超越函式和數學算法 316
11.7.2 理解幾種可能的浮點算法實現變種 316
11.8 總結 319
11.9 更多信息 319
第 12章 MPI 321
12.1 MPI總覽 321
12.2 在Intel Xeon Phi上運行MPI 322
12.3 預備工作 326
12.4 從MPI進程中分載 327
12.4.1 Hello World 327
12.4.2 梯形積分算法 328
12.5 協處理器本地使用MPI 331
12.5.1 Hello World(再次) 332
12.5.2 梯形積分算法(回顧) 333
12.6 總結 338
12.7 更多信息 338
第 13章 採樣和計時 341
13.1 協處理器事件監視暫存器 342
13.2 效率指標 343
13.2.1 CPI 344
13.2.2 計算與數據訪問比率(Compute to Data Access Ratio) 347
13.3 潛在性能問題 348
13.3.1 通用快取使用率(General Cache Usage) 349
13.3.2 TLB失效 351
13.3.3 VPU使用率 352
13.3.4 記憶體頻寬 353
13.4 Intel VTune Amplifier XE產品 355
13.5 性能套用編程接口 356
13.6 MPI分析:英特爾追蹤分析器與收集器 356
13.6.1 生成跟蹤檔案:面向只在協處理器上運行的套用 356
13.6.2 生成跟蹤檔案:面向同時在處理器和協處理器上運行的套用 357
13.7 計時 357
13.7.1 協處理器上的時鐘源 358
13.7.2 MIC運行時間計數器(micetc) 358
13.7.3 時間戳計數器(tsc) 358
13.7.4 設定時鐘源 359
13.7.5 時間結構 359
13.7.6 時間懲罰 360
13.7.7 在分載區(offload region)測量時間和數據 361
13.8 總結 361
13.9 更多信息 361
第 14章 總結 363
14.1 建議 363
14.2 附加資源 364
14.3 將推出另一本書 364
14.4 感謝讀者反饋 364
術語表 365