DARTS極端計(jì)算的細(xì)粒度多線程執(zhí)行模型
小程序程序執(zhí)行模型
我們定義了一個(gè)新的程序執(zhí)行模型(PXM),它是強(qiáng)調(diào)使用細(xì)粒度事件驅(qū)動(dòng)任務(wù)來(lái)進(jìn)行計(jì)算的小碼模型。它受數(shù)據(jù)流執(zhí)行模型原理的啟發(fā),加上馮·諾依曼執(zhí)行模型。
1.什么是Codelets?
小碼是直到完成為止執(zhí)行的機(jī)器指令序列(通常是短的):保存非常特定的事件(例如,小碼執(zhí)行的核被標(biāo)記為有故障),小碼不能被中斷和遷移到其他地方(即,它是不可搶占的)。
小代碼觸發(fā)規(guī)則
如果所有的依賴關(guān)系都滿足,那么小代碼可以觸發(fā)。如果滿足小碼的所有數(shù)據(jù)依賴性,則啟用它。如果小碼所依賴的所有資源和其他事件也被滿足,則它準(zhǔn)備好觸發(fā)。小碼當(dāng)它當(dāng)前正在計(jì)算核上執(zhí)行時(shí)觸發(fā)。
3.小碼抽象機(jī)模型
Codelet模型依賴于一個(gè)抽象機(jī),它描述了小嵌體依賴于被分配,存儲(chǔ)和調(diào)度的機(jī)制。我們的抽象機(jī)器旨在反映未來(lái)極端系統(tǒng)的外觀。因此,我們描繪了具有通過(guò)某種互連鏈接的計(jì)算節(jié)點(diǎn)的分層機(jī)器。每個(gè)計(jì)算節(jié)點(diǎn)由也通過(guò)一些互連網(wǎng)絡(luò)(例如超傳輸或QPI)鏈接的一個(gè)或多個(gè)多核芯片組成。每個(gè)多核芯片由具有一些互連(最可能是某種類型的片上網(wǎng)絡(luò))的核的集群組成。每個(gè)核心集群由兩種核心組成:計(jì)算單元(CU),以及至少同步(有時(shí)稱為調(diào)度)單元(SU)。每個(gè)CU都可以訪問(wèn)準(zhǔn)備好的小碼池。每次在其CU上運(yùn)行小碼時(shí),CU從其就緒池中彈出另一個(gè)準(zhǔn)備好的小碼。 SU負(fù)責(zé)管理資源(例如,存儲(chǔ)器分配,網(wǎng)絡(luò)帶寬分布,...)和調(diào)度準(zhǔn)備好的小碼到右側(cè)CU。
小碼圖
當(dāng)小碼釋放一些資源,或產(chǎn)生/更新一些數(shù)據(jù)項(xiàng)時(shí),它發(fā)信號(hào)通知依賴于這些事件的小碼和/或系統(tǒng)軟件準(zhǔn)備好執(zhí)行。因此,共享依賴的小碼形成一個(gè)圖,我們稱為小碼圖(CDG)。 CDG是有向圖,其中頂點(diǎn)是小碼,并且弧是從一個(gè)小碼流到另一個(gè)小碼的依賴性。雖然CDG可以分布在整個(gè)Codelet抽象機(jī)模型上,但是它的一部分通常被分配給它的特定部分,通常是特定的集群。子程序子圖通常通過(guò)線程過(guò)程來(lái)分配。
5.螺紋程序
線程過(guò)程(TP)是異步函數(shù)。它們以控制流方式調(diào)用。 TPs由兩部分組成:一個(gè)幀和一個(gè)小碼圖。該幀包含CDG中包含的小碼所需的所有數(shù)據(jù),以便:(1)存儲(chǔ)提供給TP的輸入,并且將作為CDG中的一些小碼的初始數(shù)據(jù)輸入,(2)分配足夠的存儲(chǔ)器用于由小碼產(chǎn)生并由同一CDG中的其他人使用的任何中間數(shù)據(jù),并且最終在TP中的最后一個(gè)小碼被觸發(fā)時(shí)被綁定到解除分配,以及最后(3)分配輸出空間以存儲(chǔ)由CDG包含在TP中。形成包含在TP中的CDG的所有小碼片被立即分配:所有依賴性對(duì)于TP是靜態(tài)地知道的。因此,當(dāng)應(yīng)用的全局CDG通過(guò)線程過(guò)程的各種調(diào)用動(dòng)態(tài)分配時(shí),每個(gè)TP分配具有靜態(tài)已知依賴性的子圖。此外,一旦被調(diào)度為由SU執(zhí)行,即一旦其CDG和TP幀被分配給特定集群,則TP(及其綁定的小碼)不能在其他地方遷移(禁止與容錯(cuò)和彈性相關(guān)的一些特定例外問(wèn)題)。
誰(shuí)應(yīng)該使用小目錄?
大家!小碼旨在描述并行任務(wù)如何在并行機(jī)器的低層執(zhí)行。理想地,用戶使用具有相對(duì)直觀的表達(dá)并行性和局部性約束的方式的高級(jí)語(yǔ)言;編譯器及其相關(guān)聯(lián)的運(yùn)行時(shí)系統(tǒng)然后生成細(xì)粒度事件驅(qū)動(dòng)任務(wù)(小碼)以向底層硬件提供“最佳適配”并保持其有用繁忙。
誰(shuí)應(yīng)該直接使用小目錄?
Codelet模型及其實(shí)現(xiàn)意味著作為并行應(yīng)用程序的某種“匯編語(yǔ)言”:除非有專家硬件知識(shí)的調(diào)優(yōu)專家更好地將工作固定到底層系統(tǒng)的特定部分,我們期望生成小碼通過(guò)某種高級(jí)語(yǔ)言而不是直接使用codelet API指定。
在我們的經(jīng)驗(yàn)中,使用小碼寫并行程序類似于編寫PThread程序:通過(guò)足夠的“自我控制”,可以編寫高效的并行代碼,從而正確地利用底層硬件。然而,如果一個(gè)不是計(jì)算機(jī)科學(xué)家或計(jì)算機(jī)工程師,這可能是一個(gè)單調(diào)乏味的任務(wù)。
有多個(gè)項(xiàng)目利用了Codelet模型中表達(dá)的想法,并將高級(jí)語(yǔ)言(例如Chapel,OpenMP等)向下轉(zhuǎn)換為事件驅(qū)動(dòng)的細(xì)粒度任務(wù)系統(tǒng)(例如OCR,SWARM,DARTS)。
DARTS
Delaware自適應(yīng)運(yùn)行時(shí)系統(tǒng)是特拉華大學(xué)自己實(shí)現(xiàn)的小型模型規(guī)范。它旨在忠實(shí)地實(shí)現(xiàn)Codelet模型本身:它將一個(gè)版本的小碼抽象機(jī)映射到底層硬件;它還提供了一個(gè)兩級(jí)調(diào)度系統(tǒng)來(lái)調(diào)用線程過(guò)程并將它們映射到給定的核心集群上,并運(yùn)行它們中包含的小碼; DARTS是用C ++編寫的,并且被設(shè)計(jì)為模塊化的:它意味著一個(gè)研究工具,用于在各個(gè)方面評(píng)估Codelet模型本身:調(diào)度策略,故障恢復(fù)能力和恢復(fù),能量效率等。它當(dāng)前正在運(yùn)行在x86(64位)架構(gòu)上,并在TERAFLUX聯(lián)盟的上下文中移植到Dataflow啟發(fā)的模擬框架。 DARTS的設(shè)計(jì)和實(shí)施的描述可以在我們的網(wǎng)站的出版物部分(歐洲標(biāo)準(zhǔn)2013年)。
