«Прасцей адказаць, чым працягваць маўчаць» - вялікае інтэрв'ю з бацькам транзакцыйнай памяці, Морысам Херліхі

Морыс Херліхі - уладальнік цэлых двух прэмій Дэйкстры. Першая - за працу па "Wait-Free Synchronization" (Brown University) і другая, больш свежая, - "Transactional Memory: Architectural Support for Lock-Free Data Structures" (Virginia Tech University). Прэмію Дэйкстры даюць за працы, значнасць і ўплыў якіх былі прыкметныя на працягу не менш за дзесяць гадоў і, відавочна, Морыс - адзін з самых вядомых спецыялістаў у вобласці. На дадзены момант ён працуе прафесарам у Браунаўскім універсітэце і мае мноства дасягненняў на цэлы абзац даўжынёй. Цяпер ён займаецца даследаваннямі блокчейна ў кантэксце класічных размеркаваных вылічэнняў.

Раней Морыс ужо прыязджаў у Расію на SPTCC (відэазапіс) і зрабіў выдатную сустрэчу супольнасці Java-распрацоўнікаў JUG.ru у Піцеры (відэазапіс).

Гэты хабрапост – вялікае інтэрв'ю з Морысам Херліхі. У ім абмяркоўваюцца наступныя тэмы:

  • Узаемадзеянне акадэмічнай сферы і індустрыі;
  • Падмурак для даследаванняў блокчэйна;
  • Адкуль бяруцца прарыўныя ідэі. Уплыў папулярнасці;
  • PhD пад кіраўніцтвам Барбары Ліскаў;
  • Свет у чаканні шмат'ядравасці;
  • Новаму свету - новыя праблемы. NVM, NUMA і ўзлом архітэктуры;
  • Кампілятары супраць працэсараў, RISC vs CISC, shared memory vs message passing;
  • Мастацтва напісання далікатнага шматструменнага кода;
  • Як навучыць студэнтаў напісанню складанага шматструменнага кода;
  • Новае выданне кнігі "The Art of Multiprocessor Programming";
  • Як вынаходзілася транзакцыйная памяць;   
  • Чаму варта праводзіць даследаванні ў галіне размеркаваных вылічэнняў;
  • Ці спынілася развіццё алгарытмаў, і як жыць далей;
  • Праца ў Браунаўскім Універсітэце;
  • Розніца паміж даследаваннямі ва ўніверсітэце і ўнутры карпарацыі;
  • Hydra і SPTDC.

Інтэрв'ю вядуць:

Віталь Аксёнаў - На дадзены момант, пост-док у IST Austria і супрацоўнік кафедры «Кампутарныя Тэхналогіі» Універсітэта ІЦМА. Займаецца даследаваннямі ў галіне тэорыі і практыкі канкурэнтных структур даных. Да працы ў IST, ён атрымаў PhD ва Універсітэце Парыж Дзідро і ва Універсітэце ІЦМА пад кіраўніцтвам прафесара Пятра Кузняцова.

Аляксей Фёдараў - прадзюсар у JUG Ru Group, расійскай кампаніі, якая займаецца арганізацыяй канферэнцый для распрацоўшчыкаў. Аляксей удзельнічаў у падрыхтоўцы больш за 50 канферэнцый, а ў яго рэзюмэ ёсць усё што заўгодна, пачынальна ад пазіцыі інжынера-распрацоўніка ў Oracle (JCK, Java Platform Group), і сканчаючы пазіцыяй дзеўрэла ў кампаніі Аднакласнікі.

Уладзімір Сітнікаў - Інжынер у кампаніі Netcracker. Дзесяць гадоў працуе над прадукцыйнасцю і маштабаванасцю NetCracker OS – ПЗ, выкарыстоўванага аператарамі сувязі для аўтаматызацыі працэсаў кіравання сеткай і сеткавым абсталяваннем. Захапляецца пытаннямі прадукцыйнасці Java і Oracle Database. Аўтар больш за дзесятак паляпшэнняў прадукцыйнасці ў афіцыйным PostgreSQL JDBC-драйверы.

Узаемадзеянне акадэмічнай сферы і індустрыі

Аляксей: Морыс, вы вельмі доўга працавалі ў акадэмічным асяроддзі і першае пытанне заключаецца ва ўзаемадзеянні паміж акадэмічнай і індустрыяльнай сферамі. Не маглі б вы расказаць, як змяніліся ўзаемадзеяння паміж імі за апошні час? Што было 20-30 гадоў таму і што адбываецца зараз? 

Морыс: Я заўжды стараўся цесна супрацоўнічаць з камерцыйнымі кампаніямі, бо ў іх ёсць цікавыя задачы. Яны, як правіла, не вельмі зацікаўлены ні ў публікацыі атрыманых вынікаў, ні ў падрабязных тлумачэннях сваіх праблем сусветнай грамадскасці. Яны толькі зацікаўлены ў вырашэнні гэтых праблем. Я некаторы час працаваў у такіх кампаніях. Я правёў пяць гадоў, працуючы поўны працоўны дзень у даследчай лабараторыі ў Digital Equipment Corporation, якая раней была буйной кампутарнай кампаніяй. Я працаваў адзін дзень у тыдзень у Sun, у Microsoft, у Oracle, крыху працаваў у Facebook. Цяпер я збіраюся адправіцца ў творчы водпуск (sabbatical leave, прафесару ў амерыканскім універсітэце дазваляецца дзесьці раз у шэсць гадоў браць такі водпуск на год) і папрацаваць у Альгоранд, гэта такая криптовалютная кампанія ў Бостане. Працаваць у цеснай сувязі з кампаніямі заўсёды было прыемна, таму што менавіта так вы даведаецеся аб новых і цікавых рэчах. Вы можаце быць увогуле першым ці другім чалавекам, які апублікаваў артыкул на выбраную тэму, замест таго, каб займацца паступовым паляпшэннем рашэнняў задач, над якімі і так працуюць усе астатнія.

Аляксей: Можаце больш падрабязна расказаць, як гэта адбываецца?

Морыс: Вядома. Ведаеце, калі я працаваў у карпарацыі Digital Equipment Corporation, я і Эліёт Мос, мы вынайшлі транзакцыйную памяць. Гэта быў вельмі плённы перыяд, калі ўсе пачалі цікавіцца інфармацыйнымі тэхналогіямі. Паралелізмам у тым ліку, хоць шмат'ядравыя сістэмы яшчэ не існавалі. У часы Sun і Oracle я шмат працаваў над раўналежнымі структурамі дадзеных. У Facebook я займаўся іх блокчэйн-праектам, пра які я не магу казаць, але спадзяюся, ён хутка стане публічным. У наступным годзе, у Algorand, я буду працаваць у даследчай групе, вывучаючы смарт-кантракты.

Аляксей: У апошнія некалькі гадоў блокчэйн стаў вельмі папулярнай тэмай. Ці дапаможа гэта вашым даследаванням? Магчыма, аблегчыць атрыманне грантаў або дасць доступ да рэсурсаў кампаній, якія працуюць у індустрыі?

Морыс: Я ўжо атрымаў невялікі грант ад Ethereum Foundation. Папулярнасць блокчейна вельмі карысная для таго, каб натхняць студэнтаў на працу ў гэтай галіне. Яны вельмі цікавяцца гэтым і радыя прыняць удзел, але часам не разумеюць, што даследаванні, павабна якія гучаць звонку, апыняецца, уключаюць сапраўды цяжкую працу. Тым не менш, я вельмі рады выкарыстоўваць усю гэтую містыку вакол блокчейна, гэта дапамагае прыцягваць студэнтаў. 

Але гэта яшчэ не ўсё. Я знаходжуся ў кансультатыўнай радзе некалькіх блокчейн-стартапаў. Некаторыя з іх могуць атрымаць поспех, некаторыя з іх, магчыма, не, але заўсёды вельмі цікава бачыць іх ідэі, вывучаць іх і кансультаваць людзей. Самае захапляльнае - калі вы папярэджваеце людзей не рабіць нешта. Многае спачатку здаецца добрай ідэяй, але ці так гэта на самой справе?

Падмурак для даследаванняў блокчэйна

Віталь: Нехта думае, што за блокчэйнам і яго алгарытмамі будучыня. А іншыя людзі кажуць, што гэта проста чарговая бурбалка. Можаце падзяліцца сваім меркаваннем на гэты конт?

Морыс: Шмат з таго, што адбываецца ў свеце блокчэйнаў працуе няправільна, нешта проста махлярства, шмат што пераацэнена. Тым не менш, я думаю, што для гэтых даследаванняў ёсць самавітая навуковая база. Той факт, што свет блокчэйнаў поўны ідэалагічных рознагалоссяў, паказвае ўзровень хвалявання і адданасці справе. З іншага боку, гэта не асабліва выгадна для навуковых даследванняў. Цяпер, калі вы публікуеце артыкул у якім гаворыцца пра недахопы канкрэтнага алгарытму, атрыманая рэакцыя не заўсёды з'яўляецца ў поўнай меры навуковай. Часцяком людзі выплюхваюць свае эмоцыі. Думаю, што падобны ажыятаж у гэтай галіне сяму-таму можа здацца прывабным, але ў рэшце рэшт, тут ёсць і рэальныя навуковыя і інжынерныя пытанні, якімі толькі трэба заняцца. Тут шмат Computer Science.

