GNU Make

Paralelné kompilácia kódu pomocou značky

Paralelné kompilácia kódu pomocou značky

Ktokoľvek sa spýta, ako správne zostaviť softvér, ako jednu z odpovedí navrhne Make. V systémoch GNU / Linux je GNU Make [1] verziou pôvodného Make, ktorá vyšla pred viac ako 40 rokmi - v roku 1976, s otvoreným zdrojovým kódom. Make works with a Makefile - a štruktúrovaný textový súbor s týmto názvom, ktorý možno najlepšie opísať ako stavebný manuál procesu vytvárania softvéru. Makefile obsahuje množstvo štítkov (nazývaných ciele) a špecifické pokyny potrebné na vykonanie každého cieľa.

Jednoducho povedané, Make je nástroj na zostavenie. Riadi sa receptom úloh z Makefile. Umožňuje vám to opakovať kroky automatizovaným spôsobom a nemusíte ich zadávať do terminálu (a pravdepodobne pri zadávaní robiť chyby).

Zoznam 1 zobrazuje príklad súboru Makefile s dvoma cieľmi „e1“ a „e2“, ako aj s dvoma špeciálnymi cieľmi „all“ a „clean“.”Spustenie programu„ make e1 “vykoná pokyny pre cieľ„ e1 “a vytvorí prázdny súbor. Spustenie príkazu „make e2“ urobí to isté pre cieľ „e2“ a vytvorí prázdny súbor dva. Volanie príkazu „make all“ vykoná pokyny pre cieľ e1 prvý a e2 nasledujúci. Ak chcete odstrániť predtým vytvorené súbory jedna a dva, jednoducho vykonajte hovor „make clean.“

Zoznam 1

všetky: e1 e2
e1:
dotkni sa jedného
e2:
dotkni sa dvoch
čistý:
rm jedna dva

Beh Značka

Bežným prípadom je, že napíšete svoj Makefile a potom stačí spustiť príkaz „make“ alebo „make all“ na vytvorenie softvéru a jeho komponentov. Všetky terče sú postavené v sériovom poradí a bez akejkoľvek paralelizácie. Celkový čas na zostavenie je súčet času, ktorý je potrebný na zostavenie každého jedného cieľa.

Tento prístup funguje dobre pre malé projekty, ale pre stredné a väčšie projekty trvá dosť dlho. Tento prístup už nie je aktuálny, pretože väčšina súčasných procesorov cpus je vybavená viac ako jedným jadrom a umožňuje vykonávanie viacerých procesov súčasne. S ohľadom na tieto nápady sa pozrieme na to, či a ako je možné proces zostavenia paralelizovať. Cieľom je jednoducho skrátiť čas potrebný na zostavenie.

Robte vylepšenia

Existuje niekoľko možností, ktoré máme - 1) zjednodušiť kód, 2) distribuovať jednotlivé úlohy na rôzne výpočtové uzly, vytvoriť kód tam a zhromaždiť z neho výsledok, 3) vytvoriť kód paralelne na jednom počítači a 4) skombinujte možnosti 2 a 3.

Možnosť 1) nie je vždy jednoduchá. Vyžaduje si vôľu analyzovať runtime implementovaného algoritmu a vedomosti o kompilátore, t.j.e., ako prekladač prekladá pokyny v programovacom jazyku do pokynov procesora.

Možnosť 2) vyžaduje prístup k ďalším výpočtovým uzlom, napríklad k špecializovaným výpočtovým uzlom, nepoužívaným alebo menej používaným počítačom, virtuálnym počítačom od cloudových služieb, ako je AWS, alebo k prenajatému výpočtovému výkonu od služieb, ako je LoadTeam [5]. V skutočnosti sa tento prístup používa na vytváranie softvérových balíkov. Debian GNU / Linux používa takzvanú sieť Autobuilder [17] a RedHat / Fedors používa Koji [18]. Google nazýva svoj systém BuildRabbit a je dokonale vysvetlený v prednáške Aysylu Greenberg [16]. distcc [2] je takzvaný distribuovaný kompilátor C, ktorý umožňuje paralelné kompilovanie kódu na rôznych uzloch a nastavenie vlastného systému zostavovania.

Možnosť 3 využíva paralelizáciu na miestnej úrovni. Toto môže byť možnosť s najlepším pomerom nákladov a prínosov pre vás, pretože nevyžaduje ďalší hardvér ako v možnosti 2. Požiadavka paralelného spustenia Makeu je pridanie možnosti -j do hovoru (skratka pre -jobs). Toto určuje počet úloh, ktoré sú spustené súčasne. Nasledujúci zoznam žiada, aby bolo možné spustiť súčasne 4 úlohy:

