幫助中心 | 我的帳號 | 關於我們

並行程序設計導論(原書第2版)/電腦科學叢書

  • 作者:(美)彼得·S.帕切科//馬修·馬倫塞克|責編:曲熠|譯者:黃智瀕//肖晨
  • 出版社:機械工業
  • ISBN:9787111743194
  • 出版日期:2024/05/01
  • 裝幀:平裝
  • 頁數:347
人民幣:RMB 129 元      售價:
放入購物車
加入收藏夾

內容大鋼
    並行硬體已經無處不在,但如何在並行環境下編寫出高性能的程序,仍然是擺在廣大程序員面前的一道難題,特別是,不少電腦科學專業的學生在畢業時甚至沒有並行編程的經驗。本書嘗試解決這個問題。主要面向沒有經驗的讀者,清晰講解如何設計、調試和評估分散式內存和共享內存程序的性能。
    新版更新及特色:
    討論如何利用MPI、Pthreads、OpenMP和CUDA這四種廣泛使用的並行編程API來編寫並行程序。其中,關於CUDA的章節是全新的。
    新增關於GPU編程和異構編程的章節,此外,還新增了與並行程序開發相關的示例和練習。
    學習曲線友好,從簡單的編程示例開始,逐步構建更具挑戰性的示例,關於四種API的章節相互獨立,便於讀者根據需要選擇閱讀。
    配有豐富的練習和編程作業,所有源代碼均可從本書網站免費下載。

作者介紹
(美)彼得·S.帕切科//馬修·馬倫塞克|責編:曲熠|譯者:黃智瀕//肖晨

目錄
譯者序
前言
第1章  為什麼需要並行計算
  1.1  為什麼需要不斷提高性能
  1.2  為什麼需要建立並行系統
  1.3  為什麼需要編寫並行程序
  1.4  如何編寫並行程序
  1.5  我們將做什麼
  1.6  併發、並行和分散式
  1.7  本書其餘部分
  1.8  一點警告
  1.9  排版慣例
  1.10  小結
  1.11  練習
第2章  並行硬體與並行軟體
  2.1  背景知識
    2.1.1  馮·諾依曼體系結構
    2.1.2  進程、多任務和線程
  2.2  馮·諾依曼模型的改進
    2.2.1  緩存基礎
    2.2.2  緩存映射
    2.2.3  緩存和程序:示例
    2.2.4  虛擬內存
    2.2.5  指令級並行
    2.2.6  硬體多線程
  2.3  並行硬體
    2.3.1  並行電腦的分類
    2.3.2  SIMD系統
    2.3.3  MIMD系統
    2.3.4  互連網路
    2.3.5  高速緩存一致性
    2.3.6  共享內存與分散式內存
  2.4  並行軟體
    2.4.1  注意事項
    2.4.2  協調進程/線程
    2.4.3  共享內存
    2.4.4  分散式內存
    2.4.5  GPU編程
    2.4.6  混合系統編程
  2.5  輸入和輸出
    2.5.1  MIMD系統
    2.5.2  GPU
  2.6  性能
    2.6.1  在MIMD系統中的加速比和效率
    2.6.2  阿姆達定律
    2.6.3  MIMD系統的可擴展性
    2.6.4  MIMD程序的計時
    2.6.5  GPU性能
  2.7  並行程序設計
    2.7.1  示例

  2.8  編寫和運行並行程序
  2.9  假設
  2.10  小結
    2.10.1  串列系統
    2.10.2  並行硬體
    2.10.3  並行軟體
    2.10.4  輸入和輸出
    2.10.5  性能
    2.10.6  並行程序設計
    2.10.7  假設
  2.11  練習