Віталь: Гэта значыць, вы спрабуеце закласці падмурак для даследаванняў блокчейна, праўда?

Морыс: Я спрабую закласці падмурак для цвёрдай, навукова і матэматычна абгрунтаванай дысцыпліны. І збольшага праблема ў тым, што даводзіцца часам супярэчыць некаторым залішне рэзкім пазіцыям іншых людзей, ігнараваць іх. Часам людзі пытаюцца, чаму я працую ў вобласці, у якой зацікаўлены толькі тэрарысты і наркагандляры. Такая рэакцыя гэтак жа бессэнсоўная, як і паводзіны паслядоўнікаў, якія слепа паўтараюць твае словы. Думаю, што ісціна недзе пасярэдзіне. Блокчэйн яшчэ акажа глыбокі ўплыў на грамадства і сусветную эканоміку. Але, верагодна, гэта адбудзецца не дзякуючы сучасным тэхналогіям. Сучасныя тэхналогіі будуць развівацца і тое, што ў будучыні будзе называцца блокчэйнам, стане вельмі важным. Можа быць, яно нават не будзе выглядаць як сучасныя блокчейны, гэта адкрытае пытанне.

Калі людзі будуць вынаходзіць новыя тэхналогіі, яны будуць працягваць называць гэта блокчейном. Я маю ў выглядзе, сапраўды гэтак жа, як сённяшні Fortran не мае ніякага стаўлення да мовы Fortran з 1960-х гадоў, але ўсё працягваюць зваць гэта Fortran. Тое ж самае для UNIX. Тое, што называецца «блокчэйн», яшчэ зробіць сваю рэвалюцыю. Але я сумняваюся, што гэты новы блокчэйн стане падобны да таго, што ўсім так падабаецца выкарыстоўваць сёння.

Адкуль бяруцца прарыўныя ідэі. Уплыў папулярнасці

Аляксей: Ці прывяла папулярнасць блокчэйна да новых вынікаў з навуковага пункту гледжання? Больш узаемадзеяння, больш студэнтаў, больш кампаній у вобласці. Ці ёсць ужо нейкія вынікі гэтага росту папулярнасці?

Морыс: Я зацікавіўся гэтым, калі нехта ўручыў мне афіцыйную ўлётку кампаніі, якая толькі што сабрала даволі шмат грошай. У ёй пісалі аб задачы візантыйскіх генералаў, З якой я больш чым знаёмы. Напісанае ва ўлётцы было відавочна тэхнічна няправільна. Людзі, якія ўсё гэта напісалі, не вельмі разумелі ляжалую за праблемай мадэль… і ўсё ж гэтая кампанія сабрала шмат грошай. Пасля кампанія неўзаметку падмяніла гэтую ўлётку куды больш правільным варыянтам - і я не скажу, як звалася гэтая кампанія. Яны ўсё яшчэ існуюць і справы ў іх ідуць вельмі добрае. Гэты выпадак пераканаў мяне, што, па-першае, блокчэйн - гэта проста форма размеркаваных вылічэнняў. Па-другое, парог уваходу (па меншай тады, гады чатыры таму) быў даволі нізкім. Людзі, якія працуюць у гэтай галіне, былі вельмі энергічныя і разумныя, але навуковых прац не чыталі. Яны спрабавалі вынайсці вядомыя рэчы і зрабілі гэта няправільна. Сёння драма паменшылася.

Аляксей: Гэта вельмі цікава, бо некалькі гадоў таму ў нас была іншая тэндэнцыя. Гэта крыху падобна на фронтэнд-распрацоўку, калі распрацоўшчыкі браузерных інтэрфейсаў перанаходзілі цэлыя тэхналогіі, якія да таго часу ўжо былі папулярныя ў бэкендзе: сістэмы зборкі, бесперапынную інтэграцыю і ўсё ў такім духу. 

Морыс: Згодзен. Але гэта нядзіўна, бо па-сапраўднаму прарыўныя ідэі заўсёды прыходзяць супольнасці, якая склалася звонку. Прызнаныя даследнікі, асабліва аўтарытэты ў акадэмічным асяроддзі, ці наўрад зробяць нешта сапраўды прарыўное. Лёгка напісаць для наступнай канферэнцыі даклад пра тое, як вы крыху палепшылі вынікі сваіх мінулых прац. Схадзіце на канферэнцыю, збярыцеся з сябрамі, пагаварыце аб усім тым жа самым. А людзі, якія ўрываюцца з прарыўнымі ідэямі, амаль заўсёды прыходзяць звонку. Яны не ведаюць правіл, не ведаюць мовы, але тым не менш… Калі ж вы ўнутры супольнасці, якая склалася, раю звяртаць увагу на новыя рэчы, на нешта, што не ўкладваецца ў агульную карціну. У некаторым сэнсе, можна зрабіць спробу аб'яднаць вонкавыя, больш рухомыя распрацоўкі з метадамі, якія мы ўжо разумеем. У якасці першага кроку, паспрабуйце стварыць навуковую базу, а потым зменіце яе так, каб яе можна было прымяняць да новых прарыўных ідэй. Думаю, што блокчейн выдатна падыходзіць на ролю свежай прарыўной ідэі.

Аляксей: Як думаеце, чаму так адбываецца? Таму што ў людзей "звонку" няма нейкіх спецыфічных бар'ераў, уласцівых супольнасці?

Морыс: Тут прасочваецца нейкая схема. Калі шануеце гісторыю імпрэсіяністаў у жывапісе і мастацтве наогул, то ў свой час вядомыя мастакі адпрэчвалі імпрэсіянізм. Яны казалі, што гэта нейкае дзяцінства. Пакаленне праз, гэты раней адрынуты від мастацтва стаў стандартам. Што я бачу ў сваёй вобласці: вынаходнікі блокчейна не былі зацікаўлены ва ўладзе, у накручванні публікацый і азначніка цытаванасці, яны проста жадалі зрабіць нешта добрае. І вось, яны селі і пачалі гэта рабіць. Ім не хапала вызначанай тэхнічнай глыбіні, але гэта папраўна. Куды больш складана прыдумаць новыя творчыя ідэі, чым выпраўляць і ўзмацняць недастаткова сталыя. Дзякуючы гэтым вынаходнікам мне зараз ёсць чым заняцца!

Аляксей: Гэта падобна на адрозненне паміж стартапамі і легасі-праектамі. У спадчыну нам пераходзіць мноства абмежаванняў мыслення, бар'ераў, спецыяльных патрабаванняў, і гэтак далей.

Морыс: Добрая аналогія - размеркаваныя вылічэнні. Падумайце аб блокчейне як калі б ён быў стартапам, а размеркаваныя вылічэнні - буйной устоянай кампаніяй. Размеркаваныя вылічэнні знаходзяцца ў працэсе пакупкі і зліцця з блокчейном.

PhD пад кіраўніцтвам Барбары Ліскаў

Віталь: У нас яшчэ шмат пытанняў! Мы вывучалі вашу біяграфію і натыкнуліся на цікаўны факт аб вашай доктарскай ступені. Так, гэта было даўным-даўно, але тэма, здаецца, важная. Вы атрымалі PhD пад кіраўніцтвам самой Барбары Ліскаў! Барбара вельмі вядомая ў супольнасці распрацоўшчыкаў моў праграмавання, і ўвогуле вельмі вядомая асоба. Лагічна, што вашыя даследаванні былі ў галіне моў праграмавання. Як жа вы перайшлі на паралельныя вылічэнні? Чаму вы вырашылі змяніць тэму?

Морыс: У той час Барбара і яе гурт якраз пазіралі на размеркаваныя вылічэнні, гэта было вельмі новай ідэяй. Былі і тыя, хто казаў, што размеркаваныя вылічэнні - глупства, зносіны кампутараў паміж сабой бессэнсоўна. Адно з пытанняў, якія разглядаюцца ў размеркаваных вылічэннях, які адрознівае іх ад цэнтралізаваных вылічэнняў, - адмоваўстойлівасць. Пасля працяглых даследаванняў мы вырашылі, што ў мове праграмавання для размеркаваных вылічэнняў трэба мець нешта накшталт атамарных транзакцый, бо ніколі нельга быць упэўненым у паспяховасці выдаленага выкліку. Як толькі ў вас з'явіліся транзакцыі, узнікае праблема кіравання паралелізмам. Потым было шмат працы па атрыманні высокапаралельных транзакцыйных структур звестак. Затым, калі я атрымаў вышэйшую адукацыю, я пайшоў у Карнегі-Меллон і пачаў шукаць тэму для працы. Мне прыйшло ў галаву, што вылічэнні перайшлі ад асобных кампутараў да сетак кампутараў. Натуральным працягам прагрэсу сталі б мультыпрацэсары - слова "шмат'ядравы" тады яшчэ не існавала. Я падумаў: які эквівалент атамарным транзакцыям для шмат'ядравай сістэмы? Дакладна не звычайныя транзакцыі, таму што яны занадта вялікія і цяжкія. І вось так я прыйшоў да ідэі лінеарызуемасці і менавіта так я прыдумаў усю wait-free сінхранізацыю. Гэта была спроба адказаць на пытанне, што ж з'яўляецца аналагам атамарных транзакцый для шматпрацэсарнай сістэмы з агульнай памяццю. На першы погляд, гэтая праца можа выглядаць зусім па-іншаму, але насамрэч гэта працяг усё той жа тэмы.

