協處理器高性能編程指南

協處理器高性能編程指南

本書英文版《Intel Xeon Phi Coprocessor High Performance Programming》由Jim Jeffers,James Reinders 編著,並由Morgan Kaufmann公司在美國出版。中文翻譯版由英特爾北京並行科技有限公司的技術專家陳健、李慧、楊昆、周姍、孫相征、游亮等人翻譯,是全面、系統地講解在英特爾至強處理器和至強融核協處理器上進行並行套用開發的專著。

基本介紹

  • 書名:Intel Xeon Phi協處理器高性能編程指南
  • 作者:[美] Jim Jeffers,[美] James Reinders
  • 原版名稱:Intel Xeon Phi Coprocessor High Performance Programming
  • 譯者:陳健 李慧 楊昆 李柏楊 李艷新 李津宇 周姍 孫相征 游亮
  • ISBN:9787115347848
  • 類別:計算機/程式設計
  • 頁數:379
  • 定價:79
  • 出版社:人民郵電出版社
  • 出版時間:2014年4月
  • 裝幀:精裝
  • 開本:80x1000 1/16
內容提要,編輯推薦,作者簡介,適用對象,精彩書評,圖書目錄,

內容提要

《Intel Xeon Phi協處理器高性能編程指南》從賽車與至強融核協處理器之間的相似性入手,抽絲剝繭、層層深入,探討實際案例指導編程套用,並對協處理器向量化、協處理器分載模式、協處理器架構及Linux系統、數學庫,以及協處理器採樣、計時與最佳化等進行了詳細的解析,是一本詳見的至強融核協處理器使用參考指南。特別是,本書所採用的方法兼容了對未來編程模式的展望和支持。

編輯推薦

《Intel Xeon Phi協處理器高性能編程指南》所採用的方法兼容了對未來編程模式的支持,書中所闡述的統一、標準和靈活的編程模式,對作為獨立處理器使用的MIC眾核產品同樣適用。

作者簡介

作者James Reinders(仁達敬), 現任英特爾軟體總監,首席技術布道師。還著有《Vtune性能分析器基礎》、《Intel Threading Building Blocks編程指南》等著作。
作者Jim Jeffers, 英特爾MIC(集成眾核)架構專家,首席工程師。
譯者並行科技團隊北京並行科技有限公司(簡稱並行科技),是一家專注於高性能計算軟體與技術服務的高新技術企業,與英特爾等軟硬體廠商有著密切的合作夥伴關係。在程式並行化、最佳化領域,並行科技擁有自主智慧財產權的Paramon套用運行特徵收集器、Paratune套用運行特徵分析器等專業工具。同時,並行科技作為英特爾軟體代理商,也為用戶提供英特爾軟體技術支持、培訓等。
譯者英特爾團隊,英特爾公司是全球最大的個人計算機零件和CPU製造商,它成立於1968年,具有46年產品創新和市場領導的歷史。

適用對象

本書適用於想要系統學習英特爾至強融核協處理器編程的讀者,無需藉助其他參考書,即可循序漸進、全面掌握。

精彩書評

2020年左右在限定功耗下實現百萬萬億次峰值的超級計算機,是世界各國競相角逐的下一個超級計算界的皇冠,中、美、日、歐等國都制定了雄心勃勃的研製計畫。到目前為止,能夠實現該目標的計算機體系結構,只有異構眾核加速體系結構具有比較清晰的路線圖,其他的幾個技術路線都有著目前看來難以逾越的技術鴻溝。英特爾順應這一技術發展趨勢,創新性地推出Xeon Phi協處理器,並助力中國國防科技大學團隊創新性地提出了微異構的眾核加速體系結構,一舉奪取了世界TOP 500的2013年6月和11月的兩屆冠軍。由於採用了與Xeon處理器同類別的X86指令集,用戶仍然可以使用自己熟悉的MPIOpenMP進行並行程式設計,極大地降低了使用該處理器的入門成本。但是,如果想更大程度地挖掘Xeon Phi的潛在性能,用戶還必須深入了解該處理器的體系結構和更多種類的並行編程模式,本書正好可以滿足此類用戶的需求。
——張雲泉,中國計算機學會高性能計算專業委員會(CCF TCHPC)秘書長

Xeon Phi協處理器正式發布之前,我們已經開始使用其試生產硬體,並進行了GeoEast處理系統下的MIC眾核並行處理模組移植測試,完成了積分法疊前時間偏移並行模組在MIC上的移植,使用了節點間MPI並行+節點內MIC/CPU協同計算模式(兩塊MIC卡/節點)。在GeoEast系統集成環境下,該模組MIC版本運行效率是原版本的3.8倍。MIC版本的程式與CPU程式代碼完全兼容,因此移植相對比較簡單,對程式進行CPU多執行緒的最佳化仍然適用於MIC版本程式,而MIC指導語句的使用也簡化了程式在MIC上的移植,使程式設計師更容易掌握,也更容易維護。我們正致力於將更多的計算密集型套用移植到Xeon Phi協處理器上,本書豐富的內容將為我們進行程式的移植提供很好的參考。
——陳維,東方地球物理公司研發中心副總工程師

