本書為我們呈現了異構系統架構(HSA)的關鍵技術、實現方法和案例應用。首先回顧異構并行處理的發展進程、相關問題,分析HSA相對于其他技術的優勢。之后深入探討了運行時、內存模型、隊列、上下文交換、架構隊列語言、模擬器、工具鏈等問題。*后選取三個實際案例,基于C++應用程序,說明了HSA如何能夠顯著提升程序性能。
我很自豪地向你介紹異構系統體系結構—一個新的計算平臺。異構系統體系結構(HSA)是多方面協作的結果,它定義了一個新的系統體系結構,為CPU和專用計算設備提供必要的支持,以便在要求苛刻的任務上進行高效協作。本書匯集了那些創建HSA及其相關軟件棧的專家撰寫的一系列著作。這些著作解釋了規范和產品背后的基本原理和設計權衡,這是僅僅通過閱讀手冊和文件不能輕易獲得的。這些作者中的一些來自工業界,另一些來自學術界。我有幸有機會與這些世界級的專家合作。
有許多人做出了未以章節形式展現的重要貢獻。我想要感謝的第一個人是Manju Hegde(AMD),他說服我擔任本書的主編,在整個過程中他始終是重要的合作伙伴。Manju提供了本書的原始構思,并幫助招募了許多作者和審稿人。他還親自審查了各章,并提供了寶貴的意見。
本書的內容源自于2013年HotChips和2014年ACM / IEEE國際計算機體系結構研討會(ISCA)上的會議資料。大多數演講者成為本書各章的作者。然而,最初介紹HSA排隊模型的Chien-Ping Lu(聯發科)、Hakan Persson(ARM)和Ian Bratt(ARM)由于時間關系不能參與寫作。我還要感謝J. P. Bordes(AMD),他對HSA應用程序部分做出了重大貢獻。
我還要特別感謝五位特別的人。HSA首席布道者Greg Stoner(AMD)為HSA基金會創作本書提供了寶貴的支持。Anton Lokhmotov(ARM)和我一起確立了本書的原始大綱。Tom Jablin(MulticoreWare)是HSA方面的專家,他在編輯過程中為我提供了寶貴的技術支持。Marty Johnson(AMD)和Sui Chi Chan(AMD)審讀了全書,并為我和其他作者提供了寶貴的反饋意見。
最后,我要感謝擔任本書項目經理的Bob Whitecotton(AMD),他確保我和其他作者的寫作不離題。他的項目管理技巧使我避免了許多陷阱。沒有他的幫助,我將無法完成這個項目。
---作者簡介---
胡文美(Wen-mei W. Hwu) MulticoreWare公司聯合創始人兼CTO,現任美國伊利諾伊大學厄巴納-香檳分校(UIUC)電氣與計算機工程系教授,兼任并行計算研究中心(Microsoft和Intel聯合資助)首席科學家,以及全球首家CUDA卓越中心(NVIDIA資助)首席研究員。胡教授是IEEE和ACM會士,在編譯器設計、計算機體系結構、微體系結構和并行計算方面貢獻卓著。
---譯者簡介---
方娟 北京工業大學計算機學院教授,計算機系統結構系主任。長期從事計算機體系結構領域的教學和科研工作,近年來致力于異構多核體系結構的研究。
出版者的話
譯者序
推薦序
前言
作者簡介
第1章 引言 1
第2章 HSA 概述 5
2.1 GPU計算簡史:HSA解決的問題 5
2.2 HSA的支柱 9
2.2.1 HSA內存模型 9
2.2.2 HSA排隊模型 9
2.2.3 HSAIL虛擬ISA 10
2.2.4 HSA上下文切換 10
2.3 HSA規范 10
2.3.1 HSA平臺系統體系結構規范 10
2.3.2 HSA運行時規范 10
2.3.3 HSA程序員參考手冊—HSAIL SPEC 11
2.4 HSA軟件 11
2.5 HSA基金會 12
2.6 小結 13
第3章 HSAIL——虛擬并行ISA 14
3.1 引言 14
3.2 編譯流程示例 15
3.3 HSAIL執行模型 16
3.4 HSAIL指令集簡介 17
3.4.1 原子操作 18
3.4.2 寄存器 18
3.4.3 分段 19
3.4.4 波前和通道 20
3.5 HSAIL機器模型和配置文件 21
3.6 HSAIL編譯流程 22
3.7 HSAIL編譯工具 23
3.7.1 編譯器框架 23
3.7.2 CL離線編譯 24
3.7.3 HSAIL匯編器/反匯編器 25
3.7.4 ISA和機器碼匯編器/反匯編器 25
3.8 小結 25
第4章 HSA運行時 26
4.1 引言 26
4.2 HSA核心運行時API 28
4.2.1 運行時的初始化和關閉 28
4.2.2 運行時的通知 29
4.2.3 系統和HSA代理信息 29
4.2.4 信號 30
4.2.5 隊列 31
4.2.6 體系結構排隊語言 31
4.2.7 內存 32
4.2.8 代碼對象和可執行文件 34
4.3 HSA運行時擴展 35
4.3.1 HSAIL 終止化 35
4.3.2 圖像和采樣器 35
4.4 小結 37
參考文獻 38
第5章 HSA 內存模型 39
5.1 引言 39
5.2 HSA內存結構 40
5.2.1 分段 41
5.2.2 平面尋址 42
5.2.3 共享虛擬尋址 42
5.2.4 所有權 43
5.2.5 圖像內存 43
5.3 HSA內存一致性基礎 43
5.3.1 背景:順序一致性 44
5.3.2 背景:沖突和競爭 45
5.3.3 單一內存范圍的HSA內存模型 45
5.3.4 多個內存范圍的HSA內存模型 48
5.3.5 內存段 51
5.3.6 匯總:HSA競爭自由 51
5.3.7 附加觀察和注意事項 52
5.4 HSA內存模型中的高級一致性 52
5.4.1 松弛原子 52
5.4.2 所有權和范圍界限 54
5.5 小結 54
參考文獻 55
第6章 HSA 排隊模型 56
6.1 引言 56
6.2 用戶模式隊列 56
6.3 體系結構排隊語言 59
6.3.1 包的類型 60
6.3.2 創建數據包 63
6.4 包的提交與調度 64
6.5 小結 70
參考文獻 70
第7章 編譯器技術 71
7.1 引言 71
7.2 C++ AMP簡介 71
7.2.1 C++ AMP array_view 73
7.2.2 C++ AMP parallel_for_each或內核調用 73
7.3 將HSA作為編譯器目標 74
7.4 將關鍵的C++ AMP構造映射到HSA 75
7.5 C++ AMP編譯流程 77
7.6 編譯生成的C++ AMP代碼 78
7.7 C++ AMP中平鋪的編譯器支持 80
7.7.1 劃分計算域 81
7.7.2 指定地址空間和屏障 81
7.8 內存段注釋 82
7.9 針對HSA的通用C++ 84
7.10 平臺原子的編譯器支持 86
7.11 新建/刪除操作符的編譯器支持 91
7.11.1 實現具有平臺原子性的新建/刪除操作符 92
7.11.2 將新建/刪除返回的地址提升到全局內存段 94
7.11.3 基于等待 API /信號HSAIL指令改進新建/刪除操作符 94
7.12 小結 96
參考文獻 96
第8章 應用用例:平臺原子性 97
8.1 引言 97
8.2 HSA中的原子性 98
8.3 任務隊列系統 100
8.3.1 靜態執行 100
8.3.2 動態執行 101
8.3.3 HSA任務隊列系統 101
8.3.4 評估 104
8.4 廣度優先搜索 107
8.4.1 傳統實現 109
8.4.2 HSA實現 110
8.4.3 評估 112
8.5 數據布局轉換 113
8.5.1 使用PTTWAC算法進行SoA-ASTA轉換 115
8.5.2 PTTWAC的HSA實現 116
8.5.3 評估 116
8.6 小結 118
致謝 118
參考文獻 118
第9章 HSA模擬器 120
9.1 在Multi2Sim中模擬HSA 120
9.1.1 引言 120
9.1.2 Multi2Sim-HSA 121
9.1.3 HSAIL 宿主機 HSA 122
9.1.4 HSA 運行時 124
9.1.5 仿真器設計 124
9.1.6 日志與調試 125
9.1.7 Mulit2Sim-HSA路線圖 126
9.1.8 安裝與支持 126
9.2 HSAemu仿真HSA 127
9.2.1 引言 127
9.2.2 建模的HSA組件 128
9.2.3 HSAemu的設計 129
9.2.4 多線程HSA GPU仿真器 131
9.2.5 剖析、調試與性能模型 132
9.3 softHSA模擬器 133
9.3.1 引言 133
9.3.2 高層次設計 133
9.3.3 創建與測試模擬器 134
9.3.4 使用LLVM HSA模擬器進行調試 135
參考文獻 137
索引 139