本書是普通高等院校十四五計算類專業(yè)系列教材之一,對并行計算的理論知識和并行程序設計方法進行了系統(tǒng)的論述,包括并行計算基本概念、并行計算機基礎、并行計算模型、并行算法設計基礎、并行計算性能評測、OpenMP多線程并行程序設計、MPI消息傳遞并行程序設計、Java多線程并行程序設計、Python并行程序設計、大數(shù)據(jù)分布式計算等內容。
本書集作者多年的教學經(jīng)驗編寫而成,在論述并行計算理論知識的基礎上,特別注重并行程序設計的實踐方法及實用性。書中含有大量精心設計并調試通過的程序實例,以方便讀者參考。
本書適合作為普通高等院校計算機科學與技術專業(yè)、軟件工程專業(yè)以及計算機類相關專業(yè)本科生和研究生的教材,也可作為社會培訓教材或軟件開發(fā)人員的參考書。
本書突出實用性,將復雜的理論融于具體的實例和程序中。書中的實例經(jīng)過精心設計挑選,程序代碼已認真調試,可以直接運行,為讀者理解和使用提供了方便。
劉其成,男,博士研究生,煙臺大學計算機與控制工程學院教授,碩士生導師。專業(yè)方向為計算機應用。主授課程:軟件設計與體系結構、Java面向對象程序設計、并行計算技術等。主編《軟件設計與體系結構》、《軟件體系結構與設計實用教程》、《并行計算與程序設計》、《Java程序設計基礎》等多本教材。主持山東省自然科學基金、山東省教育廳科技計劃項目。作為主要成員參與國家自然科學基金、山東省科技發(fā)展計劃、山東省本科教學改革研究重點項目。發(fā)表學術論文幾十篇,其中多篇被SCI/EI收錄。獲山東高等學校優(yōu)秀科研成果獎三等獎。
第1章 概述 11.1 實例11.1.1 求和11.1.2 泡茶問題21.1.3 圖書館新書上架21.1.4 天氣預報31.1.5 HPCC計劃31.1.6 教務管理系統(tǒng)31.1.7 地球物理石油勘探數(shù)據(jù)處理系統(tǒng)41.2 并行計算基礎知識51.2.1 并行計算的重要性51.2.2 并行計算的定義、并行計算機系統(tǒng)及軟件61.2.3 并行計算的應用分類61.2.4 并行設計的方法71.2.5 應用系統(tǒng)的并行性81.2.6 并行計算的研究內容81.3 并行程序設計策略和模型91.3.1 并行程序設計策略91.3.2 并行程序設計模型91.4 相關概念101.4.1 順序、并發(fā)與并行101.4.2 進程和線程111.4.3 一些基本概念12習題13第2章 并行計算機基礎 14 2.1 并行計算機體系結構142.1.1 結點152.1.2 互聯(lián)網(wǎng)絡152.1.3 并行計算機訪存模型192.2 并行計算機的分類202.2.1 并行計算機的控制結構202.2.2 地址空間212.2.3 并行計算機系統(tǒng)結構模型212.3 多核技術282.3.1 多核芯片282.3.2 片上多核處理器體系結構282.3.3 超線程技術292.3.4 基于多核的軟件開發(fā)302.3.5 虛擬化技術302.4 GPU技術302.4.1 簡介302.4.2 GPU與并行計算31習題32第3章 并行計算模型 33 3.1 并行計算模型概述333.1.1 串行計算模型與并行計算模型333.1.2 并行計算模型與并行算法333.1.3 并行計算模型與并行系統(tǒng)中其他模型的關系343.2 PRAM模型343.2.1 基本PRAM模型343.2.2 實例353.3 BSP模型363.3.1 BSP模型原理363.3.2 實例373.4 LogP模型383.4.1 LogP模型原理383.4.2 實例383.5 并行計算模型比較393.5.1 PRAM模型和LogP模型的比較393.5.2 BSP模型和LogP模型的比較39習題40第4章 并行算法設計基礎 41 4.1 并行算法設計方法414.1.1 基本方法414.1.2 實例424.2 并行算法設計過程444.2.1 PCAM設計方法學454.2.2 劃分454.2.3 通信474.2.4 組合494.2.5 映射514.3 并行算法設計技術524.4 求和問題的并行算法設計53習題54第5章 并行計算性能評測 55 5.1 基本概念555.1.1 運行時間555.1.2 問題規(guī)模565.1.3 額外開銷函數(shù)565.2 并行系統(tǒng)的性能分析585.2.1 加速比585.2.2 效率625.2.3 開銷635.2.4 粒度和數(shù)據(jù)映射對性能的影響635.2.5 實例645.3 并行系統(tǒng)的可擴展性度量645.3.1 可擴展性645.3.2 度量指標665.3.3 實例68習題69第6章 OpenMP多線程并行程序設計 70 6.1 OpenMP編程基礎706.1.1 OpenMP多線程編程模型706.1.2 OpenMP程序結構716.1.3 使用Microsoft Visual Studio.NET編寫OpenMP程序726.2 編譯指導語句736.2.1 并行域結構parallel指令746.2.2 共享任務結構756.2.3 同步結構826.2.4 數(shù)據(jù)處理子句876.3 運行時庫函數(shù)966.3.1 基本函數(shù)966.3.2 運行時庫函數(shù)的互斥鎖支持976.4 環(huán)境變量996.5 實例996.5.1 求和996.5.2 數(shù)值積分1036.6 OpenMP多線程程序性能分析1086.6.1 并行額外開銷1086.6.2 線程同步帶來的開銷1106.6.3 負載均衡1116.6.4 OpenMP中的任務調度113習題119第7章 MPI消息傳遞并行程序設計 121 7.1 消息傳遞接口1217.1.1 簡介1217.1.2 MPI程序特點1217.2 典型MPI實現(xiàn)MPICH 1237.2.1 簡介1237.2.2 MPICH的安裝和配置1237.3 MPI編程基礎1277.3.1 簡單的MPI程序示例1277.3.2 MPI程序的4個基本函數(shù)1287.3.3 統(tǒng)計時間1287.3.4 錯誤管理1287.4 MPI的點對點通信1297.4.1 點對點通信的例子1297.4.2 MPI_Send()函數(shù)1307.4.3 MPI_Recv()函數(shù)1307.4.4 消息管理七要素1317.4.5 非阻塞通信1337.5 MPI群集通信1337.5.1 一對多群集通信函數(shù)1337.5.2 多對一群集通信函數(shù)1347.5.3 多對多群集通信函數(shù)1357.5.4 同步函數(shù)1367.6 實例1377.6.1 求和1377.6.2 數(shù)值積分138習題139第8章 Java多線程并行程序設計 140 8.1 線程1408.1.1 基本概念1408.1.2 線程的狀態(tài)與生命周期1418.1.3 線程調度與優(yōu)先級1428.2 Runnable接口與Thread類1428.2.1 Runnable接口1428.2.2 Thread類1428.3 多線程的實現(xiàn)1448.3.1 創(chuàng)建Thread類的子類1448.3.2 實現(xiàn)Runnable接口1478.3.3 兩種方法的比較1478.4 線程的同步與死鎖1508.4.1 線程同步1508.4.2 線程死鎖1568.5 實例1568.5.1 求和1568.5.2 數(shù)值積分159習題161第9章 Python并行程序設計 162 9.1 Python多線程1629.2 Python多進程并行程序設計1639.2.1 Process類實現(xiàn)并行1639.2.2 Python多進程的通信1659.2.3 Python多進程的數(shù)據(jù)共享1679.2.4 進程間同步1699.2.5 進程池1699.2.6 實例1719.3 Python GPU并行程序設計1749.3.1 概述1749.3.2 常用函數(shù)1759.3.3 神經(jīng)網(wǎng)絡概述1799.3.4 實例181習題183第10章 大數(shù)據(jù)分布式計算 184 10.1 Hadoop分布式計算平臺18410.2 MapReduce分布式并行編程模型18510.2.1 MapReduce模型簡介18510.2.2 MapReduce工作流程18610.2.3 WordCount分析18810.2.4 MapReduce實例18910.3 Spark分布式計算框架19310.3.1 并行程序設計策略19310.3.2 Spark RDD基本操作19510.3.3 Spark應用程序實例196習題197參考文獻 198