本書主要介紹共享內(nèi)存并行編程語言O(shè)penMP的基本原理,采用實例方式講解在Fortran語言環(huán)境中OpenMP并行程序的編寫和運行,并綜合評述了高性能計算編程中遇到的常見問題和解決方案。本書面向?qū)嶋H應(yīng)用,簡潔易學(xué),使讀者能夠親身感受到并行計算的魅力。
本書可以用作涉及高性能計算的理工科高年級本科生和研究生的并行計算課程的教材,也可以作為從事并行計算研究、設(shè)計和開發(fā)的教師和工程師的專業(yè)參考書。
1 并行計算概論
1.1 多核CPU
1.2 并行計算與分布式計算
1.3 并行計算機的種類
1.3.1 CPU與存儲器的連接方式
1.3.2 數(shù)據(jù)的通信方式
1.3.3 指令和數(shù)據(jù)之間的工作方式
1.4 并行編程模式
1.4.1 共享內(nèi)存模式
1.4.2 消息傳遞模式
1.4.3 數(shù)據(jù)并行模式
1.5 OpenMP和MPI的特點
1.6 并行計算中常用概念
1.6.1 程序、線程、進程和超線程
1.6.2 單核編程和多核編程
1.6.3 多線程編程和多進程編程
1.6.4 并行算法評價
1.7 OpenMP多核編程
1.7.1 OpenMP的歷史
1.7.2 OpenMP的特點
1.8 科學(xué)計算領(lǐng)域語言的選取
1.9 Fortran發(fā)展歷史
1.9.1 Windows系統(tǒng)
1.9.2 Iinux系統(tǒng)
1.9.3 Fortran程序的編譯和執(zhí)行
1.1 0小結(jié)
練習(xí)題
2 OpenMP編程簡介
2.1 編譯指導(dǎo)語句
2.2 并行執(zhí)行模式
2.2.1 編譯指導(dǎo)語句格式
2.2.2 主要指令
2.2.3 主要子句
2.2.4 指令和子句的配套使用
2.3 頭文件
2.4 常用庫函數(shù)
2.5 最簡單的并行程序
2.6 小結(jié)
練習(xí)題
3 數(shù)據(jù)環(huán)境
3.1 PRIVATE子句、SHARED子句和DEFAULT子句
3.2 FIRSIPRIVATE子句和LASFPRIVATE子句
3.3 THREAIPRIVATE子句
3.4 COPYIN子句和COPYPRIVATE子句
3.5 REDUTION子句
3.6 偽共享
3.7 小結(jié)
練習(xí)題
4 并行控制
4.1 PARALIJEL指令
4.2 設(shè)定線程數(shù)量
4.3 默認(rèn)模式
4.4 靜態(tài)模式
4.5 動態(tài)模式
4.6 嵌套模式與NuMJHREADS子句
4.7 IF子句(條件并行)
4.8 小結(jié)
練習(xí)題
5 并行構(gòu)造
5.1 負載平衡
5.1.1 靜態(tài)負載平衡
5.1.2 動態(tài)負載平衡
5.2 D0指令
5.2.1 循環(huán)依賴
5.2.2 單重循環(huán)
5.2.3 嵌套循環(huán)
5.2.4 循環(huán)工作量的劃分與調(diào)度
5.3 SEClIONS指令
5.4 WORKSHARE指令
5.5 SINGLE指令
5.6 小結(jié)
練習(xí)題
6 線程同步
6.1 互斥鎖機制
6.2 事件同步機制
6.3 BARRIER指令
6.4 NOWAIT指令
6.5 MASTER指令
6.6 CRITICAL指令
6.7 ATOMIC指令
6.8 ORDERED指令
6.9 FIUSH指令
6.10 小結(jié)
練習(xí)題
7 運行環(huán)境
7.1 環(huán)境變量
7.1.1 OMP—DYNAMIC
7.1.2 OMP—SCHEDtILE
7.1.3 OMF一NUMTHREADS
7.1.4 OMP—NESTED
7.1.5 OMP—STACKSIZE
7.1.6 環(huán)境變量的設(shè)置方法
7.2 庫函數(shù)
7.2.1 運行環(huán)境操作函數(shù)
7.2.2 OpenMP時間函數(shù)
7.2.3 Fortran常用時間函數(shù)
7.2.4 鎖函數(shù)
7.3 小結(jié)
練習(xí)題
8 OpenMP3.O新特征
8.1 任務(wù)
8.1.1 任務(wù)結(jié)構(gòu)
8.1.2 任務(wù)特征
8.1.3 任務(wù)類別
8.1.4 任務(wù)同步
8.1.5 DO指令、SECTIONS指令和TASK指令
8.1.6 TASK指令與遞歸算法
8.2 COLLAPSE子句
8.3 鎖擁有者的變遷
8.4 小結(jié)
練習(xí)題
9 應(yīng)用實例
9.1 循環(huán)的并行
9.1.1 單重循環(huán)
9.1.2 多維數(shù)組和嵌套循環(huán)
9.2 粗粒度的設(shè)置
9.2.1 IF子句
9.2.2 if語句
9.2.3 方案總結(jié)
9.3 全局變量和局部變量
9.3.1 common定義
9.3.2 module定義
9.3.3 全局變量和局部變量、共享變量和私有變量
9.3.4 私有變量和段錯誤
9.4 小結(jié)
練習(xí)題
10 高性能計算程序的實現(xiàn)途徑
10.1 硬件條件和操作系統(tǒng)
10.2 科學(xué)問題算法的優(yōu)化
10.2.1 數(shù)學(xué)模型
10.2.2 求解方法
10.3 串行程序的編寫
10.4 常見的調(diào)試器
10.5 高性能程序的優(yōu)化步驟
10.6 串行程序的正確性調(diào)試
10.6.1 程序的錯誤類型
10.6.2 計算程序中常見錯誤
10.6.3 靜態(tài)安全檢查
10.6.4 動態(tài)安全檢查
10.6.5 IDBC串行調(diào)試
10.7 程序熱點的確定
10.7.1 編譯器熱點分析報告
10.7.2 手動熱點分析報告
10.8 串行程序的優(yōu)化
10.8.1 循環(huán)變換
10.8.2 向量化
10.8.3 IntelFortran常用優(yōu)化策略
10.9 并行程序的優(yōu)化
10.9.1 性能提升的預(yù)估
10.9.2 并行優(yōu)化步驟
10.9.3 向?qū)ё詣硬⑿谢℅AP)
10.9.4 優(yōu)化技術(shù)
10.9.5 自動并行化
10.9.6 并行調(diào)試策略
10.9.7 IDBC并行調(diào)試
10.10 小結(jié)
練習(xí)題
附錄
附錄1 常用的L,inux命令
附錄2 Linux下的文本編輯器vi
附錄2.1 vi的基本概念
附錄2.2 vi的主要操作
附錄3 Intel:Fortran安裝
附錄4 常用的GDB命令
附錄5 Linux環(huán)境下IntelFon=ran常用編譯方案
附錄6 IntelFollran常用編譯開關(guān)
附錄7 C和c++語言中OpenMP常見用法
附錄7.1 語法格式
附錄7.2 頭文件
附錄7.3 指令類
附錄7.4 子句類
附錄7.5 庫函數(shù)
附錄7.6 最簡單的C/C++并行程序
附錄7.7 OpenMP并行程序的編譯和執(zhí)行
參考文獻