异构计算编程
異構(gòu)計(jì)算編程
異構(gòu)計(jì)算系統(tǒng)通常由通用處理器和許多特定于域的處理器組成:通用處理器作為控制設(shè)備(稱為主機(jī)),用于復(fù)雜的控制和調(diào)度;特定于域的處理器作為子設(shè)備(稱為MLU),用于大規(guī)模并行計(jì)算和特定于域的計(jì)算任務(wù)。主機(jī)和MLU合作完成計(jì)算任務(wù)。對于異構(gòu)計(jì)算系統(tǒng),原始的同構(gòu)并行編程模型不再適用。因此,異構(gòu)并行編程模型在學(xué)術(shù)界和工業(yè)界受到越來越多的關(guān)注。本文簡要介紹了MLU異構(gòu)編程。
編譯鏈接過程
異構(gòu)編程包括Host和MLU。對于主機(jī),主要包括設(shè)備獲取,數(shù)據(jù)/參數(shù)準(zhǔn)備,執(zhí)行流創(chuàng)建,任務(wù)描述,內(nèi)核啟動(dòng),輸出獲取等。Entry函數(shù)是MLU上的程序項(xiàng),可以調(diào)用MLU函數(shù)。MLU程序使用異構(gòu)編程模型的C / C ++語言擴(kuò)展。二進(jìn)制文件由MLU的指定編譯器編譯。
MLU異構(gòu)程序的編譯和鏈接過程
MLU異構(gòu)程序如圖2所示。MLU異構(gòu)程序。采用單獨(dú)的編程方法,即主機(jī)程序和MLU程序位于不同的文件(即主機(jī)文件和內(nèi)核文件)中。Host程序和MLU程序的異構(gòu)并行程序需要由編譯器進(jìn)行編譯。
主機(jī)程序是常見的C / C ++程序,用戶可以使用任何C / C ++編譯器,例如GCC,CLANG等。MLU程序是基于C / C ++語言的擴(kuò)展,可以通過以下方式進(jìn)行編譯: Cambricon提供的指定編譯器CNCC。主機(jī)鏈接器通過鏈接主機(jī)和MLU中的兩個(gè)目標(biāo)文件,Runtime庫和其他文件來形成可執(zhí)行程序。
平行模型
執(zhí)行模型
啟動(dòng)執(zhí)行任務(wù)時(shí),MLU270根據(jù)taskDimX以1個(gè)單元的并行度發(fā)出并執(zhí)行指令,即最小并行粒度為taskDimX = clusterDim * coreDim。對于MLU270,coreDim = 4,用戶可以通過指定Union類型來控制并行最小粒度taskDimX。下表中顯示了此限制。當(dāng)用戶指定聯(lián)合類型時(shí),如果指定的taskDimX不是clusterDim * coreDim的正整數(shù)倍,則CNRTRuntime將引發(fā)錯(cuò)誤。
限制MLU的軟件和硬件并行大小
MLU270并行執(zhí)行模型
如圖所示,主機(jī)上有三種不同的內(nèi)核功能,這些功能被傳輸?shù)組LU270設(shè)備以執(zhí)行。
總結(jié)
- 上一篇: 服务器硬件层次架构
- 下一篇: 华为不造车,广汽合作智能驾驶