ГНУ Маке

Компајлирање кода паралелно помоћу програма Маке

Компајлирање кода паралелно помоћу програма Маке

Кога год питате како да правилно направите софтвер, смислиће као један од одговора. На ГНУ / Линук системима, ГНУ Маке [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

Више компајлера и система за изградњу

Као што је већ објашњено горе, Маке је развијен пре више од четири деценије. Током година паралелно извршавање послова постајало је све важније, а од тада је растао број посебно дизајнираних компајлера и система за изградњу како би се постигао виши ниво паралелизације. Листа алата укључује следеће:

Већина њих је дизајнирана с паралелизацијом на уму и нуди бољи резултат у погледу времена израде од Маке-а.

Закључак

Као што сте видели, вреди размислити о паралелним градњама, јер значајно смањују време израде до одређеног нивоа. Ипак, то није лако постићи, а долази са одређеним замкама [3]. Препоручује се да анализирате и свој код и његову путању градње пре него што закорачите у паралелне верзије.

Везе и референце

Најбоље апликације за мапирање гамепада за Линук
Ако волите да играте игре на Линуку са гамепадом уместо са типичним системом за унос тастатуре и миша, за вас постоје неке корисне апликације. Многе и...
Корисни алати за Линук играче
Ако волите да играте игре на Линуку, велика је вероватноћа да сте можда користили апликације и услужне програме попут Вине, Лутрис и ОБС Студио за поб...
ХД Ремастеред игре за Линук које никада раније нису имале Линук издање
Многи програмери и издавачи игара долазе са ХД ремастером старих игара како би продужили живот франшизе, молимо обожаваоце да захтевају компатибилност...