第3章  基於MPI的分散式內存編程
  3.1  入門
    3.1.1  編譯和執行
    3.1.2  MPI程序
    3.1.3  MPI_Init和MPI_Finalize
    3.1.4  通信域、MPI_Comm_size和MPI_Comm_rank
    3.1.5  SPMD程序
    3.1.6  通信
    3.1.7  MPI_Send
    3.1.8  MPI_Recv
    3.1.9  消息匹配
    3.1.10  status_p參數
    3.1.11  MPI_Send和MPI_Recv的語義
    3.1.12  一些潛在的陷阱
  3.2  MPI中的梯形法則
    3.2.1  梯形法則
    3.2.2  梯形法則的並行化
  3.3  處理I/O
    3.3.1  輸出
    3.3.2  輸入
  3.4  集合通信
    3.4.1  樹形結構的通信
    3.4.2  MPI_Reduce
    3.4.3  集合通信與點對點通信
    3.4.4  MPI_Allreduce
    3.4.5  廣播
    3.4.6  數據分佈
    3.4.7  分散
    3.4.8  收集
    3.4.9  綜合實例
  3.5  MPI派生的數據類型
  3.6  MPI程序的性能評估
    3.6.1  計時
    3.6.2  結果
    3.6.3  加速比和效率
    3.6.4  可擴展性
  3.7  一種並行排序演算法
    3.7.1  一些簡單的串列排序演算法
    3.7.2  並行奇偶移項排序

    3.7.3  MPI程序中的安全性
    3.7.4  關於並行奇偶排序的一些補充細節
  3.8  小結
  3.9  練習
  3.10  編程作業
第4章  Pthreads共享內存編程
  4.1  進程、線程和Pthreads
  4.2  Hello, world
    4.2.1  執行
    4.2.2  預備
    4.2.3  啟動線程
    4.2.4  運行線程
    4.2.5  停止線程
    4.2.6  錯誤檢查
    4.2.7  啟動線程的其他方法
  4.3  矩陣-向量乘法
  4.4  臨界區
  4.5  忙等待
  4.6  互斥鎖
  4.7  生產者-消費者同步和信號量
  4.8  柵欄和條件變數
    4.8.1  忙等待和互斥鎖
    4.8.2  信號量
    4.8.3  條件變數
    4.8.4  Pthreads柵欄
  4.9  讀寫鎖
    4.9.1  排序的鏈表函數
    4.9.2  多線程鏈表
    4.9.3  Pthreads的讀寫鎖
    4.9.4  各種實現方案的性能
    4.9.5  實現讀寫鎖
  4.10  緩存、緩存一致性和偽共享
  4.11  線程安全
    4.11.1  不正確的程序可以產生正確的輸出
  4.12  小結
  4.13  練習
  4.14  編程作業
第5章  OpenMP共享內存編程
  5.1  入門
    5.1.1  編譯和運行OpenMP程序
    5.1.2  程序
    5.1.3  錯誤檢查
  5.2  梯形法則
    5.2.1  第一個OpenMP版本
  5.3  變數的作用域
  5.4  歸約子句
  5.5  parallel指令
    5.5.1  注意事項
    5.5.2  數據依賴性
    5.5.3  尋找循環迭代相關

    5.5.4  估算π
    5.5.5  關於作用域的更多內容
  5.6  關於OpenMP中的循環的更多內容:排序
    5.6.1  冒泡排序
    5.6.2  奇偶移項排序
  5.7  循環的調度
    5.7.1  schedule子句
    5.7.2  static調度類型
    5.7.3  dynamic和guided調度類型
    5.7.4  runtime調度類型
    5.7.5  哪種調度
  5.8  生產者和消費者
    5.8.1  隊列
    5.8.2  消息傳遞
    5.8.3  發送消息
    5.8.4  接收消息
    5.8.5  終止檢測
    5.8.6  開始
    5.8.7  atomic指令
    5.8.8  臨界區和鎖
    5.8.9  在消息傳遞程序中使用鎖
    5.8.10  critical指令、atomic指令或鎖
    5.8.11  注意事項
  5.9  緩存、緩存一致性和偽共享
  5.10  任務化
  5.11  線程安全
    5.11.1  不正確的程序可以產生正確的輸出
  5.12  小結
  5.13  練習
  5.14  編程作業
