MPI Trace Art

The internal working of most MPI libraries is considered black magic by many. Indeed, the PMPI profiling interface, used by virtually all portable tracing and profiling libraries, treats all collective operations as black boxes and one only sees coloured polygons in the trace visualisation and all messages sent between the processes in order to implement a given collective operation remain hidden. Fortunately the most widely used general purpose MPI implementations come with openly accessible source codes and one can easily reimplement all collective algorithms using regular point-to-point MPI operations in order to be able to trace them and to analyse their performance. Some nice graphics could also be produced as a by-product. Surprisingly, it turns out that some of those traces resemble modern art. And thus the MPI trace art is born.

Motivated by some unusual behaviour of the MPI broadcast operation in Open MPI on RWTH’s compute cluster (unusually long completion time given a certain “magic” number of MPI processes), I reimplemented some of the broadcast algorithms from the tuned module of the coll component type and traced the result with VampirTrace. tuned is currently the collective communications module that gets selected for most cluster jobs unless one intervenes in the module selection process. It implements several different algorithms and selects between them using an empirically derived heuristic logic, unless a special file with dynamic rules has been provided. Here is what the default algorithm for broadcasting large messages to a large number of processes looks like in Vampir:

/images/coll_tuned_bcast_intra_pipeline.thumbnail.png

MPI_Bcast with segmented pipelining

Each message is split into many segments of equal size (except the last one that could be shorter) and then a pipeline is built — the root rank process sends to the next rank, which sends to the rank after it, and so on. The change of slope between ranks 11 and 12 is a clear sign of inter-node communication with different latency and/or bandwidth. Since the InfiniBand network has higher latency than the shared memory, used for intra- node messaging, a build-up of messages is observed which leads to the compression of the message lines the further it goes in time. Another such slope change is present between ranks 23 and 24, but it does not lead to another bunching of message lines as they have already been spread out while crossing between ranks 11 and 12. The narrow polygon on the left side is an MPI_Barrier collective call and is an example of how opaque are the MPI collectives when seen through the PMPI interface.

Note the overall peaceful feeling, streaming from the communication structure — it almost looks like a laminar fluid flow. No surprise that this is the best performing broadcast algorithm, which is available in Open MPI, when it comes to large messages and a huge number of participating ranks.

A variation of this algorithm uses several pipelines to transport the segments:

/images/coll_tuned_bcast_intra_chain.thumbnail.png

MPI_Bcast with segmented chaining (4 chains)

The root rank feeds simultaneously several separate chains (or short pipelines) — four in this specific case. As the time between two consecutive segments are sent to the same chain is more than the time it takes for the segments to traverse the InfiniBand link between ranks 11 and 12, no bunching of message lines is observed as in the case with the full pipeline.

There are also algorithms that communicate messages over a tree structure. They make for less pretty and more “angry” looking pictures.

/images/coll_tuned_bcast_intra_bintree.thumbnail.png

MPI_Bcast with segmented binary tree distribution

/images/coll_tuned_bcast_intra_binomial.thumbnail.png

MPI_Bcast with segmented binomial tree distribution

Communication in the top picture follows a binary tree pattern while that in the bottom one – a binomial tree. Both trees differ in the distribution of process ranks among the nodes of the tree and in their breadth/depth given the same number of ranks. Although the overall message line density looks nearly the same (especially when looked at from a distance), on close inspection one can see that the “rays” of messages near the bottom actually follow completely different patterns.

Besides being pretty, these traces are instructive too. Many times the really performant implementations of MPI collectives are quite complicated and not always obvious. That’s why it is best to stick with the vendor provided collectives and not to try to reimplement them in your own code (unless one reimplements them for debugging or research purposes).

More trace art will come some day.

Последната линейка на София

Разбрах съвсем случайно за него днес от WDR 3 (нещо като немски еквивалент на радио “Христо Ботев”), което от известно време непрекъснато върви на уредбата в хола. Тъжно е, че някой би употребил точно прилагателното последната, когато става дума за обществена услуга, чиято мисия е точно предотвратяването на преждевременното настъпване на последния момент в живота на човек. Още по-тъжно е, че това лице на страната ни, в частност на столицата, печели награди от френската културна и телевизионна общественост.

И няма как да не ти стане тъжно, когато някой по върховете смята, че проблемите се решават не с реформи, а с нов бранд [sic] и с ново лого на страната, и че 1,4 млн. лв. за това е нормална сума. Само където действителността е отчайващо грозна, и подобни филми, а сега и Google street view, го показват. И никакви рекламни трикове и скъпи картинки не могат да го замажат.

