Кога год питате како да правилно направите софтвер, смислиће као један од одговора. На ГНУ / Линук системима, ГНУ Маке [1] је верзија оригиналног Маке-а отвореног кода која је објављена пре више од 40 година - 1976. године. Маке функционира са Макефиле - структурираном обичном текстуалном датотеком с тим именом која се најбоље може описати као приручник за израду процеса израде софтвера. Макефиле садржи одређени број ознака (које се називају циљеви) и специфичне инструкције потребне за извршавање сваког циља.
Једноставно речено, Маке је алат за изградњу. Следи рецепт задатака из Макефиле-а. Омогућава вам да аутоматизовано понављате кораке, уместо да их куцате у терминалу (и вероватно грешите док куцате).
На списку 1 приказан је пример Макефиле са два циља „е1“ и „е2“, као и два посебна циља „све“ и „чисто.Покретањем „маке е1“ извршавају се упутства за циљ „е1“ и креира се празна датотека. Покретање „маке е2“ чини исто за циљ „е2“ и ствара празну датотеку два. Позив „направи све“ прво извршава упутства за циљ е1 и е2 следећи. Да бисте уклонили претходно створене датотеке један и два, једноставно покрените позив „почисти.”
Списак 1
сви: е1 е2е1:
додирните један
е2:
додирните два
чист:
рм један два
Руннинг Маке
Уобичајени случај је да напишете свој Макефиле, а затим само покренете команду „маке“ или „маке алл“ за изградњу софтвера и његових компоненти. Сви циљеви су изграђени у серијском редоследу и без икакве паралелизације. Укупно време израде је збир времена потребног за изградњу сваког појединачног циља.
Овај приступ добро функционише за мале пројекте, али траје прилично дуго за средње и веће пројекте. Овај приступ више није ажуран, јер је већина тренутног процесора опремљена са више језгара и омогућава извршавање више одједном процеса. Имајући ове идеје на уму, гледамо да ли се и како процес израде може паралелизовати. Циљ је једноставно смањити време израде.
Направите побољшања
Постоји неколико опција које имамо - 1) поједноставити код, 2) дистрибуирати појединачне задатке на различите рачунске чворове, тамо изградити код и сакупљати резултат, 3) паралелно градити код на једној машини и 4) комбинујте опције 2 и 3.
Опција 1) није увек лака. Потребна је воља за анализом времена извршавања имплементираног алгоритма и знања о компајлеру, тј.е., како преводилац преводи упутства у програмском језику у упутства процесора.
Опција 2) захтева приступ другим рачунарским чворовима, на пример, наменским рачунарским чворовима, некоришћеним или мање коришћеним машинама, виртуелним машинама из услуга у облаку попут АВС-а или изнајмљеној рачунарској снази од услуга као што је ЛоадТеам [5]. У стварности, овај приступ се користи за изградњу софтверских пакета. Дебиан ГНУ / Линук користи такозвану мрежу Аутобуилдер [17], а РедХат / Федорс Који [18]. Гоогле свој систем назива БуилдРаббит и то је савршено објаснио у говору Аисилу Греенберг [16]. дистцц [2] је такозвани дистрибуирани Ц компајлер који вам омогућава паралелно компајлирање кода на различитим чворовима и постављање вашег сопственог система градње.
Опција 3 користи паралелизацију на локалном нивоу. Ово може бити опција са најбољим односом трошкова и користи за вас, јер не захтева додатни хардвер као у опцији 2. Услов за покретање Маке паралелно је додавање опције -ј у позив (скраћено од -јобс). Ово одређује број послова који се истовремено покрећу. Списак испод тражи да направите паралелно покретање 4 посла:
Списак 2
$ маке --јобс = 4Према Амдахловом закону [23], ово ће смањити време израде за скоро 50%. Имајте на уму да овај приступ добро функционише ако појединачни циљеви не зависе једни од других; на пример, излаз циља 5 није потребан за изградњу циља 3.
Међутим, постоји један нуспојава: излаз статусних порука за сваку опцију Маке таргет изгледа произвољно и оне више не могу бити јасно додељене циљу. Излазни редослијед овиси о стварном редослиједу извршења посла.
Дефинишите налог за извршење
Постоје ли изјаве које помажу Наредити да схвати који циљеви зависе једни од других? да! Пример Макефиле на листи 3 каже ово:
* за изградњу циљаних „свих“, покрените упутства за е1, е2 и е3
* циљ е2 захтева да се циљ е3 претходно изгради
То значи да се циљеви е1 и е3 могу градити паралелно, прво, затим следи е2 чим се изградња е3 заврши, коначно.
Списак 3
сви: е1 е2 е3е1:
додирните један
е2: е3
додирните два
е3:
додирните три
чист:
рм један два три
Визуелизујте прављење зависности
Паметни алат маке2грапх из пројекта макефиле2грапх [19] визуализује прављење зависности као усмерени ациклични граф. Ово помаже да се разуме како различити циљеви зависе једни од других. Маке2грапх даје описе графикона у тачкитом формату који можете трансформисати у ПНГ слику помоћу тачке наредбе из пројекта Грапхвиз [22]. Позив је следећи:
Списак 4
$ маке алл -Бнд | маке2грапх | тачка -Тпнг -о графикон.пнгПрво се позива Маке са циљем „алл“, а затим опцијама „-Б“ за безувјетно изградњу свих циљева, „-н“ (скраћеница од „-дри-рун“) да би се претварао да извршава упутства по циљу и „ -д ”(„ -дебуг ”) за приказ информација о отклањању грешака. Излаз се прелази у маке2грапх који свој излаз преусмерава у тачку која генерише графикон датотеке слике.пнг у ПНГ формату.
Графикон зависности од састављања за списак 3
Више компајлера и система за изградњу
Као што је већ објашњено горе, Маке је развијен пре више од четири деценије. Током година паралелно извршавање послова постајало је све важније, а од тада је растао број посебно дизајнираних компајлера и система за изградњу како би се постигао виши ниво паралелизације. Листа алата укључује следеће:
- Базел [20]
- ЦМаке [4]: скраћује вишеплатформно Маке и креира датотеке описа које је касније користио Маке
- дистмаке [12]
- Дистрибутед Маке Систем (ДМС) [10] (чини се да је мртав)
- дмаке [13]
- ЛСФ марка [15]
- Апацхе Мавен
- Месон
- Ниња Буилд
- НМаке [6]: Направите за Мицрософт Висуал Студио
- ПиДоит [8]
- Кмаке [11]
- редо [14]
- СЦонс [7]
- Ваф [9]
Већина њих је дизајнирана с паралелизацијом на уму и нуди бољи резултат у погледу времена израде од Маке-а.
Закључак
Као што сте видели, вреди размислити о паралелним градњама, јер значајно смањују време израде до одређеног нивоа. Ипак, то није лако постићи, а долази са одређеним замкама [3]. Препоручује се да анализирате и свој код и његову путању градње пре него што закорачите у паралелне верзије.
Везе и референце
- [1] ГНУ Маке Мануал: Паралелно извршавање, хттпс: // ввв.гну.орг / софтваре / маке / мануал / хтмл_ноде / Параллел.хтмл
- [2] дистцц: хттпс: // гитхуб.цом / дистцц / дистцц
- [3] Јохн Грахам-Цумминг: Замке и благодати ГНУ-а чине паралелизацију, хттпс: // ввв.цмцроссроадс.цом / артицле / замке-и-користи-гну-маке-паралелизација
- [4] ЦМаке, хттпс: // цмаке.орг /
- [5] ЛоадТеам, хттпс: // ввв.лоадтеам.цом /
- [6] НМаке, хттпс: // доцс.мицрософт.цом / ен-ус / цпп / буилд / референце / нмаке-референце?поглед = мсвц-160
- [7] СЦонс, хттпс: // ввв.сцонс.орг /
- [8] ПиДоит, хттпс: // пидоит.орг /
- [9] Ваф, хттпс: // гитлаб.цом / ита1024 / ваф /
- [10] Дистрибуирани систем израде (ДМС), хттп: // ввв.нонгну.орг / дмс / индек.хтмл
- [11] Кмаке, хттпс: // доц.кт.ио / кт-5 / кмаке-приручник.хтмл
- [12] дистмаке, хттпс: // соурцефорге.нет / пројецтс / дистмаке /
- [13] дмаке, хттпс: // доцс.пророчиште.цом / цд / Е19422-01 / 819-3697 / дмаке.хтмл
- [14] редо, хттпс: // редо.реадтхедоцс.ио / ен / најновије /
- [15] ЛСФ Маке, хттп: // сунраи2.мит.еду / китс / платформ-лсф / 7.0.6/1 / гуидес / кит_лсф_гуиде_соурце / принт / лсф_маке.пдф
- [16] Аисилу Греенберг: Изградња дистрибуираног система градње на Гоогле Сцале-у, ГоТо Цонференце 2016, хттпс: // готоцон.цом / дл / гото-цхицаго-2016 / слидес / АисилуГреенберг_БуилдингАДистрибутедБуилдСистемАтГооглеСцале.пдф
- [17] Дебиан Буилд Систем, мрежа Аутобуилдер, хттпс: // ввв.дебиан.орг / девел / буилдд / индек.ен.хтмл
- [18] који - Систем за изградњу и праћење РПМ-а, хттпс: // пагуре.ио / који /
- [19] макефиле2грапх, хттпс: // гитхуб.цом / линденб / макефиле2грапх
- [20] Базел, хттпс: // базел.буилд /
- [21] Водич за Макефиле, хттпс: // макефилетуториал.цом /
- [22] Грапхвиз, хттп: // ввв.грапхвиз.орг
- [23] Амдахлов закон, Википедиа, хттпс: // ен.википедиа.орг / вики / Амдахл% 27с_лав