Свет у чаканні шмат'ядравасці

Віталь: Вы згадалі, што ў той час было зусім няшмат шмат'ядравых кампутараў, так?

Морыс: Іх проста не было. Было некалькі так званых сіметрычных мультыпрацэсараў, якія ў асноўным былі падключаны да адной і той жа шыны. Гэта не вельмі добрае працавала, таму што кожны раз, калі новая кампанія стварала нешта падобнае, Intel выпускала адзін-адзіны працэсар, які пераўзыходзіў мультыпрацэсар.

Аляксей: Ці не значыць гэта, што ў тыя даўнія часы, гэта было хутчэй за тэарэтычнае даследаванне?

Морыс: Гэта было не тэарэтычнае, а хутчэй абстрактнае даследаванне. Усё гэта было не пра працу з мноствам тэарэм, хутчэй, мы высоўвалі гіпотэзы аб неіснуючай на той момант архітэктуры. Менавіта для гэтага і патрэбны даследаванні! Ні адна кампанія не прарабіла б падобнага, усё гэта было чымсьці з далёкай будучыні. Насамрэч, так было да 2004 года, калі з'явіліся рэальныя шмат'ядравыя працэсары. З-за таго, што працэсары пераграваюцца, можна зрабіць працэсар яшчэ меншым, але нельга зрабіць хутчэй. З-за гэтага адбыўся пераход на шмат'ядравыя архітэктуры. І тады гэта азначала, што раптоўна з'явілася ўжыванне для ўсіх канцэпцый, якія мы распрацавалі ў мінулым.

Аляксей: Як вы думаеце, чаму шмат'ядравыя працэсары з'явіліся толькі ў двухтысячных? Дык чаму так позна?

Морыс: Гэта звязана з апаратнымі абмежаваннямі. Intel, AMD і іншыя кампаніі вельмі добрыя ў павышэнні хуткасці працэсара. Калі ў нейкі момант працэсары сталі дастаткова маленькімі і яны больш не маглі павялічваць тактавую частату, таму што працэсары пачалі б згараць. Можна зрабіць іх менш, але ніяк не хутчэй. Што ў іх сілах - замест вельмі маленькага працэсара, змясціць восем, шаснаццаць ці трыццаць два працэсара ў той жа аб'ём корпуса, дзе раней змяшчаўся толькі адзін. Цяпер у вас шматструменнасць і хуткая камунікацыя паміж імі, таму што яны сумесна выкарыстоўваюць кэшы. Але вы не можаце прымусіць іх працаваць хутчэй - ёсць цалкам канкрэтнае абмежаванне хуткасці. Іх працягваюць патроху паляпшаць, але ўжо не настолькі моцна. На шляху паляпшэнняў усталі законы фізікі.

Новаму свету - новыя праблемы. NUMA, NVM і ўзлом архітэктуры

Аляксей: Гучыць вельмі разумна. З новымі шмат'ядравымі працэсарамі дашлі новыя праблемы. Ці чакалі вы і вашыя калегі гэтых праблем? Магчыма, вы вывучалі іх загадзя? У тэарэтычных даследаваннях часта не вельмі лёгка прадказваць такія рэчы. Калі праблемы ўсё ж здарыліся - наколькі яны адпавядалі вашым чаканням і чаканням вашых калегаў? Ці ж яны былі зусім новымі, і вы з калегамі павінны былі марнаваць шмат часу на вырашэнне праблем па меры іх з'яўлення?

Віталь: Дадам да пытання Аляксея: ці правільна вы спрагназавалі архітэктуру працэсараў, пакуль займаліся тэорыяй?

Морыс: Не ўсе 100%. Але я думаю, што мы з калегамі добра папрацавалі, прагназуючы шмат'ядравасць з агульнай памяццю. Думаю, мы правільна прадказалі складанасці ў распрацоўцы паралельных структуры дадзеных, якія працуюць без блакіровак. Такія структуры дадзеных былі важныя для шматлікіх прыкладанняў, хоць і не для ўсіх, але часцяком вам сапраўды патрэбна структура дадзеных без блакавання. Калі мы вынаходзілі іх, многія сцвярджалі, што гэта глупства, што і з блакіроўкамі ўсё выдатна працуе. Мы дастаткова добра прадбачылі, што з'явяцца гатовыя рашэнні для шматлікіх праблем праграмавання і праблем структур дадзеных. Існавалі і больш складаныя праблемы, такія як НУМА - нераўнамерны доступ да памяці. Насамрэч, яны нават не разглядаліся да вынаходства шмат'ядравых працэсараў, паколькі былі занадта спецыфічныя. Даследчая супольнасць працавала над пытаннямі, якія былі ў цэлым прадказальныя. Некаторым апаратным праблемам, злучаным з пэўнымі архітэктурамі, прыйшлося пачакаць сваёй гадзіны – уласна, з'яўленні гэтых архітэктур. Напрыклад, ніхто асоба не працаваў над структурамі дадзеных, спецыфічнымі для GPU, таму што GPU тады не існавала. Нягледзячы на ​​тое, вялікая праца была праведзена над SIMD, гэтыя алгарытмы былі гатовыя да ўжывання адразу ж, як з'явілася прыдатнае жалеза. Тым не менш, прадбачыць усё немагчыма.

Аляксей: Калі я правільна разумею, NUMA з'яўляецца свайго роду кампрамісам паміж коштам, прадукцыйнасцю і некаторымі іншымі рэчамі. Ёсць ідэі, чаму NUMA з'явілася так позна?

Морыс: Думаю, што NUMA існуе дзякуючы праблемам з жалезам, якія выкарыстоўваюцца для вытворчасці памяці: чым далей знаходзяцца кампаненты, тым павольней да іх доступ. З іншага боку, другая каштоўнасць гэтай абстракцыі - раўнамернасць памяці. Таму адной з характарыстык паралельных вылічэнняў з'яўляецца тое, што ўсе абстракцыі крыху зламаныя. Калі б доступ быў ідэальна раўнамерным, уся памяць была б роўнааддаленай, але гэта эканамічна, а можа нават і фізічна немагчыма. Таму ўзнікае гэты канфлікт. Калі вы пішаце сваю праграму так, як калі б памяць была раўнамернай, то хутчэй за ўсё, яна будзе карэктнай. У тым сэнсе, што яна ня будзе выдаваць няправільных адказаў. Але і прадукцыйнасць у яе зорак з неба не схопіць. Гэтак жа, калі вы пішаце спінлакі без разумення іерархіі кэшаў, сама вось блакіроўка будзе карэктнай, але аб прадукцыйнасці можна забыцца. У нейкім сэнсе, вы павінны пісаць праграмы, якія жывуць па-над вельмі простай абстракцыяй, але вы павінны перахітрыць людзей, якія гэтую абстракцыю вам падалі: вы абавязаны ведаць, што пад абстракцыяй ляжыць нейкая іерархія памяці, што ёсць шына паміж вамі і гэтай памяццю, і гэтак далей. Такім чынам, існуе нейкі канфлікт паміж карыснымі паасобку абстракцыямі, што прыводзіць нас да вельмі канкрэтных і прагматычных праблем.

Віталь: Што наконт будучыні? Ці можна вы прадказаць, як працэсары будуць развівацца далей? Ёсць ідэя, што адным з адказаў з'яўляецца транзакцыйная памяць. Верагодна, у вас ёсць нешта яшчэ ў запасе.

Морыс: Наперадзе ёсць пара асноўных праблем. Адна з іх заключаецца ў тым, што кагерэнтная памяць - выдатная абстракцыя, але яна пачынае ламацца ў спецыяльных выпадках. Так, напрыклад, NUMA з'яўляецца жывым прыкладам чагосьці, дзе можна працягваць прыкідвацца, што існуе раўнамерная памяць. На самай справе - не, прадукцыйнасць прымусіць вас заплакаць. У нейкі момант архітэктарам давядзецца адмовіцца ад ідэі аб адзінай архітэктуры памяці, нельга прыкідвацца вечна. Спатрэбяцца новыя мадэлі праграмавання, дастаткова простыя ў выкарыстанні і дастаткова магутныя, каб ніжэйлеглае абсталяванне было эфектыўным. Гэта вельмі складаны кампраміс, бо калі вы пакажаце праграмістам тую архітэктуру, якая насамрэч выкарыстоўваецца ў жалезе, яны звар'яцеюць. Гэта занадта складана і не пераносна. Калі ж вы ўявіце занадта просты інтэрфейс, то прадукцыйнасць будзе дрэннай. Такім чынам, запатрабуецца дасягнуць мноства вельмі няпростых кампрамісаў, неабходных для забеспячэння карысных мадэляў праграмавання, дастасавальных да сапраўды вялікім шмат'ядравым працэсарам. Я не ўпэўнены, што нехта акрамя вузкага спецыяліста здольны праграмаваць на 2000-ядзерным кампутары. І калі вы не робіце вельмі спецыялізаваныя або навуковыя вылічэнні, крыптаграфію ці нешта такое - усё яшчэ зусім не ясна, як гэта правільна рабіць. 