Не съм гледал Sofias letzte Ambulanz, но дори публично достъпните сцени на тресящата се през дупките по улицата линейка са достатъчно потресаващи. (прощавайте за повторението)

За щастието

Преди почти месец разузнаването докладва, че предишното писание е възможно да е предизвикало известен смут сред около 33% от четящите тук (което вероятно прави един или двама души), поради което започнах да списвам някои пояснения. След това ми се струпа работа и малко поотоложих, но след годишния Mitarbeitergeschpräch днес, където отново засегнахме темата за щастието, както професионалното, така и личното, седнах да завърша това писание.

Понякога в нещата които правя, и най-вече в тези, които пиша, прозира капка меланхолична тъга, която лесно може да се сбърка с нещастие или с някаква форма на депресия. Но истината е, че не съм нещастен и/или депресиран. Напротив, от известно време насам преоткривам личното щастие — онова, което идва отвътре. Бях позабравил този факт, но щастието всъщност е вътрешен процес, който обаче изисква известно волево усилие, за да се поддържа. Никой не може да ти даде отвън истинско щастие, ако дълбоко вътре в себе си ти не желаеш наистина да бъдеш щастлив, или дори и да може, това външно щастие е точно толкова трайно, колкото трайно е присъствието в живота ти на породилия го. Човек лесно бърка някои емоционални моменти с истинското щастие и често пада жертва на коварната грешка, допускайки външното щастие да измести вътрешното и така позволява на други да бъдат господари (съзнателни или не) на емоциите му. Още по-трагично е когато двама души допуснат това един спрямо друг и така се породи самоподхранваща се циклична зависимост. Резултатът е, че ако връзката между двамата се прекъсне по една или друга причина, то остават за дълго две изключително нещастни и объркани човешки същества.

Стремежът към вътрешно щастие не бива да се бърка с егоистичното търсене на хедонистично самозадоволство. Напротив, вътрешно щастливият човек е източник на радост както за себе си, така и за тези, с които общува, независимо от дълбочината на общуването и наличието или не в него на чувства. Понякога дори може да се стигне до катализиране на процеси, източници на вътрешно щастие в другите. Двама истински щастливи души не могат да изпаднат в примката на взаимното подхранване и съответно могат да градят на съвсем друго ниво помежду си, свободни от онзи страх, че най-вероятно ще останат нещастни, ако нишката между тях се прекъсне. Да, страхът е много силен свързващ инстинкт от еволюционна гледна точка, но след толкова години на развитие на Homo Sapiens, крайно време е висшата нервна дейност, в това число и онази възвишена неинстинктивна чувственост, да започне да притъпява и контролира поне частично елементарните ни животински инстинкти.

А меланхоличната тъга — тя е моя вечна спътница. Вероятно плод на лекото ми биполярно разстройство, тя ми помага да познавам радостта и щастието. Не бива да се забравя психофизичният закон на Вебер-Фехнер: човек е устроен така, че усеща не абсолютната стойност на външното влияние, а само относителната му промяна. Едно от следствията на това е хедонистичната адаптация [1] — човек лесно свиква с хубавото и удобното, в резултат на което последното постепенно губи статуса си на нещо специално и се превръща в нещо съвсем обикновено, резултат от промяната на положението на базовото ниво [2]. Затова по мъничко тъга понякога (като “понякога” означава “не много често”, което пък със сигурност не означава “всеки ден”) е полезна, защото не позволява да бъде подложена на хедонистична адаптация радостта от живота поради пресищане на допаминовите рецептори в мозъка.

И така, щастието се оказа въпрос на личен избор и сега съм щастлив в положението, в което сам се насадих. Щастлив съм и това създава верига на положителна обратна връзка — нещата, които върша напоследък, ме правят още по-щастлив, което започва да се отразява обратно във всички аспекти на живота ми, включително и в нещата, които върша напоследък. И още, превантивна забележка: идва ми отвътре, така че в Холандия ходя само и единствено на гости на много скъп приятел, а не за да търся специфичните за нея държава източници на щастие (намиг, намиг)

[1] Импликацията в случая е възможно да има спекулативен характер (бел. авт.)
[2] Други следствия са съответно измерването на силата на чалга-и-поп шума от радиото в dB и на привидната яркост на звездите в логаритмичната скала на звездните величини (бел. авт.)

Една година в Германия

