MIC編程
(基礎部分,可參考上一篇《MIC簡介》)
幾個問題:
1.什麼是MIC?
協處理器、加速卡
2.什麼是MIC編程?
讓程序運行在MIC卡上
3.如何發揮MIC卡的優勢?
並行(在衆多核心上)
4.如何並行?
應用並行庫:OpenMP、MPI、pThread、TBB……
MIC應用模式
MIC卡可以看作協處理器,也可以看作獨立的節點
MIC有5中應用模式:
CPU原生模式
CPU爲主MIC爲輔模式(最常用)
CPU與MIC對等模式
MIC爲主CPU爲輔模式
MIC原生模式(native模式)
微異構:CPU上的某些指令放在MIC上還是有些問題的。
native模式:
什麼是native模式?
僅在MIC卡上本地運行的模式
如何使用native模式?
原始CPU程序,編譯時增加“-mmic”選項
不能含SSE、AVX等向量化指令代碼
native模式有什麼好處?
簡單,無傳輸
native模式有哪些侷限?
卡上空間有限,單核計算能力有限(應該還不如CPU)
native模式適合哪種應用場景?
簡單測試、高併發的小規模程序
native模式使用方式
CPU單節點程序test_native.c
icc test_native.c -o ta.out
編譯選項增加-mmic
icc test_native.c -o ta.out -mmic
方法一:
scp將可執行程序傳到卡上
scp ta.out mic0: ~/
登錄到卡上執行程序
ssh mic0
./ta.out
遠程執行
ssh -x mic0 /root/ta.out
方法二:
無需將可執行程序傳到卡上
/opt/intel/mic/bin/micnativeloadex
對等模式(必須是CPU的MPI程序)
什麼是對等模式?
通過網絡在CPU和MIC端協同計算的模式
如何使用對等模式?
原始CPU程序,編譯兩個版本,其一增加”-mmic”
不能含有SSE、AVX等向量化指令代碼
對等模式有哪些侷限?
通信開銷大
對等模式適合哪種應用場景?
高併發的MPI程序,內部使用多線程並行
對等模式使用方法
CPU、MPI程序
編譯兩份代碼,使用mpiicc
mpiicc test_mpi.c -o tm.out
mpiicc test_mpi.c -o tm.out_mic -mmic
scp將mic端可執行程序傳到卡上
scp tm.out_mic mic0: ~/
mic運行庫
設置環境變量export I_MPI_MIC=enable
運行程序
mpirun -host(主機IP) host -n 1 ./tm.out : -host mic0 -n 1
offload模式
什麼是offload模式?
MIC作爲協處理器,負責部分運算的模式
如何使用offload模式?
修改代碼,編寫引語,類似於OpenMP
offload模式有什麼好處?
靈活、效率高
offload模式有哪些侷限?
通信開銷,需要修改代碼
offload模式適合哪種應用場景?
適合高並行加速的應用
offload基礎概念--主機和設備
Host-Device的定義
Host端:CPU主機端
運行串行部分
負責控制等
Device端:MIC設備端
作爲CPU(host)的協處理器
有獨立的存儲設備(device memory)
同時啓動大量線程進行並行計算
CPU/MIC異構協同計算模型
Fork-join模型(一般利用此模型,計算密集型)
CPU“offload (卸載)”MIC函數
MIC函數內部進行並行計算
CPU獲取MIC計算後的結果(比如說規約後的)
Offload模式運行流程
程序啓動,在CPU端運行主函數------程序運行到offload語句,得知接下來的代碼段要在MIC端運行------驅動程序檢測MIC卡是否存在,如果存在則調用MIC版本代碼,否則調用CPU版本代碼------(以下假設MIC卡存在)如果本次是第一次運行MIC程序,則驅動程序啓動/喚醒MIC卡------MIC版本代碼加載到MIC卡上------MIC端內存開闢空間,驅動程序將從數據從CPU端內存中複製到MIC端內存中------CPU端程序暫停:MIC端程序開始運行(CPU此時停下來等着)------MIC端程序段運行完成後,將數據從MIC端內存複製到CPU端內存------MIC卡回覆低功耗狀態,CPU端程序恢復運行------程序結束