Іншым падобным напрамкам з'яўляюцца спецыялізаваныя архітэктуры. Графічныя паскаральнікі існуюць ужо даўно, але ўжо сталі свайго роду класічным прыкладам таго, як можна ўзяць спецыялізаваны тып вылічэнняў і запусціць іх на выдзеленым чыпе. Гэта дадае свае ўласныя праблемы: як вы маеце зносіны з такой прыладай, як вы яго праграмуеце. Я нядаўна працаваў над задачамі ў вобласці near memory computing. Вы бераце невялікі працэсар і прыляпляеце яго да велізарнага кавалка памяці, так што памяць працуе на хуткасці L1-кэша, а затым адбываецца сувязь з прыладай накшталт ТПУ - працэсар займаецца загрузкай новых задач у ваша ядро ​​памяці. Распрацоўка структур дадзеных і пратаколаў сувязі для такога роду рэчаў - яшчэ адзін цікавы прыклад. Такім чынам, спецыялізаваныя працэсары і апаратнае забеспячэнне будуць падвяргацца паляпшэнням на працягу дастаткова доўгага часу.

Аляксей: Што наконт энерганезалежнай памяці (энерганезалежная памяць)?

Морыс: О, гэта яшчэ адзін выдатны прыклад! NVM вельмі моцна зменіць наш погляд на такія рэчы, як, напрыклад, структуры дадзеных. Энерганезалежная памяць, у некаторым сэнсе, абяцае сапраўды ўсё паскорыць. Але яна не зробіць жыццё прасцейшым, таму што большасць працэсараў, кэшы і рэгістры ўсё яшчэ энергазалежныя. Калі вы пачынаеце працу пасля збою, ваш стан і стан вашай памяці не будзе ў дакладнасці тымі ж, што былі да збою. Я вельмі ўдзячны людзям, якія займаюцца NVM - доўгі час даследчыкам будзе чым заняцца, спрабуючы высветліць умовы карэктнасці. Вылічэнні карэктныя, калі яны могуць перажыць збой, у якім згубілася змесціва кэшаў і рэгістраў, але асноўная памяць засталася нязменнай.

Кампілятары супраць працэсараў, RISC vs CISC, shared memory vs message passing

Уладзімір: Што вы думаеце аб дылеме "кампілятары супраць працэсараў" з пункту гледжання набору каманд? Растлумачу для тых, хто не ў тэме: калі мы пяройдзем да нераўнамернай памяці або нечаму падобнаму, мы маглі б прымяніць вельмі просты набор каманд і папрасіць кампілятар згенераваць складаны код, здольны выкарыстоўваць якія адкрыліся перавагі. Ці мы можам пайсці іншым шляхам: рэалізаваць складаныя інструкцыі і папрасіць працэсар пераўпарадкаваць інструкцыі і праводзіць з імі іншыя маніпуляцыі. Што вы думаеце пра гэта?

Морыс: У мяне сапраўды няма адказу на гэтае пытанне. Гэтая дыскусія працягваецца на працягу чатырох дзесяцігоддзяў. Быў час, калі паміж скарочаным наборам каманд і складаным наборам каманд вяліся грамадзянскія войны. Нейкі час выйгравалі RISC-авыя людзі, але потым Intel перабудавалі свае рухавічкі так, каб усярэдзіне выкарыстоўваўся скарочаны набор інструкцый, а вонкі экспартаваўся поўны. Мусіць, гэта тая тэма, у якой кожнае новае пакаленне павінна знайсці ўласныя кампрамісы і прыняць уласныя рашэнні. Вельмі цяжка прадказаць, якая з гэтых рэчаў акажацца лепшай. Таму любое прадказанне, якое я зраблю, будзе слушным на працягу пэўнага часу, а потым нейкі час зноў стане ілжывым, а затым зноў дакладным.

Аляксей: Наколькі ўвогуле для галіны звычайнай з'яўляецца такая сітуацыя, што некаторыя ідэі выйграюць на працягу некалькіх дзесяцігоддзяў і прайграюць у наступных? Ці ёсць іншыя прыклады такіх перыядычных перамен?

Морыс: У тэме размеркаваных вылічэнняў ёсць людзі, якія вераць у падзяляемую памяць і людзі, якія вераць у абмен паведамленнямі. Першапачаткова ў размеркаваных вылічэннях паралельныя вылічэнні азначаюць перадачу паведамленняў. Потым хтосьці выявіў, што з падзяляемай памяццю праграмаваць куды прасцей. Процілеглы бок заявіў, што падзяляемая памяць - штука занадта складаная, таму што там патрэбныя блакіроўкі і таму падобнае, таму варта перайсці на мовы, дзе нічога акрамя перадачы паведамленняў проста не існуе. Хтосьці паглядзеў, што з гэтага выйшла і кажа: «ого, гэтая рэалізацыя абмену паведамленнямі выглядаюць вельмі падобна на падзяляную памяць, таму што вы ствараеце шматліка-шмат гэтых маленькіх модуляў, яны адпраўляюць паведамленні адзін аднаму, і ўсе яны ўзаемаблакуюцца, – давайце лепш зробім базу дадзеных з падзялянай памяццю!». Усё гэта паўтараецца зноў і зноў, і немагчыма сказаць, што адзін з бакоў адназначна мае рацыю. Адзін з бакоў заўсёды будзе дамінаваць, таму што, як толькі адзін з іх амаль перамагае, людзі зноў і зноў вынаходзяць спосабы палепшыць супрацьлеглы.

Мастацтва напісання далікатнага шматструменнага кода

Аляксей: Гэта вельмі цікава. Напрыклад, калі мы пішам код, усё роўна на якой мове праграмавання, звычайна даводзіцца ствараць абстракцыі накшталт вочак, якія можна чытаць і пісаць. Але насамрэч, на нейкім фізічным узроўні гэта можа выглядаць як адпраўка паведамлення па апаратнай шыне паміж рознымі кампутарамі і іншымі прыладамі. Атрымліваецца, адбываецца праца адразу на абодвух узроўнях абстракцыі.

Морыс: Абсалютна дакладна, што падзяляемая памяць пабудавана на перадачы паведамленняў - шыны, кэшы і гэтак далей. Але з выкарыстаннем перадачы паведамленняў цяжка пісаць праграмы, таму жалеза наўмысна хлусіць, прыкідваючыся, што ў вас ёсць нейкая раўнамерная памяць. Дык вам будзе прасцей пісаць простыя карэктныя праграмы, пакуль прадукцыйнасць не пачне падаць. Тады вы скажаце: падобна, надышоў час пасябраваць з кэшам. І вось тады вы пачынаеце турбавацца аб месцазнаходжанні кэша, і далей пайшло-паехала. У некаторым сэнсе вы ўзломваеце абстракцыю: вы ведаеце, гэта не проста плоская раўнамерная памяць і збіраецеся скарыстацца гэтымі ведамі для напісання праграм, дружалюбных да кэша. Гэта тое, што давядзецца рабіць у рэальных задачах. Гэты канфлікт паміж мілай простай прыемнай абстракцыяй, якую вам выдалі, і жахліва складанай рэалізацыяй ніжэйлеглага жалеза - гэта тое, дзе кожны пойдзе на ўласны кампраміс. У мяне ёсць кніга пра мультыпрацэсары і сінхранізацыі, і ў адзін цудоўны момант я збіраўся напісаць главу аб структурах дадзеных у java.util.concurrent. Калі вы паглядзіце на іх, на рэчы накшталт спісаў з пропускамі – гэта дзівосныя творы мастацтва. (Заўвага рэдакцыі: тым, хто знаёмы з мовай Java, варта хоць раз зірнуць на рэалізацыю ConcurrentSkipListMap, па спасылках можна паглядзець на API и выходны код). Але з майго пункту гледжання, было б безадказна паказваць іх студэнтам, бо такая структура дадзеных свайго роду хлопец у цырку, які бег па канаце над мядзведжай ямай. Калі вы зменіце хоць адну маленькую дэталь, абрынецца ўся канструкцыя. Гэты код вельмі хуткі і элегантны толькі таму, што ён ідэальна напісаны, але найменшая змена прывядзе да поўнага правалу. Калі я пастаўлю гэты код у прыклад студэнтам, яны адразу скажуць: я таксама магу рабіць так! І тады які-небудзь самалёт упадзе ці ядзерны рэактар ​​выбухне, і я буду вінаваты ў тым, што не ў час даў ім занадта шмат інфармацыі.