IntelXeon Phi協處理器為高性能計算領域帶來了全新的MIC眾核加速解決方案,也給套用最佳化帶來了新的挑戰。在ASC超算競賽中,大學生們的MIC套用最佳化實踐證明了該技術是容易被學習掌握的,並且確實能夠給適合的套用帶來出色的加速性能。本書詳細介紹了高性能程式中套用MIC編程的方法,是非常好的MIC編程參考工具書,我相信讀者能夠從此書中學習領會到MIC眾核編程的精妙之處,從而將該技術套用到科學和工程計算領域,推動中國的高性能計算套用發展。
——劉軍,浪潮集團高性能計算總經理

圖書目錄

第1章 緒論
1.1 更加並行化
1.2 為什麼需要Intel Xeon Phi協處理器
1.3 協處理器平台
1.4 第一款Intel Xeon Phi協處理器
1.5 控制"Ninja鴻溝"於一定範圍
1.6 移植與最佳化的雙重優勢
1.7 何時使用Intel Xeon Phi協處理器
1.8 實現處理器性能最優
1.9 為何擴展超過100個執行緒如此重要
1.10 最大化並行程式性能
1.11 評估高度並行執行的能力
1.12 對於GPU是怎么樣的
1.13 易於移植,也易於提升性能
1.14 性能移植
1.15 超執行緒與多執行緒
1.16 協處理器主要使用模型:MPI和Offload
1.17 編譯器和編程模型
1.18 快取最佳化
1.19 案例和細節
1.20 更多信息
第2章 高性能封閉追蹤測試驅動
2.1 揭開引擎蓋:協處理器詳解
2.2 發動汽車:與協處理器溝通
2.3 輕鬆上路:首次運行代碼
2.4 開始加速:多執行緒運行代碼
2.5 全速行駛:使用所有核心
2.6 輕鬆過彎:訪存頻寬
2.7 高速漂移:記憶體頻寬最大化
2.8 總結
第3章 一場鄉間公路友誼賽
3.1 賽前準備:本章重點
3.2 初識賽道:9點模板算法
3.3 起跑線上:9點模板基準程式
3.4 路在前方:運行基準模板代碼
3.5 石子路上:向量化而未擴展
3.6 全力比賽:向量化加上規模擴展
3.7 扳手和潤滑油:代碼微調
3.7.1 基準校正
3.7.2 使用流存儲
3.7.3 使用2MB大型存儲頁
3.8 總結
3.9 更多信息
第4章 都市暢遊:實際代碼最佳化案例
4.1 選擇方向:基本的擴散算法
4.2 到達路口:計算邊界效應
4.3 尋找林蔭大道:代碼擴展化
4.4 雷霆之路:保證向量化
4.5 剝離:從最內層循環開始
4.6 嘗試辛烷含量更高的燃料:利用數據局部性與切片分塊提升速度
4.7 高速駕駛認證:高速旅行的總結
第5章 大數據(向量)
5.1 為什麼向量化
5.2 如何向量化
5.3 實現向量化的五種方法
5.4 六步向量化方法論
5.5 通過Cache流:布局、對齊、預取數據
5.5.1 為什麼數據布局影響向量化性能
5.5.2 數據校準
5.5.3 預取
5.5.4 流存儲
5.6 編譯器技巧
5.6.1 避免手動展開循環
5.6.2 循環向量化的要求(英特爾編譯器)
5.6.3 內聯的重要性,簡單性能分析的干擾
5.7 編譯器選項
5.8 編譯器指導指令
5.8.1 SIMD指令
5.8.2 VECTOR與NOVECTOR指令
5.8.3 IVDEP指令
5.8.4 隨機數函式向量化
5.8.5 充分向量化
5.8.6 -opt-assume-safe-padding選項
5.8.7 數據對齊
5.8.8 在數組表示法(Array Notation)中權衡向量長度
5.9 使用數組段(Array Section)支持向量化
5.9.1 Fortran數組段
5.9.2 Cilk Plus數組段和元素函式
5.10 查看編譯器生成:彙編代碼檢測
5.10.1 如何找到彙編代碼
5.10.2 快速查看彙編代碼
5.11 向量化數值結果差異
5.12 總結
5.13 更多信息
第6章 多任務(非多執行緒)
6.1 OpenMP、Fortran2008、Intel TBB、Intel Cilk Plus、Intel MKL
6.1.1 需在協處理器上創建任務
6.1.2 執行緒池的重要性
6.2 OpenMP
6.2.1 並行處理模型
6.2.2 指導性語句
6.2.3 OpenMP上的有效控制
6.2.4 嵌套
6.3 Fortran 2008
6.3.1 DO CONCURRENT
6.3.2 DO CONCURRENT以及數據競爭
6.3.3 DO CONCURRENT定義
6.3.4 DO CONCURRENT對比FOR ALL
6.3.5 DO CONCURRENT對比OpenMP"Parallel"
6.4 Intel TBB
6.4.1 發展歷史
6.4.2 使用TBB
6.4.3 parallel_for
6.4.4 blocked_range
6.4.5 Partitioners
6.4.6 Parallel_reduce
6.4.7 Parallel_invoke
6.4.8 C + +11相關
6.4.9 TBB總結
6.5 Cilk Plus
6.5.1 發展歷史
6.5.2 從TBB借用組件
6.5.3 向TBB提供組件
6.5.4 關鍵字拼寫
6.5.5 cilk_for
6.5.6 cilk_spawn與cilk_sync
6.5.7 Reducers(超對象)
6.5.8 數組表示法與基本函式
6.5.9 Cilk Plus總結
6.6 總結
6.7 更多信息
第7章 分載(Offload)
7.1 兩種分載模式
7.2 分載執行與本地執行
7.2.1 非共享記憶體模式:使用分載編譯器指導指令(Pragma)
7.2.2 共享虛擬記憶體模式:通過共享虛擬記憶體使用分載
7.2.3 Intel數學函式館(Intel MKL)自動分載
7.3 分載的語言擴展支持
7.3.1 分載的編譯器選項和環境變數
7.3.2 分載的共享環境變數
7.3.3 針對多個協處理器分載
7.4 使用編譯器指導指令分載
7.4.1 設定協處理器上的變數與函式
7.4.2 指針變數的記憶體分配與管理
7.4.3 時間最佳化:堅持分配的另外一個原因
7.4.4 對C/C++目標代碼使用編譯器指導指令
7.4.5 對Fortran語言中的目標代碼使用指導指令
7.4.6 執行單一處理器時不創建代碼
7.4.7 英特爾MIC架構預定義宏
7.4.8 Fortran數組
7.4.9 為部分C/C++數組分配記憶體
7.4.10 為部分Fortran數組分配記憶體
7.4.11 兩變數間的數據轉移
7.4.12 分載代碼指令使用的限制條件
7.5 在共享虛擬存儲器上使用分載
7.5.1 使用共享記憶體及共享變數
7.5.2 關於共享函式
7.5.3 共享記憶體管理函式
7.5.4 同步函式執行與異步函式執行:_Cilk_offload
7.5.5 共享變數和函式:_Cilk_shared
7.5.6 _Cilk_shared和Cilk_offload的使用規則
7.5.7 處理器與目標之間的記憶體同步
7.5.8 使用_Cilk_offload寫入具體目標代碼
7.5.9 使用虛擬記憶體分載代碼的限制因素
7.5.10 使用共享虛擬記憶體時定義持久性數據
7.5.11 使用共享虛擬記憶體持久性數據的C++聲明
7.6 關於異步計算
7.7 關於異步數據轉移
7.8 套用目標屬性至多個聲明
7.8.1 分載使用的vec-report可選項
7.8.2 測量分載區域的時間與數據
7.8.3 _Offload_report
7.8.4 在分載代碼中使用庫
7.8.5 關於使用xiar和xild創建分載程式庫
7.9 在協處理器上執行I/O檔案
7.10 從分載代碼中記錄stdout和stderr
7.11 總結
7.12 更多信息
第8章 協處理器架構
8.1 Intel Xeon Phi協處理器產品家族
8.2 協處理器卡的設計
8.3 Intel Xeon Phi協處理器晶片概述
8.4 協處理器核架構
8.5 指令集和多執行緒處理
8.6 快取組織和記憶體訪問
8.7 預取
8.8 向量處理單元架構
8.9 協處理器PCI-E系統接口和DMA
8.10 協處理器電源管理
8.11 可靠性、可用性和可維護性(RAS)
8.12 協處理器系統管理控制器(SMC)
8.12.1 感測器
8.12.2 散熱設計監控和控制
8.12.3 風扇控制
8.12.4 潛在套用影響
8.13 基準測試
8.14 總結
8.15 更多信息
第9章 協處理器系統軟體
9.1 協處理器軟體體系架構概述
9.1.1 對稱性
9.1.2 Ring級別:用戶態和核心態
9.2 協處理器編程模型和選項
9.2.1 寬度與深度
9.2.2 MPI編程模型
9.3 協處理器軟體體系架構組件
9.4 英特爾眾核平台軟體棧
9.4.1 MYO: Mine Yours Ours
9.4.2 COI:Coprocessor Offload Infrastructure
9.4.3 SCIF:Symmetric Communications Interface
9.4.4 Virtual networking(NetDev)、TCP/IP及sockets
9.4.5 協處理器系統管理
9.4.6 面向MPI應用程式的協處理器組件
9.5 Linux對Intel Xeon Phi協處理器的支持
9.6 最佳化記憶體分配的性能
9.6.1 控制2MB記憶體頁的數量
9.6.2 監控協處理器上2MB記憶體頁的數量
9.6.3 分配2MB記憶體頁的方法示例
9.7 總結
9.8 更多信息
第10章 協處理器的Linux系統
10.1 協處理器Linux基礎
10.2 協處理器Linux系統的啟動和配置簡介
10.3 協處理器Linux系統的預設配置
10.3.1 第一步:確保root用戶有訪問許可權
10.3.2 第二步:生成預設配置
10.3.3 第三步:更改配置
10.3.4 第四步:啟動Intel® MPSS服務
10.4 修改協處理器系統配置
10.4.1 可配置的組件
10.4.2 配置組件
10.4.3 配置啟動參數
10.4.4 協處理器根檔案系統
10.5 micctrl工具
10.5.1 協處理器狀態控制
10.5.2 啟動協處理器
10.5.3 關閉協處理器
10.5.4 重新啟動協處理器
10.5.5 重置協處理器
10.5.6 協處理器配置初始化和信息傳播
10.5.7 配置參數的輔助功能
10.5.8 其他檔案系統相關的幫助功能
10.6 添加軟體
10.6.1 其他檔案系統相關的幫助功能
10.6.2 添加檔案到根檔案系統
10.6.3 示例:添加一組全局訪問檔案
10.7 協處理器上Linux系統的啟動過程
10.7.1 啟動協處理器
10.8 Linux機群中的協處理器
10.8.1 Intel® Cluster Ready
10.8.2 如何使用Intel® Cluster Checker
10.8.3 Intel® Cluster Checker對協處理器的支持
10.9 總結
第11章 數學庫
11.1 英特爾數學核心函式館綜述
11.1.1 英特爾MKL在協處理器上的差異
11.2 英特爾數學核心函式館與英特爾編譯器
11.3 協處理器支持綜述
11.3.1 自動分載控制函式
11.3.2 設定環境變數示例
11.4 在本地模式下使用協處理器
11.4.1 本地模式使用技巧
11.5 使用自動分載模式
11.5.1 如何開啟自動分載
11.5.2 控制作業劃分示例
11.5.3 有效使用自動分載的技巧
11.5.4 有無分載情況下高效使用英特爾MKL的技巧
11.6 使用編譯器輔助分載
11.6.1 使用編譯器輔助分載的技巧
11.7 精度選擇和變化
11.7.1 快速超越函式和數學算法
11.7.2 理解幾種可能的浮點算法實現變種
11.8 總結
第12章 MPI
12.1 MPI總覽
12.2 在Intel® Xeon PhiTM上運行MPI
12.2.1 異構(非常重要)
12.3 預備工作
12.4 從MPI進程中分載(Offload)
12.4.1 Hello World
12.4.2 梯形積分算法
12.5 協處理器本地使用MPI
12.5.1 Hello World(再次)
12.5.2 梯形積分算法(回顧)
12.6 本章總結
第13章 採樣和計時
13.1 協處理器事件監視暫存器
13.1.1 本指導中使用的事件列表
13.2 效率指標
13.2.1 CPI
13.2.2 計算與數據訪問比率(Compute to Data Access Ratio)
13.3 潛在性能問題
13.3.1 通用快取使用率(General Cache Usage)
13.3.2 TLB失效
13.3.3 VPU使用率
13.3.4 記憶體頻寬
13.4 Intel® VTuneTM Amplifier XE產品
13.4.1 避免簡單採樣
13.5 性能套用編程接口
13.6 MPI分析:英特爾追蹤分析器與收集器
13.6.1 生成跟蹤檔案:面向只在協處理器上運行的套用
13.6.2 生成跟蹤檔案:面向同時在處理器和協處理器上運行的套用
13.7 計時
13.7.1 協處理器上的時鐘源
13.7.2 MIC運行時間計數器(micetc)
13.7.3 時間戳計數器 (tsc)
13.7.4 設定時鐘源
13.7.5 時間結構
13.7.6 時間懲罰
13.7.7 在分載區(offload region)測量時間和數據
13.8 總結
第14章 總結
14.1 建議
14.2 附加資源
14.3 將推出另一本書?
14.4 感謝讀者反饋
術語表

術語表

相關詞條

熱門詞條

聯絡我們