Още помня всеки звук, всяко движение, всяка глътка въздух него ден — 23-ти януари 2012 г. — на пръв поглед обикновен, забързан по софийски, зимен понеделник. На пръв поглед обикновен маршрут по булевард Брюксел, почти пуст както обикновено, през входа на Терминал 2, където, както обикновено, цари суматоха от пристигащи и заминаващи, посрещачи и изпращачи, през проверката за сигурност и граничния контрол, до седалките в партера на изхода, от който автобусите извозват пътниците до спрелите някъде там самолети. Най-обикновен маршрут - бях го изминавал в двете посоки поне пет пъти за предишните няколко години. Но нещо този път беше различно. Защото всяка следваща стъпка ставаше все по-трудна — краката ми като че се наливаха с олово, а светът наоколо бавно се стапяше и превръщаше в сън. Какво правя? Защо на билета ми до Düsseldorf не фигурира обратен полет?! Нима е еднопосочен? Еднопосочен?! Къде отивам? Каква Германия?! Та аз дори не знам езика и едва преживях три дена в Nürnberg по-рано! Къде ще живея? Та аз една видеокасета не мога да наема, какво остава за жилище в друга държава… Защо си го причинявам? Защо ни го причинявам? Защо им го причинявам? …


Всяко начало е трудно. Още по-трудно е, когато наивно си въобразяваш, че всъщност не е никакво начало, а само временно отклонение от пътя, след което отклонение всичко ще се върне и ще си бъде както преди. Реалността, обаче — онова, което се случва, докато кроим съвсем други планове, — доста бързо се включва с надлежна демонстрация, че всичко това са по детски наивни бленувания, че времето и разстоянието променят безмилостно всичко и всеки, и че независимо колко се бориш, идва момент, когато отклонението никога повече не може да се върне при предишния път. Не защото се е отдалечило твърде много от него, а защото предишният път внезапно се е стопил и отклонението вече не е никакво отклонение, а новият път, по който следва да продължиш нататък. Отново сам…


Сърдечно благодаря на колегите ми от RWTH, които ме приеха като един от тях, въпреки че не говорех езика им, дарявайки ми с онзи приятелски комфорт, който превръща всяка работа в удоволствие, разбивайки пътьом стереотипа за студените безчувствени германци. Благодаря и на онези мои близки и приятели, които бяха неотменно до мен, макар и само виртуално, и които ме насърчаваха и безукорно подкрепяха в неизмеримо трудните моменти, в които губех почвата под краката си. Безкрайни благодарности на той-си-знае-кой и тя-си-знае-коя, които, в телефонните си обаждания в тях моменти, ми припомняха, колко по-безизходни ситуации може да има и колко безсмислени са поради това терзанията ми — не знам какво щях да правя без вас.

Да, измина една година. Това е само началото.

Интервал

Отново на 20. Преди време открих, че на всеки две години мога да ставам на 20, стига да избера подходящата бройна система. Просто ей така, от разсеяност забравям да добавя скобките с числото на основата и отново съм млад, безгрижен и необременен с рутината и необходимостите на живота като редови член на обществото. Но днешното 20 е специално, защото бройната система този път е шестнадесетична. И защото 0x20, освен че е 25 (а днес е 5-ти и 10 в двоична бройна система е 2), е и кодът на интервала във всички широко използвани компютърни азбуки, дори в недоразумението, известно като “7-битова GSM азбука”, с която се борих като прасе с тиква съвсем наскоро.

Интервалът, това лишено от графично изображение празно пространство. Интервалът, използван в някои компютърни езици за пълнеж на онези излишни части от стринговете, в които няма записано нищо смислено. Интервалът, ненавиждан от старите транслатори, чиято първа работа е да премахнат всички интервали от реда, защото от тяхна гледна точка последните са излишни. Интервалът, онази празнина във формите и документите там, където се очаква някой да впише нещо, за да внесе смисъл в безсмислието на празното пространство.

Но интервалите не са само безсмислени празнини. Те са също така жизнено необходими за нас хората, за да се спрем за миг и да си поемем глътка въздух между думите, между изреченията, между дните и годините на книгата, която наричаме наш живот. Без интервали думите се сливат, стават трудни за разделяне, появяват се дори двусмислия в интерпретацията им и от това комуникацията започва да страда, а страда ли комуникацията, страдаме и ние, които се опитваме да я осъществяваме. Защото какво сме ние, освен мравчици в огромен мравуняк — слаби в самотата си, но силни в единството, постигано чрез комуникацията.

Затова нека новата година от моето летоброене бъде годината на така необходимата глътка въздух, на почивка от лутането в търсене на смисъла, целта, пътя и щастието, на по-малко говорене и повече слушане, на дълбока интроспекция и размисъл, на преосмисляне на миналото и осъзнаване на настоящето. Годината, в която да бъда единствено себе си и за себе си. Просто годината на нищо повече и на нищо по-малко от един обикновен интервал — интервал във времето и интервал в пространството.

Годината на моя интервал.