Аляксей: Калі я быў крыху маладзейшы, то шмат разоў я спрабаваў вывучаць зыходны код Дага Лі, напрыклад, java.util.concurrent, Бо гэта адкрыты зыходны код, яго вельмі лёгка знайсці і паспрабаваць зразумець, што тамака адбываецца. Выходзіла не вельмі: часцяком, зусім незразумела, чаму Даг вырашыў нешта зрабіць менавіта такім чынам, калі ўсе астатнія робяць па-іншаму. Як вы тлумачыце сваім студэнтам такія рэчы? Ці асаблівы правільны спосаб апісваць канкрэтныя дэталі хардкорнага алгарытму, напрыклад? Як вам гэта ўдаецца?

Морыс: У выкладчыкаў малюнка ёсць клішэ, якое яны ўспамінаюць перш за ўсё: калі вы хочаце маляваць, як Пікасо, трэба спачатку навучыцца маляваць простыя рэалістычныя карцінкі, і толькі калі вы ведаеце правілы можна пачынаць іх парушаць. Калі адразу пачаць з парушэння правілаў, атрымаецца бязладзіца. Спачатку я вучу студэнтаў як пісаць просты карэктны код, не турбуючыся аб прадукцыйнасці. Я кажу: тут хаваюцца складаныя праблемы сінхранізацыі, таму не турбуйцеся аб кэшах, не турбуйцеся аб мадэлях памяці, проста пераканайцеся, што ўсё правільна працуе. Гэта ўжо дастаткова складана: сучаснае праграмаванне няпроста само па сабе, асабліва для новых студэнтаў. І вось калі ў іх з'яўляецца інтуіцыя аб тым, як пісаць правільныя праграмы, я кажу: паглядзіце на гэтыя дзве рэалізацыі спінлака: адна вельмі павольная, а другая - таксама не вельмі, але ўжо лепей. Тым не менш, матэматычна гэтыя два алгарытму супадаюць. Насамрэч, адзін з іх выкарыстоўвае лакальнасць кэша. Адзін з іх круціцца на лакальна кэшаваных дадзеных, а іншы шматкроць здзяйсняе аперацыі, якія ідуць праз шыну. Нельга напісаць эфектыўны код, калі вы не разумееце яго сутнасці, не ведаеце, як парушыць абстракцыю і паглядзець на ніжэйшую структуру. Але вы не зможаце адразу пачаць так рабіць. Ёсць людзі, якія пачынаюць рабіць так адразу і вераць ва ўласную геніяльнасць, звычайна гэта дрэнна заканчваецца, бо яны не разумеюць прынцыпаў. Ніхто не малюе як Пікасо і не піша праграмы як Даг Лі, толькі што паступіўшы ва ўніверсітэт, у першы ж тыдзень. Патрабуюцца гады, каб дасягнуць такога ўзроўню ведаў.

Аляксей: Атрымліваецца, вы падзяляеце праблему на дзве часткі: першая - карэктнасць, другая - прадукцыйнасць?

Морыс: Менавіта. Прычым менавіта ў такім парадку. Частка праблемы заключаецца ў тым, што новыя студэнты не разумеюць, што дасягнуць карэктнасці складана. Яны з першага погляду гавораць: гэта, відавочна, карэктна, засталося толькі паскорыць. Таму часам я расказваю ім пра першапачаткова некарэктны алгарытм, як калі б ён быў карэктным.

Як навучыць студэнтаў напісанню складанага шматструменнага кода

Аляксей: Каб проста праверыць, ці змогуць яны адчуць падвох?

Морыс: Я заўжды папярэджваю загадзя, што часам буду прапаноўваць няправільныя алгарытмы. Не варта ашукваць людзей. Я прапаную ім скептычна ставіцца да інфармацыі. Калі я нешта расказваю і кажу: "глядзіце, гэта відавочна правільна" — гэта сігнал, што недзе цябе спрабуюць падмануць, і трэба пачаць задаваць пытанні. Далей я стараюся падтрымаць студэнтаў, каб яны не пераставалі задаваць пытанні, і потым падказваю: "што адбудзецца, калі мы пакінем усё як ёсць?". І яны адразу бачаць памылку. Але пераканаць студэнтаў, што ім трэба паклапаціцца аб карэктнасці, куды больш складана, чым здаецца на першы погляд. Многія з гэтых студэнтаў прыходзяць з вопытам праграмавання ў старэйшых класах, нехта паспеў уладкавацца на працу і займаўся праграмаваннем там, і ўсе яны поўныя ўпэўненасці ў сабе. Гэта нешта вайсковае: прыходзіцца спачатку пераламаць іх настрой, каб пераканаць цярпліва падыходзіць да рашэння ўзнікаючых праблем. Ці можа гэта як у будысцкіх манахаў: спачатку яны вучацца разважаць аб карэктнасці і як толькі яны ўсведамляюць спосабы разваг аб карэктнасці, ім дазваляецца перайсці на наступны ўзровень і пачаць турбавацца аб прадукцыйнасці.

Аляксей: То бок, часам вы паказваеце студэнтам непрацоўныя прыклады, дзякуючы чаму атрымліваеце зваротную сувязь, якая паказвае, ці разумеюць яны сутнасць праблемы, ці могуць знайсці няправільны код і няправільны вынік. Ну і як, студэнты звычайна цешаць або засмучаюць?

Морыс: Амаль заўсёды студэнты ў рэшце рэшт знаходзяць памылку. Калі яны шукаюць занадта павольна, я задаю навадныя пытанні, і тут важна зразумець, што калі іх ніколі не падманваць - яны пачнуць бяздумна ўспрымаць твае словы як ісціну ў канчатковай інстанцыі. Потым ім стане сумна і яны пачнуць засыпаць, чытаючы Facebook на наўтбуку прама падчас занятку. Але калі вы загадзя паведамляеце, што іх паспрабуюць падмануць, і яны будуць выглядаць недарэчна, калі не адчуюць падвоху, яны становяцца куды больш пільнымі. Гэта добра ў розных сэнсах. Жадаецца, каб студэнты не толькі ставілі пад сумнеў сваё разуменне пытання, але яшчэ і ставілі пад сумнеў аўтарытэт выкладчыка. Ідэя ў тым, каб студэнт мог у любы час падняць руку і сказаць: думаю, тое, што вы зараз сказалі - няслушна. Гэта важны інструмент навучання. Я не хачу, каб нехта са студэнтаў сядзеў і моўчкі пра сябе думаў: усё гэта здаецца поўным трызненнем, але падняць руку занадта страшна, ды і наогул, ён жа прафесар, значыць усё, што ён кажа - ісціна. Таму, калі загадзя папярэдзіць, што не ўсё расказанае абавязкова з'яўляецца праўдай, у іх з'яўляецца стымул надаваць больш увагі матэрыялу. Я відавочна прагаворваю, што паднімаць руку і задаваць пытанні - гэта нармальна. Ваша пытанне можа прагучаць дурное ці наіўна, але часцяком менавіта так з'яўляюцца самыя добрыя пытанні.

Аляксей: Вельмі цікава. Звычайна ў людзей ёсць свайго роду псіхалагічны бар'ер, які не дазваляе задаваць пытанні прафесару. Асабліва калі ў пакоі шмат людзей, і ўсе баяцца, што абмеркаванне твайго дурнога пытання адбярэ час ва ўсіх гэтых людзей. Ці ёсць якія-небудзь хітрасці, як з гэтым зладзіцца?

Морыс: Я часта спыняюся і задаю класічныя пытанні. Ці будзе правільным нейкае сцвярджэнне, ці як бы яны вырашылі абмяркоўваемую праблему. Гэта ключавое дзеянне, асабліва ў пачатку заняткі, калі людзі саромеюцца сказаць нават трошкі. Вы задаяце пытанне студэнтам і далей нічога не кажыце. Надыходзіць цішыня, усё крыху напружваюцца, напружанне расце, потым раптам хтосьці не вытрымлівае, зрываецца і кажа адказ. Дык вы разгортваеце сітуацыю: працягваць маўчаць становіцца складаней і нязручней, чым адказаць! Гэта стандартны педагагічны трук. Кожны настаўнік у свеце павінен ведаць, як такое зрабіць.

Аляксей: Цяпер у нас ёсць выдатная назва для гэтага інтэрв'ю: "прасцей адказаць, чым працягваць маўчаць".

Віталь: Давайце я яшчэ спытаю. Вы працуеце над тапалагічнымі доказамі. Як вы наогул у гэта ўвязаліся, бо размеркаваныя вылічэнні і тапалогія - наогул розныя рэчы!

