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