MIC 众核计算
- 簡介
- 硬件架構
- 軟件架構
- 編程模型
- MIC Offload模式
- MIC Native模式編程
- MIC MPI對稱模式編程
- MIC 編譯
- 編程實例
- MIC平臺HPC應用開發策略
- MIC程序快速開發方法
- 適應MIC的應用特征分析
- MIC并行算法設計
- MIC應用高效編程
簡介
Intel MIC 集成眾核(Many Integrated Core)架構是將多個核心整合在一起的處理器,面向HPC(High Performance Computing)領域。在其計算機體系中,并非欲取代CPU,而是作為協處理器存在的。
雖然Intel官方聲稱原生的CPU程序無需進行大的改動即可在MIC芯片上運行,但在具體的應用移植過程中發現,真實的應用在MIC架構下通常都會在規模、內存以及第三方庫移植等各方面受到一定的制約。
硬件架構
MIC Core的組成:
- 單芯片57~61Cores,每個Core有4個硬件線程,硬件線程調度器將4個硬件線程以順序輪詢方式并發執行。
- 指令譯碼/發射器。
- Pipe0和Pipe1執行管線。
- VPU單元:(Vector Permutate Unit)512位向量處理單元,一次可處理16個單精度計算。
- X86單元:x86架構的標量微處理器單元,與Xeon共享代碼,編程簡單,開發周期短,工具鏈通用。
- 2級Cache
- 2級TLB(Translation Lookaside Buffer)轉換檢測緩沖區,用于改進虛擬地址到物理地址轉換速度的緩存
- Cache未命中處理單元
- CRI:內核與片上環形總線的鏈接接口
- 片上軟件實現TCP/UDP IP :單卡 ≈ 獨立的MPI節點/進程
MIC性能:
- 單核:計算能力較 Core core差,較GPU core強
- 單卡:雙精度 > 1TFLOPS (Floating-point operations per second:每秒浮點運算次數)
片上對稱多處理器(Symmetric Multiprocessor on-a-chip,SMP)是對Intel MIC架構的準確描述方式,Intel Xeon Phi(至強融核)協處理器是基于Intel MIC架構的首款產品。協處理器卡的核心是Intel Xeon Phi協處理器芯片,由61個IA(Intel Architecture)核組成,這些核執行IA指令集,每個核有4個完全相同的硬件線程。
MIC每個核的二級緩存組織包括:
- 一級緩存:32KB數據緩存、32KB指令緩存
- 二級緩存:512KB私有(本地)緩存
512KB的私有二級緩存總共構成了容量可達30.5MB的片上緩存。所有的二級緩存由全局分布的 (global-distributed) 標簽目錄保持完全一致。
內存控制器和 PCIe 客戶端邏輯分別向協處理器上的 GDDR5 內存和 PCIe 總線提供一種直接接口。所有這些組件都由環形互連連接在一起,被多個核共享的數據將會被復制到需要使用該數據的核所對應的本地二級緩存中,所以,如果每個核都以完美的同步方式共享相同的代碼和數據,則有效的二級緩存容量只有512KB。所以,二級緩存的實際可用容量大小與代碼和數據在核與線程間的共享情況密切相關。
協處理器同時支持4KB(標準)、64KB(非標準)和2MB(超大,標準)頁面大小的虛擬內存管理。較小頁面的訪問會帶來總體內存映射空間變小以及最快的訪問速度。4KB的頁面大小長期以來是Linux的標準設置。64KB的頁面大小在現有的微處理器并不常見,同時需要Linux核心的特殊支持。2MB大型存儲頁支持一般是可用的,但是應用程序或運行環境需要經過一些特殊的修改。在訪問大數據集和數組時,使用超大頁面能夠通過提高TLB命中率提升應用性能,這點在應用優化時需要額外注意。
協處理器芯片的每一個核都包含有一個512位寬的SIMD向量處理單元(VPU),并設計了通信向量化指令集。VPU每個時鐘周期可同時處理16個單精度(32bit)或8個雙精度(64bit)浮點運算。另外,還包含一個擴展數學單元(EMU,Extended Math Unit)用來實現單精度的超越函數指令集,即通過硬件實現指數、對數、倒數和倒數平方根等常用數學運算。
Intel Xeon Phi協處理器主要針對高度并行化的負載優化,同時支持多種常用的編程語言、編程模式和編程工具。除了大量的處理核心,協處理器還包括提供了并行功能的向量處理器單元。此外,協處理器的PCIe接口、DMA、電源管理、傳感器以及散熱監控等均有各自的設計特點。
軟件架構
系統:
- 片上uOS,基于linux
語言:
- 支持C、C++、Fortran
支持多種并行模型
- OpenMP、pthread、Clik
- MPI,片上支持TCP/IP,MIC卡可作為獨立節點
Intel工具鏈都支持MIC:
- Intel parallel studio
- 片上軟件實現TCP/UDP,IP
- MIC卡自動檢測識別,增強軟件自適應性
開發流程
- CPU單線程=> CPU多線程(OpenMP) => MIC Offload&Opt => MIC+CPU協同計算
MIC的μOS建立的基本執行環境,是其他軟件棧的基礎。MIC的μOS是基于標準的Linux內核源碼。MIC基于Linux的μOS是最小化的,是嵌入式Linux環境通過Linux標準基礎(LSB,Linux Standard Base)核心庫一直到MIC架構的產物,這也是個未簽名的操作系統。μOS提供一些典型的能力,如:進程/任務創建、時序安排、內存管理等。μOS也提供設置、電源和服務器的管理能力。
Intel MPSS提供驅動程序,將PCIe總線映射成一個網絡棧中的以太網設備,虛擬化TCP/IP堆棧。系統可以配置橋接TCP/IP網絡于所連接的其他網絡通信。使用戶可以將其作為網絡節點直接使用ssh連接到協處理器上。
編程模型
MIC擁有較為靈活的編程方式,MIC卡可以作為一個協處理器存在,也可以被看做是一個獨立的節點。host端與MIC端的關系可以組合成一下5種關系:
而實際中的的應用模式通常不會這樣復雜,常用的模式:
Native模式,即MIC本地模式:
- 手動將二進制文件傳到MIC卡上并運行。
- 所有負載均在MIC端,通常使用于高并行計算程序,程序直接在MIC執行。
- 應用移植來說難度較小,客觀限制較多,如內存,第三方庫函數等,提升的性能效果也比較有限。
offload模式:
- 從CPU端運行程序,主函數由host發起。
- 通過引語方式,將高度并行的計算部分標示為MIC端代碼,分載到MIC端,由協處理器完成計算后返回結果。
- 語法類似于OpenMP,簡單。
- 集調用設備、開辟空間、數據傳輸于一身。
- 有更為明顯的性能提升效果,缺點是移植較為復雜,特別是對于一些數據結構、算法邏輯較為復雜的代碼,甚至需要完全重寫。
對稱模式:
- Host-MIC對稱模式
- MPI模式
MIC Offload模式
Offload+OpenMP :
- Offload:空間開辟、數據傳輸(in&out)
- OpenMP:實現多線程并行
- Offload與OpenMP結合,使代碼在MIC卡上并行執行
MIC Offload數據傳輸模式(難點&耗時) :
- 只能傳輸連續地址空間數據塊
- In:copy CPU to MIC
- Out:copy MIC to CPU
- Inout:copy in&out both
- Nocopy:the Data is already local to MIC
MIC Native模式編程
- 不用在OpenMP基礎上添加任何代碼
- 編譯 icc –openmp –mmic –o OnShipTest piTest.c
- 為MIC卡配置IP,并寫入/etc/hosts
- 上傳到MIC卡上
? micput mic0 OnShipTest /tmp(可執行程序)
? micput mic0 libiomp5.so /tmp(openmp庫)
? 正式發布:使用scp等方式,或直接把MIC卡顯存通過NFS共享至host - 登錄MIC節點 ssh mic0
- 配置環境
? cd /tmp
? export LD_LIBRARY_PATH=/tmp - 執行程序 ./ OnShipTest
MIC MPI對稱模式編程
- 編程方法同Native模式
- 只是使CPU、MIC同時參與運算
- CPU、MIC間以MPI交互
- 編譯同Native模式
- 執行模式與普通CPU MPI應用類似,將MIC卡視作一個節點
MIC 編譯
- Intel編譯器:icc/icpc/ifort
- CPU+MIC:default or -offload-build選項
- CPU only:-no-offload選項
編程實例
- 計算PI實例:piTest.c
- 編譯:
? icc –openmp –o piTest piTest.c(默認打開offload)
? icc –openmp –offload-build –o piTest piTest.c
? icc –openmp –no-offload –o piTest piTest.c - 運行:./piTest
- 查看是否跑在MIC上
? export H_TRACE = 1(CPU/MIC基本信息)
? export H_TRACE = 2(更詳細信息) - 查看MIC運行時間
? export H_TIME=2 - MIC上加打印
MIC平臺HPC應用開發策略
- 適應MIC的應用特征分析
- MIC眾核并行算法設計
- MIC應用高效編程
- MIC應用效率與可擴展性能提升
MIC程序快速開發方法
分析原有CPU程序:
- 熱點定位
- 并行性、向量化、內存分析
MIC平臺開發 :
- CPU平臺OpenMP版本開發
- 基于CPU平臺的MIC線程擴展
- 單節點下CPU+MICs異構協同計算
- MIC集群大規模運算
MIC平臺優化 :
- 向量化優化
- 內存優化(L1、L2 Cache優化)、IO優化
適應MIC的應用特征分析
移植可行性分析 :
- 是否擁有全部或核心源代碼
- 所使用的編程語言
- 是否可以用Intel編譯器編譯
性能可行性分析 :
- 并行度
- 線程擴展性
- CPU利用率
- 向量化
- 通信分析
- 內存帶寬
- 熱點比例
MIC并行算法設計
- 并行粒度與并行度 : MIC百級以上線程+ 指令級并行( 512位向量化)
- 線程的可擴展性:是否有數據有依賴或部分依賴造成線程同步等待
- 大規模數據的分塊處理:避免GPU或MIC的顯存空間制約,避免過多臨時中間數據的產生 。
- 計算與訪存比
- 訪存方式:連續or跳躍
MIC應用高效編程
CPU+MIC異構:
- 基于X86指令架構下異構模式
- X86多核+X86眾核
- 通用編程思路
? MPI
? OpenMP
? OpenCL
MIC編程方式 :
- Native方式
- Offload方式
- Symmetric方式
? GTC
? Grapes
| Native | ? 只編譯:-mmic ? 編程周期短 | ? 只適用單卡、內存占用小的應用 ? 性能受限串行部分比例 |
| Offload | ? 類似OpenMP引語編程 ? 編程簡單 | 大型應用開發周期相對較長 |
| Symmetric | ? 只編譯:-mmic ? 編程周期短 | ? 第三方庫的編譯支持 ? MPI進程通信開銷 |
總結
- 上一篇: R,Python,Scala,Go,Ju
- 下一篇: 天河二号使用指南