Морыс: Там ёсць прыхаваная ўзаемасувязь. Калі я быў студэнтам і вучыўся матэматыцы, я вывучаў чыстую матэматыку. У мяне не было рэальнай цікавасці да кампутараў, пакуль навучанне не падышло да канца, і я выявіў сябе перад надзённай неабходнасцю шукаць працу. Яшчэ студэнтам вывучаў алгебраічную тапалогію. Шмат гадоў праз, працуючы над задачай пад назвай "k-Set Agreement Problem", Для мадэлявання праблемы я выкарыстоўваў графы і, як тады здавалася, знайшоў рашэнне. Трэба было проста сесці і абысці граф. Паспрабаваць знайсці на гэтым графе прыдатны адказ. Але мой алгарытм не спрацаваў: аказалася, што ён вечна будзе бегаць па крузе. На жаль, усё гэта нельга было растлумачыць фармальнай мовай тэорыі графаў - той, якую ведаюць усе спецыялісты ў галіне інфарматыкі. А потым я ўспомніў, што шмат гадоў таму, яшчэ на занятках па тапалогіі мы выкарыстоўвалі паняцце "сімпліцыйны комплекс", Якое з'яўляецца абагульненнем графаў на больш высокія памернасці. Тады я задаўся пытаннем: што будзе, калі перафармуляваць праблему ў тэрмінах сімпліцыйных комплексаў? Гэта стала ключавым момантам. Пры выкарыстанні больш магутнага фармалізму, праблема раптоўна становіцца нашмат прасцей. Людзі доўга змагаліся з ёй, выкарыстоўваючы графы, але так і не змаглі нічога. Ды і цяпер не могуць - правільным адказам аказаўся не алгарытм, а доказ немагчымасці рашэння задачы. Гэта значыць, такі алгарытм проста не існуе. Але кожны доказ немагчымасці заснавана або на сімпліцыйных комплексах, або на рэчах, якія людзі прыкінуліся не лічыць сімпліцыйнымі комплексамі. Ад таго, што ты назваў нешта новым імем, сваёй сутнасці яно не губляе.

Віталь: Атрымліваецца, вам проста павезла?

Морыс: Акрамя ўдачы, гэта яшчэ і гатоўнасць. Маецца на ўвазе, вы не павінны забываць "бескарысныя" рэчы, вывучаныя раней. Чым больш бескарысных рэчаў вы даведаецеся, тым больш ідэй вы зможаце атрымаць, сутыкнуўшыся з новай праблемай. Такі інтуітыўны патэрн-матчынг важны, таму што… Давайце так, гэта ланцужок: спачатку я выявіў, што графы не зусім працуюць ці зусім не працуюць, гэта нагадала нешта з падзеяў васьмігадовай даўніны і студэнцкія гады, калі мы вывучалі ўсе гэтыя сімпліцыйныя комплексы . У сваю чаргу гэта дазволіла знайсці мой стары падручнік па тапалогіі і загрузіць яго назад у галаву. Але калі б не тыя старыя веды, я ніколі б не прасунуўся ў вырашэнні першапачатковай праблемы.

Новае выданне кнігі "The Art of Multiprocessor Programming"

Аляксей: Вы сказалі пару слоў аб сваёй кнізе. Напэўна, гэта не самая страшная таямніца, што вы напісалі самую вядомую ў свеце кнігу па шматструменнасці, "The Art of Multiprocessor Programming". Ёй ужо каля 11 гадоў і з тых часоў выйшаў толькі  revised reprint. Ці будзе другое выданне?

Морыс: Гэта добра, што вы спыталі! Будзе зусім хутка, месяцы праз тры ці каля таго. Ёсць яшчэ два аўтары, мы дадалі нашмат больш матэрыялу, палепшылі раздзел пра fork/join-паралелізм, напісалі раздзел пра MapReduce, дадалі шмат новага і выкінулі непатрэбнае – тое, што ў момант напісання першага выдання было вельмі цікава, а сёння ўжо няма. Атрымалася вельмі сур'ёзна перапрацаваная кніга.

Аляксей: Усё ўжо зроблена, засталося толькі выпусціць?

Морыс: Пару кіраўнікоў усё яшчэ трэба дапрацоўваць. Наш выдавец (думаю, ён нас ужо ненавідзіць) усё яшчэ імкнецца данесці, што нам варта працаваць хутчэй. Мы моцна адсталі ад графіка. Тэарэтычна, мы маглі б зрабіць гэтую кнігу на пару гадоў раней.

Аляксей: Ці ёсць шанцы займець новую версію кнігі перад Калядамі?

Морыс: Гэта і ёсць наша мэта! Але я прадказваў перамогу так шмат разоў, што ніхто мне больш не верыць. Вам, мусіць, таксама не варта асоба мне давяраць у гэтым пытанні.

Аляксей: У любым выпадку, гэта фантастычная навіна. Першае выданне кнігі мне вельмі спадабалася. Можна сказаць, я фанат.

Морыс: Спадзяюся, і новае выданне акажацца годна вашага гарачага энтузіязму, дзякуй!

Як вынаходзілася транзакцыйная памяць

Віталь: Наступнае пытанне пра транзакцыйную памяць. Наколькі я зразумеў, вы - піянер у гэтай галіне, вы вынайшлі яе ў той час, калі ніхто і не задумляўся над такімі рэчамі. Чаму вы вырашылі перайсці ў гэтую вобласць? Чаму транзакцыі падаліся вам важнымі? Ці думалі вы, што калі-небудзь іх увасобяць у жалезе?

Морыс: Я ведаў пра транзакцыі з часоў даследаванняў у аспірантуры.

Віталь: Так, але гэта іншыя транзакцыі!

Морыс: Я працаваў з Эліётам Мосам над неблакіруючай зборкай смецця. Наша праблема была ў тым, што нам хацелася атамарна змяняць некалькі слоў у памяці і тады алгарытмы сталі б вельмі простымі, і прынамсі, некаторыя з іх сталі б больш эфектыўна. Выкарыстоўваючы compare-and-swap для load-link/store-conditional, які прадстаўляецца паралельнай архітэктурай, зрабіць нешта можна, але гэта вельмі неэфектыўна і выродліва, таму што вам прыйшлося б займацца ўзроўнямі ўскоснасці. Я хачу змяніць словы памяці і мне трэба пераключацца, таму што я магу змяніць толькі адзін паказальнік, таму ўказваць ім трэба на нейкую структуру, падобную на каталог. Мы казалі аб тым, як выдатна было б, калі б мы маглі так памяняць жалеза, каб яно змагло рабіць адначасовую запіс. Здаецца, гэта заўважыў Эліёт: калі паглядзець на пратаколы кагерэнтнасці кэша, яны ўжо падаюць большую частку неабходнай функцыянальнасці. У аптымістычнай транзакцыі, пратакол кагерэнтнасці кэша заўважыць наяўнасць канфлікту сінхранізацыі і кэш стане несапраўдным. Што будзе, калі спекулятыўна запусціць транзакцыю на сваім кэшы і выкарыстоўваць механізмы пратакола кагерэнтнасці для выяўлення канфліктаў? Спекулятыўную апаратную архітэктуру спраектаваць было лёгка. Так мы і напісалі тую самую першую публікацыю пра транзакцыйную памяць. У той жа час, кампанія, у якой я працаваў, Digital Equipment Corporation, стварала новы 64-разрадны працэсар пад назовам Alpha. І вось я пайшоў і зрабіў прэзентацыю для групы распрацоўнікаў Alpha пра нашу выдатную транзакцыйную памяць і яны спыталі: які дадатковы прыбытак атрымае наша кампанія, калі мы ўсё гэта дадамо прама ў працэсар? І ў мяне не было абсалютна ніякага адказу на гэта, таму што я - тэхнолаг, я не спецыяліст па маркетынгу. Мне сапраўды не было чаго адказаць. Яны не вельмі ўразіліся тым, што я нічога не ведаю.

Віталь: Мільярды! Проста кажаце "мільярды"!

Морыс: Так, гэта я і павінен быў сказаць. Цяпер, у эпоху стартапаў і ўсяго такога, я ведаю, як напісаць бізнэс-план. Што можна крыху схлусіць аб памеры патэнцыйнага прыбытку. Але ў тыя дні гэта здавалася наіўным, таму я проста сказаў: "не ведаю". Калі вы паглядзіце на гісторыю публікацыі пра транзакцыйную памяць, то заўважыце, што праз год з'явілася некалькі спасылак на яе, а пасля каля дзесяці гадоў ніхто ўвогуле не цытаваў гэты артыкул. Цытаты з'явіліся прыкладна ў 2004 годзе, калі з'явілася сапраўдная шмат'ядравасць. Калі людзі адкрылі для сябе, што напісанне паралельнага кода можа прыносіць грошы, пачаліся новыя даследаванні. Раві Раджвар напісаў артыкул, у некаторым родзе пазнаёміўшую мэйнстрым з паняццем транзакцыйнай памяці. (Заўвага рэдакцыі: у артыкула ёсць другая версія, выпушчаная ў 2010 годзе і свабодна даступная у выглядзе PDF). Раптам людзі ўсвядомілі, як менавіта ўсё гэта можна выкарыстоўваць, як можна паскараць традыцыйныя алгарытмы з блакіроўкамі. Добры прыклад нечага, што ў мінулым здавалася толькі цікавай акадэмічнай праблемай. І так, калі б вы ў тыя часы спыталі мяне, ці лічу я, што ўсё гэта акажацца важным у будучыні, я б сказаў: вядома, але калі менавіта – незразумела. Можа, гадоў праз 50? На практыцы гэта аказалася ўсяго дзесяцігоддзе. Вельмі прыемна, калі ты нешта робіш, і ўсяго праз дзесяць год людзі гэта заўважаюць.

