《FPGA異構計算——基於OpenCL的開發方法》是2015年西安電子科技大學出版社出版的圖書,作者是黃樂天、范興山、彭軍、蒲宇亮。
基本介紹
- 書名:FPGA異構計算——基於OpenCL的開發方法
- 作者:黃樂天 范興山 彭軍 蒲宇亮
- ISBN:978-7-5606-3770-9
- 定價:23.8元
- 出版社:西安電子科技大學出版社
- 出版時間:2015-11
編輯推薦,內容簡介,目錄,
編輯推薦
自序——大變局 接觸到OpenCL是在三年前,當時參加Altera的全國教師大會,知道Altera準備推動這樣一種新的FPGA開發方法。當時的感覺是:不關我們的事。覺得用這樣一種新的語言來開發FPGA的方法在成熟之前,我們應該不會去使用它。另外更多的還有疑慮。C to Silicon的口號喊了很多年,從20世紀90年代初就開始喧囂,前前後後好幾輪,每一輪一開始都轟轟烈烈,但是到後面都無疾而終。而這一次基於OpenCL的FPGA開發方法是否能帶來不一樣的結果呢?說實話,我心裡是存在著很大的疑慮。我相信這也是現在大多數聽到用OpenCL來開發FPGA的工程師朋友們或多或少存在的疑慮。 相信第一次聽到使用OpenCL來開發FPGA的朋友們心中一定會有這樣的疑問:OpenCL相對於我們傳統的HDL優勢在哪裡?使用OpenCL來開發FPGA會不會遇到什麼瓶頸和問題?我們也是帶著這樣的疑問參加了2012年底在廈門召開的Altera的教師大會。在會上我聽到了負責Altera公司OpenCL技術支持的工程師陳涪師兄對FPGA異構計算的詳細介紹,並通過會下的交流才終於認識到——這一次不同了!不同之處在於,這並不是簡單的FPGA開發方法的變革,而是FPGA套用領域和使用對象的變革。FPGA的套用將轉向一個新的領域——高性能異構計算和海量數據處理,而FPGA的使用對象也不是傳統的硬體工程師,很有可能是以開發軟體為本職工作的程式設計師。換言之,從目前來看,OpenCL和HDL之間其實並不存在可以比較的先決條件,因為這是針對不同的套用領域和不同的開發目的而設計出的不同開發方法。因此,本書並沒用採用“基於OpenCL的FPGA設計”之類的書名,而是選擇了“FPGA異構計算”這一更符合目前FPGA設計方法變革的題目。當然,由於這套異構計算系統是依靠OpenCL來開發的,所以在後面又加了一個副標題而最終定名為“FPGA異構計算——基於OpenCL的開發方法”。
內容簡介
近年來,異構計算得到了業界的普遍關注。作為高性能計算的一種主流解決方案,CPU+GPU的異構計算模式已經得到了產業界和學術界的廣泛關注。從2011年Altera公司發布支持利用OpenCL來開發FPGA的SDK工具以後,採用CPU+FPGA構成異構計算系統成為另一種具有競爭力的解決方案。本書主要介紹了FPGA異構計算系統的基本架構和開發方法,並以多個不同的案例為讀者展示了如何利用幾種常用的最佳化方法來進一步提升系統性能。
本書既可以作為高性能異構計算領域研發者的參考書籍,也可以作為有興趣掌握這一新技術的電子工程師、軟體工程師或在校學生的入門教程。
目錄
第一章 FPGA異構計算 1
1.1 異構計算的發展 1
1.2 FPGA發展簡介 3
1.2.1 FPGA發展史 3
1.2.2 FPGA結構的演變 7
第二章 OpenCL基礎 14
2.1 OpenCL簡介 14
2.2 OpenCL模型 15
2.2.1 平台模型 15
2.2.2 執行模型 16
2.2.3 存儲模型 17
2.2.4 編程模型 19
2.3 OpenCL事件 19
2.3.1 命令事件 20
2.3.2 事件管理 21
2.3.3 用戶自定義事件 24
2.3.4 事件回調 25
2.3.5 進行評測 28
2.3.6 核心事件 32
2.4 OpenCL同步 33
2.4.1 設備端同步 33
2.4.2 宿主機端同步 35
第三章 基於OpenCL的FPGA開發流程 43
3.1 搭建OpenCL開發環境 43
3.1.1 開發環境選擇 43
3.1.2 開發環境搭建流程 44
3.2 開發流程 51
3.2.1 建立FPGA工程 51
3.2.2 編寫源程式 52
3.2.3 調試核心 56
3.2.4 核心編譯及下載 58
3.2.5 工程配置及運行 60
第四章 FPGA的OpenCL實現機制 66
4.1 基於FPGA的異構計算平台 66
4.2 訪存機制 68
4.2.1 全局存儲 68
4.2.2 本地存儲 69
4.2.3 訪存聚合 71
4.2.4 訪存流化 72
4.3 調度與控制機制 73
4.3.1 同步機制 73
4.3.2 執行緒調度機制 73
4.3.3 疊代控制 76
4.3.4 分支跳轉 76
第五章 OpenCL程式最佳化 79
5.1 數據傳輸最佳化 79
5.2 存儲訪問最佳化 80
5.2.1 全局訪存 80
5.2.2 本地訪存 83
5.3 數據處理最佳化 85
5.3.1 多流水線 85
5.3.2 向量化 86
5.3.3 循環展開 90
5.3.4 平衡樹 92
5.4 其他最佳化手段 93
5.4.1 運算精度 93
5.4.2 最佳化的代碼風格 94
5.4.3 吞吐率 95
5.4.4 運算開銷 96
5.5 最佳化流程 97
第六章 實現案例 99
6.1 矩陣乘法 99
6.1.1 初始核心代碼 99
6.1.2 最佳化過程 101
6.1.3 最佳化結果分析 109
6.2 求解廣義逆矩陣 109
6.2.1 算法的實現結構 110
6.2.2 最佳化過程 113
6.2.3 最佳化結果 117
6.3 圖像卷積 117
6.3.1 圖像卷積算法實現代碼 117
6.3.2 最佳化過程 119
6.3.3 最佳化結果 125
6.4 K-means聚類算法 126
6.4.1 算法的並行實現 127
6.4.2 運行結果分析 132
6.4.3 進一步最佳化 134
附錄 136
參考文獻 142