第6章  用CUDA進行GPU編程
  6.1  GPU和GPGPU
  6.2  GPU架構
  6.3  異構計算
  6.4  CUDA hello
    6.4.1  源代碼
    6.4.2  編譯與運行程序
  6.5  深入了解
  6.6  線程、線程塊和線程網格
  6.7  NVIDIA計算能力和設備架構
  6.8  向量加法
    6.8.1  核函數
    6.8.2  Get_args函數
    6.8.3  Allocate_vectors函數和托管內存
    6.8.4  main函數調用的其他函數
    6.8.5  顯式內存傳輸
  6.9  從CUDA核函數返回結果
  6.10  CUDA梯形法則I
    6.10.1  梯形法則
    6.10.2  一種CUDA實現

    6.10.3  初始化、返回值和最後更新
    6.10.4  使用正確的線程
    6.10.5  更新返回值和atomicAdd函數
    6.10.6  CUDA梯形法則的性能
  6.11  CUDA梯形法則II:提升性能
    6.11.1  樹形通信
    6.11.2  局部變數、寄存器、共享和全局內存
    6.11.3  線程束和線程束洗牌
    6.11.4  使用線程束洗牌實現樹形全局求和
    6.11.5  共享內存和線程束洗牌的替代方案
  6.12  用warpSize個線程塊實現梯形法則
    6.12.1  主機代碼
    6.12.2  使用線程束洗牌的核函數
    6.12.3  使用共享內存的核函數
    6.12.4  性能
  6.13  CUDA梯形法則III:使用具有多個線程束的線程塊
    6.13.1  __syncthreads函數
    6.13.2  關於共享內存的更多內容
    6.13.3  使用共享內存的線程束求和
    6.13.4  共享內存庫
    6.13.5  收尾工作
    6.13.6  性能
  6.14  雙調排序
    6.14.1  串列雙調排序
    6.14.2  蝶式交換和二進位表示
    6.14.3  並行雙調排序I
    6.14.4  並行雙調排序II
    6.14.5  CUDA雙調排序的性能
  6.15  小結
  6.16  練習
  6.17  編程作業
第7章  並行程序開發
  7.1  兩種n-body問題的解決方案
    7.1.1  問題描述
    7.1.2  兩種串列方案
    7.1.3  並行化n-body求解方案
    7.1.4  關於I/O的說明
    7.1.5  使用OpenMP並行化基本求解方案
    7.1.6  使用OpenMP並行化簡化求解方案
    7.1.7  評估OpenMP代碼
    7.1.8  使用Pthreads並行化求解方案
    7.1.9  使用MPI並行化求解方案
    7.1.10  使用MPI並行化簡化求解方案
    7.1.11  MPI簡化求解的性能
    7.1.12  使用CUDA並行化基本求解方案
    7.1.13  關於CUDA協同組的說明
    7.1.14  基本CUDA n-body求解方案的性能
    7.1.15  提高CUDA n-body求解方案性能的方法
    7.1.16  在n-body求解方案中使用共享內存技術
  7.2  樣本排序

    7.2.1  樣本排序和桶排序
    7.2.2  選擇樣本數據
    7.2.3  Map函數的簡單實現
    7.2.4  Map的另一種實現方案
    7.2.5  並行化樣本排序
    7.2.6  使用OpenMP實現樣本排序
    7.2.7  使用Pthreads實現樣本排序
    7.2.8  使用MPI實現樣本排序
    7.2.9  使用CUDA實現樣本排序
  7.3  注意事項
  7.4  使用哪種API
  7.5  小結
    7.5.1  MPI
  7.6  練習
  7.7  編程作業
第8章  下一步該怎麼走
參考文獻

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032