Чаму варта праводзіць даследаванні ў галіне размеркаваных вылічэнняў

Віталь: Калі казаць пра новыя даследаванні, што б вы параілі чытачам – размеркаваныя вылічэнні ці шмат'ядрасць і чаму? 

Морыс: У нашы дні лёгка атрымаць шмат'ядравы працэсар, але складаней наладзіць сапраўдную размеркаваную сістэму. Я пачаў працаваць над імі, таму што хацеў зрабіць нешта адрознае ад маёй кандыдацкай дысертацыі. Гэта парада, якую я заўсёды даю пачаткоўцам: не пішыце працяг дысертацыі - паспрабуйце ісці ў новым кірунку. А яшчэ, шматструменнасць - гэта проста. Я магу праводзіць эксперыменты над уласным форкам, запушчаным на наўтбуку, не ўстаючы з ложка. Але калі б я раптам хацеў стварыць сапраўдную размеркаваную сістэму, прыйшлося б пракруціць вялікую працу, прыцягнуць студэнтаў, і гэтак далей. Я чалавек лянівы і хацеў бы працаваць над шмат'ядравасцю. Эксперыменты над шмат'ядравымі сістэмамі таксама рабіць прасцей, чым над размеркаванымі, таму што нават у дурной размеркаванай сістэме ёсць занадта шмат фактараў, якія неабходна кантраляваць.

Віталь: Чым вы самі зараз займаецеся, даследуеце блокчэйн? На якія артыкулы трэба звярнуць увагу ў першую чаргу?

Морыс: Нядаўна з'явілася вельмі добры артыкул, якую я напісаў разам са сваім студэнтам, Вікрамам Сарафам, спецыяльна для выступу на канферэнцыі Tokenomcs у Парыжы тры тыдні таму. Гэты артыкул аб карысных на практыцы размеркаваных сістэмах, у якой мы прапануем зрабіць Ethereum шматструменным. Цяпер смарт-кантракты (код, які запускаецца на блокчейне) выконваюцца паслядоўна. Мы яшчэ раней напісалі артыкул, у якім гаварылася аб спосабе выкарыстоўваць спекулятыўныя транзакцыі для паскарэння працэсу. Мы ўзялі шмат ідэй з праграмнай транзакцыйнай памяці і сказалі, што калі вы зробіце гэтыя ідэі часткай віртуальнай машыны Etherium, тады ўсё пачне працаваць хутчэй. Але для гэтага неабходна, каб у кантрактах не было канфліктаў паводле звестак. А потым мы выказалі здагадку, што ў рэальным жыцьці такіх канфліктаў сапраўды няма. Але ў нас не было магчымасці высветліць. Затым нам прыйшло ў галаву, што ў нас на руках амаль дзесяць гадоў гісторыі рэальных кантрактаў, таму мы выгрузілі блокчэйн Etherium і задаліся пытаннем: што адбылося б, калі б гэтыя гістарычныя запісы выконваліся паралельна? Мы выявілі істотны прырост хуткасці. У першыя дні жыцця Etherium хуткасць павысілася вельмі моцна, але сёння ўсё крыху больш складана, таму што кантрактаў стала менш і вышэй стала верагоднасць канфліктаў па дадзеных, якія патрабуюць серыялізацыі. Але ўсё гэта - эксперыментальная праца з рэальнымі гістарычнымі дадзенымі. Што прыемна ў блокчейне - ён памятае ўсё і назаўжды, таму можна вярнуцца ў мінулае і вывучыць, што адбылося б, калі б мы выкарыстоўвалі для запуску кода іншыя алгарытмы. Як людзям там, у мінулым, прыйшлася б да спадобы наша новая ідэя. Такія даследаванні рабіць куды прасцей і прыемней, бо ёсць штука, якая за ўсім сочыць і ўсё запісвае. Гэта ўжо нешта больш падобнае на сацыялогію, чым на распрацоўку алгарытмаў.

Ці спынілася развіццё алгарытмаў і як жыць далей

Віталь: Час апошняга тэарэтычнага пытання! Ёсць адчуванне, што зрухі ў галіне канкурэнтных структур даных скарачаюцца кожны год? Як вы думаеце, мы падышлі да плато ў нашым разуменні структур дадзеных ці будуць нейкія сур'ёзныя паляпшэнні? Можа, існуюць нейкія хітрыя ідэі, якія могуць поўнасцю змяніць усё?

Морыс: Магчыма, мы дасягнулі плато ў структурах звестак для традыцыйных архітэктур. Але структуры дадзеных для новых архітэктур усё яшчэ вельмі перспектыўная вобласць. Калі вы жадаеце ствараць структуры дадзеных, скажам, для апаратных паскаральнікаў, то структуры дадзеных для GPU моцна адрозніваюцца ад структур дадзеных для CPU. Калі вы распрацоўваеце структуры дадзеных для блокчейнов, трэба хэшаваць кавалачкі дадзеных і потым укладваць у нешта накшталт дрэва Меркле, для прадухілення падробак. У гэтай галіне ў апошні час назіраецца ўсплёск актыўнасці, многія робяць вельмі добрую працу. Але я думаю, здарыцца так, што новыя архітэктуры і новыя прыкладанні прывядуць да новых структур дадзеных. Старыя прыкладанні і традыцыйная архітэктура - магчыма, там ужо не так шмат прасторы для даследаванняў. Але калі вы сыдзеце з пракладзенай дарожкі, і паглядзіце за край, вы ўбачыце вар'яты рэчы, якія мэйнстрым не ўспрымае ўсур'ёз - вось дзе ўсе захапляльныя рэчы і адбываюцца на самай справе.

Віталь: Таму, каб быць вельмі вядомым даследчыкам, я мусіў вынайсці сваю ўласную архітэктуру 🙂

Морыс: Можна "скрасці" чужую новую архітэктуру – здаецца, гэта нашмат прасцей!

Праца ў Браунаўскім Універсітэце

Віталь: Не маглі б вы падрабязней распавесці пра Браунаўскім Універсітэце, у якім вы працуеце? Пра яго ў кантэксце інфармацыйных тэхналогій вядома не так ужо шмат. Менш, чым аб MIT, напрыклад.

Морыс: Браўнаўскі Універсітэт - адзін з найстарэйшых універсітэтаў у Злучаных Штатах. Я думаю, што толькі Гарвард крыху старэй. Браўн з'яўляецца часткай так званай Лігі плюшчу, якая ўяўляе сабой збор васьмі найстарэйшых універсітэтаў. Гарвард, Браўн, Корнэл, Йель, Калумбія, Дартмут, Пэнсыльванія, Прынстан. Гэта свайго роду стары, маленькі і крыху арыстакратычны ўніверсітэт. Асноўная ўвага надаецца гуманітарнай адукацыі. Ён не спрабуе быць падобным да MIT, MIT вельмі спецыялізаваны і тэхнічны. Браўн - выдатнае месца для вывучэння рускай літаратуры або класічнай грэцкай мовы, і вядома ж, Computer Science. Ён засяроджаны на ўсебаковай адукацыі. Большасць нашых студэнтаў сыходзяць у Facebook, Apple, Google - таму, думаю, у нашых студэнтаў няма праблем уладкавацца і ў індустрыі. Я пайшоў працаваць у Браўн, таму што да гэтага працаваў Digital Equipment Corporation у Бостане. Гэта была кампанія, якая вынайшла шмат цікавага, але адмаўляла важнасць персанальных кампутараў. Кампанія з няпростым лёсам, заснавальнікі якой аднойчы былі калісьці маладымі рэвалюцыянерамі, яны нічому не навучыліся і нічога не забыліся, і таму яны ператварыліся з рэвалюцыянераў у рэакцыянераў на працягу прыкладна дзясятка гадоў. Яны любілі жартаваць, што персанальным кампутарам месца ў гаражы - у закінутым гаражы, вядома. Цалкам відавочна, што яны аказаліся знішчаныя больш гнуткімі кампаніямі. Калі стала ясна, што ў кампаніі праблемы, я патэлефанаваў свайму сябру з Браўна, які знаходзіцца прыкладна ў гадзіне язды ад Бостана. Я не хацеў з'яжджаць з Бостана ў той час, бо ў іншых універсітэтах было не так шмат вакансій. Гэта быў час, калі ў вобласці Computer Science не было настолькі шмат вакансій, як зараз. А ў Браўна была вакансія, мне не трэба было пераязджаць са сваёй хаты, не трэба было перавозіць сям'ю, ды і мне вельмі падабаецца жыць у Бостане! Так я і прыняў рашэнне пайсці ў Браўн. Мне спадабалася. Студэнты выдатныя, таму я ніколі нават не спрабаваў пайсці кудысьці яшчэ. На творчым адпачынку я працаваў у Microsoft на працягу года, на год сыходзіў у Technion у Хайфе, зараз буду ў Algorand. У мяне ўсюды шмат калег і таму фізічнае размяшчэнне нашых навучальных класаў не так ужо важна. А вось самае галоўнае - студэнты, яны тут самыя лепшыя. Я ніколі не спрабаваў пайсці куды-небудзь яшчэ, таму што цалкам шчаслівы і тут.

