華為云計算 云知識 任務(wù)調(diào)度器調(diào)度流程介紹
任務(wù)調(diào)度器調(diào)度流程介紹

昇騰AI軟件棧任務(wù)調(diào)度器調(diào)度流程在神經(jīng)網(wǎng)絡(luò)的離線模型執(zhí)行過程中,任務(wù)調(diào)度器接收來自離線模型執(zhí)行器的具體執(zhí)行任務(wù),這些任務(wù)之間存在依賴關(guān)系,需要先解除依賴關(guān)系,再進行任務(wù)調(diào)度等步驟,最后根據(jù)具體的任務(wù)類型分發(fā)給AI Core或AI CPU,完成具體硬件的計算或執(zhí)行。在任務(wù)調(diào)度過程中,任務(wù)是由多條執(zhí)行指令(CMD)組成,由任務(wù)調(diào)度器和運行管理器進行相互交互,完成整個任務(wù)指令的有序調(diào)度。運行管理器執(zhí)行在主機的CPU上,指令隊列位于設(shè)備上的內(nèi)存中,任務(wù)調(diào)度器進行具體任務(wù)指令的下發(fā)。調(diào)度過程的詳細流程如圖所示。

任務(wù)管理器和任務(wù)調(diào)度器協(xié)同運作流程圖

首先運行管理器調(diào)用驅(qū)動的dvCommandOcuppy接口進入指令隊列中,根據(jù)指令的尾部信息查詢指令隊列中可用的存儲空間,并將可以用的指令存儲空間地址返回給運行管理器。運行管理器接收到地址后,將當前準備好的任務(wù)指令填充進指令隊列存儲空間中,并調(diào)用驅(qū)動的dvCommandSend接口更新指令隊列當前的尾部信息和信用(credit)信息。隊列接收新增的任務(wù)指令后,產(chǎn)生doorbell中斷,并通知任務(wù)調(diào)度器在設(shè)備內(nèi)存中的指令隊列新增了任務(wù)指令。任務(wù)調(diào)度器得到通知后,進入設(shè)備內(nèi)存中,搬運任務(wù)指令進入調(diào)度器的緩存中進行保存,并且更新設(shè)備端DDR內(nèi)存中指令隊列的頭部信息。最后,任務(wù)調(diào)度器根據(jù)執(zhí)行情況,將緩存中的指令發(fā)送給AI CPU或AI Core進行執(zhí)行。

和大多數(shù)加速器運行時軟件棧的構(gòu)造基本一致,昇騰AI處理器中的運行管理器、驅(qū)動和任務(wù)調(diào)度器緊密配合,共同有序完成任務(wù)分發(fā)至相應(yīng)硬件資源并執(zhí)行。這個調(diào)度過程為深度神經(jīng)網(wǎng)絡(luò)計算過程中緊密有序的輸送了任務(wù),保證了任務(wù)執(zhí)行的連續(xù)性和高效性。