Zoznam 2

$ make --jobs = 4

Podľa Amdahlovho zákona [23] sa tak zníži doba výstavby o takmer 50%. Majte na pamäti, že tento prístup funguje dobre, ak jednotlivé ciele navzájom nezávisia; napríklad výstup cieľa 5 nie je potrebný na zostavenie cieľa 3.

Existuje však jeden vedľajší efekt: výstup stavových správ pre každý cieľ Make sa javí ako ľubovoľný a tieto už nie je možné jasne priradiť k cieľu. Poradie výstupu závisí od skutočného poradia vykonania úlohy.

Definujte Vykonať príkaz

Existujú výroky, ktoré pomáhajú spoločnosti Make pochopiť, ktoré ciele na sebe navzájom závisia? Áno! Príklad súboru Makefile v zozname 3 hovorí toto:

* Ak chcete vytvoriť cieľ „všetky“, postupujte podľa pokynov pre e1, e2 a e3

* Terč e2 vyžaduje, aby bol terč e3 postavený skôr

To znamená, že ciele e1 a e3 je možné stavať paralelne, najskôr, potom nasleduje e2, akonáhle je stavba e3 dokončená, nakoniec.

Zoznam 3

všetky: e1 e2 e3
e1:
dotkni sa jedného
e2: e3
dotkni sa dvoch
e3:
dotkni sa troch
čistý:
rm jedna dva tri

Vizualizujte Make Dependencies

Šikovný nástroj make2graph z projektu makefile2graph [19] vizualizuje Make dependencies ako nasmerovaný acyklický graf. To pomáha pochopiť, ako na sebe rôzne ciele závisia. Make2graph vydáva popisy grafov v bodovom formáte, ktorý môžete transformovať do obrázka PNG pomocou príkazu dot z projektu Graphviz [22]. Výzva je nasledovná:

Výpis 4

$ make all -Bnd | make2graph | bodka -Tpng -o graf.png

Najskôr sa Make zavolá s cieľom „všetci“, po ktorom nasledujú možnosti „-B“ na bezpodmienečné zostavenie všetkých cieľov, „-n“ (skratka pre „-dry-run“) predstierať spustenie pokynov podľa cieľov a -d “(„ -debug “) na zobrazenie ladiacich informácií. Výstup je privádzaný potrubím k make2graph, ktorý spojuje jeho výstup s bodkou, ktorá generuje graf obrázkového súboru.png vo formáte PNG.


Graf závislosti zostavenia pre zoznam 3

Viac prekladačov a zostavovacích systémov

Ako už bolo vysvetlené vyššie, značka Make bola vyvinutá pred viac ako štyrmi desaťročiami. V priebehu rokov sa paralelné vykonávanie úloh stalo čoraz dôležitejším a odvtedy vzrástol počet špeciálne navrhnutých kompilátorov a zostrojených systémov na dosiahnutie vyššej úrovne paralelizácie. Zoznam nástrojov obsahuje tieto:

Väčšina z nich bola navrhnutá s ohľadom na paralelizáciu a ponúka lepší výsledok, čo sa týka času zostavenia, ako Make.

Záver

Ako ste videli, stojí za to premýšľať o paralelných zostaveniach, pretože to výrazne skracuje čas potrebný na zostavenie na určitú úroveň. Napriek tomu to nie je ľahké dosiahnuť a prichádza s určitými nástrahami [3]. Pred vstupom do paralelných zostáv sa odporúča analyzovať váš kód aj cestu jeho zostavenia.

Odkazy a referencie

Hry Top 5 kariet na zachytávanie hier
Top 5 kariet na zachytávanie hier
Všetci sme videli a milovali streamovanie hier na YouTube. PewDiePie, Jakesepticye a Markiplier sú iba niektorí z najlepších hráčov, ktorí zarobili mi...
Hry Ako vyvíjať hru v systéme Linux
Ako vyvíjať hru v systéme Linux
Pred desiatimi rokmi by len málo používateľov Linuxu predpovedalo, že ich obľúbený operačný systém bude jedného dňa populárnou hernou platformou pre k...
Hry Open source porty komerčných herných strojov
Open source porty komerčných herných strojov
Na hranie starých i niektorých z nedávnych herných titulov je možné využiť bezplatné hry s otvoreným zdrojom a multiplatformové herné enginy. V tomto ...