Тым не менш, нягледзячы на ​​вядомасць Браўна ў Злучаных Штатах, ён дзіўна невядомы за мяжой. Як бачыце, зараз я раблю ўсё магчымае, каб выправіць гэты стан рэчаў.

Розніца паміж даследаваннямі ва ўніверсітэце і ўнутры карпарацыі

Віталь: Добра, наступнае пытанне аб Digital Equipment. Вы былі там даследчыкам. У чым розніца паміж працай у R&D-аддзеле буйной кампаніі і працай ва ўніверсітэце? Якія перавагі і недахопы?

Морыс: За дваццаць гадоў я паспеў папрацаваць у Microsoft, цесна ўзаемадзейнічаў з супрацоўнікамі Sun Microsystems, Oracle, Facebook, а зараз і Algorand. На падставе гэтага ўсяго жадаю сказаць, што магчыма праводзіць першакласныя даследаванні і ў кампаніях, і ва ўніверсітэце. Важнае адрозненне ў тым, што ў кампаніі вы працуеце з калегамі. Калі ў мяне раптам з'явілася ідэя неіснуючага пакуль праекту, я павінен пераканаць роўных сабе калегаў, што гэта добрая ідэя. Калі ж я ў Брауне, то можна сказаць сваім студэнтам: давайце працаваць над антыгравітацыяй! Яны альбо сыдуць да кагосьці іншага, альбо возьмуцца за праект. Так, мне трэба будзе знайсці фінансаванне, мне трэба будзе напісаць заяўку на грант і гэтак далей. У любым выпадку заўсёды знойдзецца мноства студэнтаў, і вы зможаце ў аднабаковым парадку прымаць рашэнні. Але ва ўніверсітэце вы, хутчэй за ўсё, не будзеце працаваць з людзьмі вашага ўзроўню. У свеце прамысловых даследаванняў спачатку давядзецца пераконваць усіх, што за ваш праект каштаваць брацца. Я не магу нікому нічога загадаць. І абодва гэтыя спосабы працы каштоўныя, бо калі вы працуеце над чымсьці сапраўды вар'ятам і вашых калегаў цяжка пераканаць, лягчэй пераканаць аспірантаў - асабліва калі вы ж ім і плаціце. Калі вы працуеце над чымсьці, што патрабуе вялікага досведу і глыбокай экспертызы, то вам патрэбныя калегі, якія змогуць сказаць "не, так здарылася, што я разумею ў гэтай галіне і твая ідэя дрэнная, нічога не выйдзе". Гэта вельмі карысна з пункту гледжання марнавання часу. А яшчэ, калі ў прамысловых лабараторыях вы марнуеце кучу часу на напісанне справаздач, то ва ўніверсітэце вы марнуеце гэты час на тое, каб знайсці грошы. Калі я хачу, каб студэнты змаглі кудысьці з'ездзіць, я мушу знайсці на гэта грошы ў нейкім іншым месцы. І чым важнейшае ў вас становішча ва ўніверсітэце, тым больш часу даводзіцца праводзіць, збіраючы грошы. Так што, зараз вы ведаеце, кім я працую - прафесійным жабракам! Як адзін з тых манахаў, якія ходзяць з талеркай для ахвяраванняў. Увогуле, гэтыя два віды дзейнасці дапаўняюць адзін аднаго. Вось чаму я стараюся жыць і трывала стаяць на нагах у абодвух сьветах.

Віталь: Здаецца, пераканаць кампанію больш складана, чым пераканаць іншых навукоўцаў.

Морыс: Больш складана, і нашмат. Прычым, у розных галінах па-рознаму: нехта праводзіць поўнамаштабныя даследаванні, а нехта сфакусаваны на сваёй тэме. Калі я пайшоў бы ў Microsoft ці Facebook і сказаў: давайце зробім антыгравітацыю, яны ці наўрад бы гэта ацанілі. Але калі б я сказаў дакладна тое ж самае сваім аспірантам, яны хутчэй за ўсё ўзяліся б за працу імгненна, хоць праблемы цяпер былі б ужо ў мяне – бо трэба знайсці на гэта грошы. Але пакуль вы хочаце рабіць нешта, якое адпавядае мэтам кампаніі, такая кампанія можа быць вельмі добрым месцам для правядзення даследаванняў.

Hydra і SPTDC

Віталь: Мае пытанні падыходзяць да канца, таму давайце пагаворым крыху пра маючае адбыцца падарожжа ў Расію.

Морыс: Так, я з нецярпеннем чакаю вяртанні ў Пецярбург.

Аляксей: Для мяне вялікі гонар, што вы з намі сёлета. Вы ўжо другі раз у Піцеры, праўда?

Морыс: Ужо трэці!

Аляксей: Зразумеў, але на SPTDC - сапраўды другі. Мінулы раз школа называлася SPTCC, зараз мы змянілі адну літару (C на D, Concurrent на Distributed), каб падкрэсліць, што напрамкаў, якія тычацца менавіта размеркаваных вылічэнняў, у гэтым годзе стала больш. Можаце сказаць пару слоў аб вашых дакладах на Школе і канферэнцыі Hydra?

Морыс: На Школе я хачу расказаць пра асновы працы блокчэйна і што з ім увогуле можна рабіць. Жадаецца паказаць, што блокчейны вельмі падобныя на знаёмае нам шматструменнае праграмаванне, але са сваімі нюансамі, і гэтыя адрозненні важна разумець. Калі вы дапусціце памылку ў звычайным вэб-дадатку - гэта проста непрыемна. Калі вы напішаце забагаваны код у фінансавым дадатку, хто-небудзь сапраўды скрадзе ўсе вашы грошы. Гэта зусім розны ўзровень адказнасці і наступстваў. Я крыху пагавару аб proof-of-work, аб смарт-кантрактах, аб транзакцыях паміж рознымі блокчейнамі.

Побач са мной будуць працаваць іншыя спікеры, якім таксама ёсць што сказаць пра блокчэйн, і мы дамовіліся скаардынавацца паміж сабой, каб нашыя гісторыі добра стыкаваліся. А вось для інжынернага дакладу я хачу расказаць зразумелае шырокай аўдыторыі тлумачэнне, чаму не варта верыць усяму, што вы чуеце пра блокчейны, чаму блокчейны - гэта выдатная вобласць, як яна стыкуецца з іншымі вядомымі ідэямі, і чаму нам варта смела глядзець у будучыню.

Аляксей: У дадатак хачу сказаць, што праходзіць гэта будзе не ў фармаце мітапа ці карыстацкай групы, як гэта было два гады таму. Мы вырашылі зрабіць побач са школай невялікую канферэнцыю. Прычына ў тым, што пасля зносін з Пятром Кузняцовым мы ўсвядомілі, што школа абмежавана ўсяго толькі сотняй, можа быць 120 людзьмі. Пры гэтым ёсць вельмі шмат інжынераў, якія жадаюць з вамі пагутарыць, пабываць на дакладах, і ўвогуле цікавяцца тэмай. Дзеля гэтага мы стварылі новую канферэнцыю пад назвай Hydra. Дарэчы, ёсць ідэі, чаму менавіта гідра?

Морыс: Бо на ёй будзе сем спікераў? І ім можна адрэзаць галовы, і на іх месцы вырастуць новыя спікеры?

Аляксей: Выдатная ідэя для вырошчвання новых спікераў. Але насамрэч, тут ёсць гісторыя. Памятайце легенду пра Адысея, там дзе ён павінен быў праплысці паміж Сцылай і Харыбдай? Гідра - гэта нешта накшталт Харыбды. Гісторыя ў тым, што неяк раз я выступаў на канферэнцыі і расказваў пра шматструменнасць. На гэтай канферэнцыі было ўсяго два трэкі. У пачатку даклада я сказаў слухачам у зале, што ў іх зараз ёсць выбар паміж Сцылай і Харыбдай. Маім татэмнай жывёлай стала Харыбда, таму што ў Харыбды мноства галоў, а ў мяне тэма - шматструменнасць. Так і з'яўляюцца назвы канферэнцый.

У любым выпадку, у нас скончыліся і пытанні і час. Так што, дзякуй, сябры, за выдатнае інтэрв'ю і сустрэнемся на школе SPTDC і канферэнцыі Hydra 2019!

Працягнуць зносіны з Морыс можна будзе на канферэнцыі Hydra 2019, якая пройдзе 11-12 ліпеня 2019 года ў Санкт-Пецярбургу. Ён прыедзе з дакладам "Blockchains and the future of distributed computing". Білеты можна набыць на афіцыйным сайце.

Крыніца: habr.com

Дадаць каментар