OpenMP 核心技術指南 The Openmp Common Core: Making Openmp Simple Again

Timothy G. Mattson,He,Yun (Helen),lice E. Koniges

買這商品的人也買了...

商品描述

隨著技術的不斷演化,OpenMP已經從一種簡潔的API發展成龐大且復雜的編程模型,從而變得難以學習和應用。本書回歸OpenMP最初的設計哲學,提煉出大多數程序員最常用的21項核心知識——稱為OpenMP“通用核心”,為零基礎讀者搭建了從通用核心到OpenMP多線程編程的高效學習階梯。

本書涵蓋並行計算的核心設計模式、共享工作循環構造、OpenMP數據環境、OpenMP任務和OpenMP內存模型等內容,採用編程驅動的方式,借助復雜性逐漸提高的實例來逐步引入新概念。此外,本書網站ompcore.com不斷更新,為讀者免費提供各類代碼示例和練習題。

作者簡介

蒂莫西·G. 馬特森(Timothy G. Mattson) 英特爾公司首席高級工程師。


何云(Yun (Helen) He) 勞倫斯伯克利國家實驗室國家能源研究超級計算中心高性能計算顧問。


愛麗絲·E. 康尼西(Alice E. Koniges) 夏威夷大學計算機科學家、首席研究員。

目錄大綱

譯者序
序言
前言
第一部分 做好學習OpenMP的準備
第1章 並行計算 2
1.1 並行計算的基本概念 2
1.2 並發性的興起 4
1.3 並行硬件 5
1.3.1 多處理器系統 5
1.3.2 圖形處理單元 8
1.3.3 分佈式內存集群 10
1.4 多處理器電腦的並行軟件 10
第2章 性能語言 13
2.1 基礎:FLOPS、加速比和並行效率 13
2.2 阿姆達爾定律 16
2.3 並行開銷 17
2.4 強擴展與弱擴展 19
2.5 負載均衡 19
2.6 用roofline模型理解硬件 21
第3章 什麽是OpenMP 23
3.1 OpenMP的歷史 23
3.2 通用核心 25
3.3 OpenMP的主要組件 26
第二部分 OpenMP通用核心
第4章 線程和OpenMP編程模型 31
4.1 OpenMP概述 31
4.2 OpenMP 程序的結構 31
4.3 線程和fork-join模式 34
4.4 使用線程 38
4.4.1 SPMD設計模式 39
4.4.2 偽共享 43
4.4.3 同步 45
4.5 結束語 49
第5章 並行化循環 50
5.1 共享工作循環構造 51
5.2 組合式並行共享工作循環構造 53
5.3 歸約 54
5.4 循環調度 56
5.4.1 靜態調度 56
5.4.2 動態調度 57
5.4.3 選擇一個調度 59
5.5 隱式柵欄和nowait子句 61
5.6 帶有並行循環共享工作的Pi程序 63
5.7 一種循環級並行策略 64
5.8 結束語 66
第6章 OpenMP數據環境 67
6.1 默認存儲屬性 68
6.2 修改存儲屬性 70
6.2.1 shared子句 70
6.2.2 private子句 72
6.2.3 firstprivate子句 73
6.2.4 default子句 74
6.3 數據環境的例子 74
6.3.1 數據作用域測試 75
6.3.2 曼德勃羅集的面積 76
6.3.3 重新審視Pi循環的例子 79
6.4 數組和指針 80
6.5 結束語 81
第7章 OpenMP任務 83
7.1 任務的必要性 83
7.2 顯式任務 86
7.3 第一個例子:薛定諤程序 87
7.4 single構造 88
7.5 使用任務 89
7.5.1 什麽時候任務完成 90
7.6 任務的數據環境 91
7.6.1 任務的默認數據作用域 91
7.6.2 利用任務重新審視鏈表程序 93
7.7 利用任務的基礎設計模式 93
7.7.1 分而治之模式 95
7.8 結束語 99
第8章 OpenMP內存模型 100
8.1 重新審視內存層次結構 101
8.2 OpenMP通用核心內存模型 103
8.3 使用共享內存 106
8.4 結束語 108
第9章 通用核心回顧 110
9.1 管理線程 111
9.2 共享工作構造 111
9.3 組合式並行共享工作循環構造 113
9.4 OpenMP任務 113
9.5 同步和內存一致性模型 114
9.6 數據環境子句 115
9.7 歸約子句 116
9.8 環境變量和運行時庫例程 117
第三部分 超越通用核心
第10章 超越通用核心的多線程 121
10.1 用於OpenMP通用核心構造的附加子句 121
10.1.1 並行構造 122
10.1.2 共享工作循環構造 124
10.1.3 任務構造 129
10.2 通用核心中缺失的多線程功能 133
10.2.1 threadprivate 133
10.2.2 master 135
10.2.3 atomic 136
10.2.4 OMP_STACKSIZE 137
10.2.5 運行時庫例程 138
10.3 結束語 140
第11章 同步和OpenMP內存模型 141
11.1 內存一致性模型 142
11.2 成對同步 146
11.3 鎖以及如何使用它 151
11.4 C++內存模型和OpenMP 153
11.5 結束語 156
第12章 超越OpenMP通用核心的硬件 157
12.1 非統一內存訪問系統 158
12.1.1 在NUMA系統上工作 159
12.1.2 嵌套並行構造 168
12.1.3 檢查線程親和力 171
12.1.4 小結:線程親和力和數據局部性 173
12.2 SIMD 173
12.3 設備構造 180
12.4 結束語 184
第13章 繼續OpenMP的學習 186
13.1 來自ARB的程序員資源 186
13.2 如何閱讀OpenMP規範 188
13.2.1 帶有所有正式術語的OpenMP 188
13.3 OpenMP規範的結構 191
13.4 結束語 193
術語表 194