„Atsakyti lengviau nei tylėti“ – puikus interviu su transakcinės atminties tėvu Maurice'u Herlihy

„Atsakyti lengviau nei tylėti“ – puikus interviu su transakcinės atminties tėvu Maurice'u Herlihy

Morisas Herlihy - dviejų savininkas Dijkstra prizai. Pirmasis skirtas darbui „Sinchronizavimas be laukimo“ (Brauno universitetas) ir antrasis, naujesnis, - „Transakcinė atmintis: architektūrinis neužrakinimo duomenų struktūrų palaikymas“ (Virginia Tech University). Dijkstra premija skiriama už darbą, kurio reikšmė ir įtaka matoma mažiausiai dešimt metų, o Maurice'as akivaizdžiai yra vienas žymiausių šios srities specialistų. Šiuo metu jis dirba profesoriumi Browno universitete ir turi daug laimėjimų, kurių trukmė yra pastraipa. Šiuo metu jis tyrinėja blokų grandinę klasikinio paskirstyto skaičiavimo kontekste.

Anksčiau Maurice'as jau buvo atvykęs į Rusiją dėl SPTCC (vaizdo juosta) ir surengė puikų JUG.ru Java kūrėjų bendruomenės susitikimą Sankt Peterburge (vaizdo juosta).

Šis habrapostas yra puikus interviu su Maurice'u Herlihy. Jame aptariamos šios temos:

  • Sąveika tarp akademinės bendruomenės ir pramonės;
  • Blockchain tyrimų fondas;
  • Iš kur kyla proveržio idėjos? Populiarumo įtaka;
  • daktaro laipsnis, vadovaujamas Barbaros Liskov;
  • Pasaulis laukia kelių branduolių;
  • Naujas pasaulis atneša naujų problemų. NVM, NUMA ir architektūros įsilaužimas;
  • Kompiliatoriai prieš procesorius, RISC vs CISC, bendra atmintis ir pranešimų siuntimas;
  • Menas rašyti trapų kelių gijų kodą;
  • Kaip išmokyti studentus rašyti sudėtingą kelių gijų kodą;
  • Naujas knygos „The Art of Multiprocessor Programming“ leidimas;
  • Kaip buvo išrasta transakcinė atmintis;   
  • Kodėl verta atlikti tyrimus paskirstytojo skaičiavimo srityje;
  • Ar sustojo algoritmų kūrimas ir kaip judėti toliau;
  • Darbas Browno universitete;
  • Skirtumas tarp tyrimų universitete ir korporacijoje;
  • Hidra ir SPTDC.

Interviu veda:

Vitalijus Aksenovas — šiuo metu yra IST Austria postdoc ir ITMO universiteto Kompiuterinių technologijų katedros darbuotojas. Atlieka tyrimus konkurencinių duomenų struktūrų teorijos ir praktikos srityje. Prieš dirbdamas IST, jis įgijo daktaro laipsnį Paryžiaus Didro universitete ir ITMO universitete, vadovaujant profesoriui Peteriui Kuznecovui.

Aleksejus Fiodorovas - Prodiuseris Rusijos įmonėje JUG Ru Group, kuri organizuoja konferencijas kūrėjams. Aleksejus dalyvavo rengiant daugiau nei 50 konferencijų, o jo gyvenimo aprašyme yra viskas, pradedant kūrimo inžinieriumi „Oracle“ (JCK, „Java Platform Group“) ir baigiant kūrėjo pareigomis Odnoklassniki.

Vladimiras Sitnikovas - Netcracker inžinierius. Dešimt metų darbo dėl „NetCracker OS“ našumo ir mastelio – programinės įrangos, kurią telekomunikacijų operatoriai naudoja tinklo ir tinklo įrangos valdymo procesams automatizuoti. Domina Java ir Oracle Database našumo problemos. Daugiau nei tuzino oficialios PostgreSQL JDBC tvarkyklės našumo patobulinimų autorius.

Akademinės bendruomenės ir pramonės sąveika

Aleksejus: Mauricai, jūs labai ilgai dirbote akademinėje aplinkoje ir pirmas klausimas yra akademinės ir pramonės sferų sąveika. Ar galėtumėte pakalbėti apie tai, kaip pastaruoju metu pasikeitė jų tarpusavio sąveika? Kas vyko prieš 20-30 metų ir kas vyksta dabar? 

Mauricas: Visada stengiausi glaudžiai bendradarbiauti su komercinėmis įmonėmis, nes jos turi įdomių problemų. Jie, kaip taisyklė, nėra labai suinteresuoti nei skelbti savo rezultatus, nei išsamiai paaiškinti savo problemas pasaulio bendruomenei. Jiems rūpi tik šių problemų sprendimas. Kurį laiką dirbau tokiose įmonėse. Penkerius metus dirbau visą darbo dieną tyrimų laboratorijoje Digital Equipment Corporation, kuri anksčiau buvo didelė kompiuterių įmonė. Vieną dieną per savaitę dirbau „Sun“, „Microsoft“, „Oracle“ ir šiek tiek dirbau „Facebook“. Dabar aš eisiu šabo atostogų (vieno Amerikos universiteto profesoriui leidžiama tokias atostogas išeiti maždaug kartą per šešerius metus) ir dirbsiu Algorandas, tai kriptovaliutų įmonė Bostone. Glaudus bendradarbiavimas su įmonėmis visada buvo malonumas, nes taip sužinai naujų ir įdomių dalykų. Jūs netgi galite būti pirmasis ar antras asmuo, paskelbęs straipsnį pasirinkta tema, o ne stengtis palaipsniui tobulinti problemų, kurias jau sprendžia visi kiti, sprendimus.

Aleksejus: Ar galite plačiau papasakoti, kaip tai vyksta?

Maurice: Žinoma. Žinote, kai dirbau Digital Equipment Corporation, aš ir Elliotas Mossas išradome operacijų atmintį. Tai buvo labai vaisingas laikotarpis, kai visi pradėjo domėtis informacinėmis technologijomis. Lygiagretumas, įskaitant, nors kelių branduolių sistemų dar nebuvo. Saulės ir Oraklo dienomis daug dirbau prie lygiagrečių duomenų struktūrų. „Facebook“ dirbau su jų „blockchain“ projektu, apie kurį negaliu kalbėti, bet tikiuosi, kad jis greitai išeis į viešumą. Kitais metais Algorande dirbsiu tyrimų grupėje, tiriančioje išmaniąsias sutartis.

Aleksejus: Blockchain per pastaruosius kelerius metus tapo labai populiari tema. Ar tai padės jūsų tyrimui? Galbūt tai padės lengviau gauti dotacijas ar suteikti prieigą prie išteklių iš pramonės įmonių?

Maurice: Aš jau gavau nedidelę dotaciją iš Ethereum fondo. Blockchain populiarumas labai padeda įkvėpti studentus dirbti šioje srityje. Jie tuo labai domisi ir nekantrauja įsitraukti, bet kartais nesuvokia, kad iš išorės įdomiai skambantis tyrimas, pasirodo, reikalauja tikrai sunkaus darbo. Tačiau labai džiaugiuosi galėdamas panaudoti visą šią „blockchain“ mistiką, kad padėčiau pritraukti studentus. 

Bet tai dar ne viskas. Esu kelių „blockchain“ startuolių patariamosios tarybos narys. Kai kuriems gali pasisekti, kitiems – ne, bet visada labai įdomu pamatyti jų idėjas, jas pastudijuoti ir patarti žmonėms. Įdomiausia, kai perspėji žmones ko nors nedaryti. Daugelis dalykų iš pradžių atrodo gera idėja, bet ar iš tikrųjų?

Blockchain tyrimų fondas

Vitalijus: Kai kurie žmonės mano, kad ateitis priklauso nuo blokų grandinės ir jos algoritmų. O kiti sako, kad tai tik dar vienas burbulas. Ar galite pasidalinti savo nuomone šiuo klausimu?

Maurice'as: Daugelis dalykų, kurie vyksta blockchain pasaulyje, yra neteisingi, kai kurie yra tik apgaulė, daug kas yra pervertinta. Tačiau manau, kad šiems tyrimams yra tvirtas mokslinis pagrindas. Tai, kad blockchain pasaulis pilnas ideologinių skirtumų, rodo susijaudinimo ir atsidavimo lygį. Kita vertus, tai nėra ypač naudinga moksliniams tyrimams. Dabar, jei paskelbiate straipsnį, kuriame kalbama apie konkretaus algoritmo trūkumus, gauta reakcija ne visada yra visiškai mokslinė. Dažnai žmonės išmeta savo emocijas. Manau, kad kai kuriems toks azartas šioje srityje gali atrodyti patrauklus, tačiau galiausiai yra tikrų mokslo ir inžinerinių problemų, kurias reikia išspręsti. Čia yra daug kompiuterių mokslo.

Vitalijus: Taigi jūs bandote pakloti „blockchain“ tyrimų pagrindą, tiesa?

Maurice'as: Bandau pakloti tvirtos, moksliškai ir matematiškai pagrįstos disciplinos pagrindą. O dalis problemos yra ta, kad kartais tenka prieštarauti kai kurioms pernelyg griežtoms kitų žmonių pozicijoms ir jas ignoruoti. Kartais žmonės klausia, kodėl aš dirbu srityje, kurioje domisi tik teroristai ir narkotikų prekeiviai. Tokia reakcija yra beprasmiška, kaip ir sekėjų elgesys, kurie aklai kartoja jūsų žodžius. Manau, kad tiesa yra kažkur per vidurį. Blockchain turės didelį poveikį visuomenei ir pasaulio ekonomikai. Tačiau tai tikriausiai neįvyks dėl šiuolaikinių technologijų. Tobulės šiuolaikinės technologijos ir tai, kas ateityje bus vadinama blokų grandine, taps labai svarbi. Tai gali net neatrodyti kaip šiuolaikinės blokų grandinės, tai atviras klausimas.

Jei žmonės išras naujas technologijas, jie ir toliau tai vadins „blockchain“. Turiu galvoje, kaip ir šiandieninė Fortran neturi nieko bendra su septintojo dešimtmečio Fortran kalba, bet visi ją vadina Fortran. Tas pats ir UNIX. Tai, kas vadinama „blockchain“, vis tiek padarys savo revoliuciją. Tačiau abejoju, kad ši nauja blokų grandinė bus panaši į tai, ką visi mėgsta naudoti šiandien.

Iš kur kyla proveržio idėjos? Populiarumo įtaka

Aleksejus: Ar „blockchain“ populiarumas atvedė prie naujų rezultatų moksliniu požiūriu? Daugiau bendravimo, daugiau studentų, daugiau įmonių rajone. Ar dėl šio populiarumo augimo jau yra kokių nors rezultatų?

Morisas: Tuo susidomėjau, kai kažkas man įteikė oficialų įmonės, kuri ką tik surinko nemažai pinigų, skrajutę. Rašė apie Bizantijos generolų užduotis, su kuria esu daugiau nei susipažinęs. Tai, kas buvo parašyta lapelyje, buvo aiškiai techniškai neteisinga. Žmonės, kurie visa tai rašė, nelabai suprato, koks modelis slypi už problemos... ir vis dėlto ši įmonė surinko daug pinigų. Vėliau įmonė tyliai šį lapelį pakeitė kur kas teisingesne versija – ir nesakysiu, kaip vadinosi ši įmonė. Jie vis dar yra šalia ir jiems puikiai sekasi. Šis incidentas mane įtikino, kad, pirma, „blockchain“ yra tiesiog paskirstytojo skaičiavimo forma. Antra, įstojimo slenkstis (bent jau tada, prieš ketverius metus) buvo gana žemas. Šioje srityje dirbantys žmonės buvo labai energingi ir protingi, tačiau mokslinių darbų neskaito. Jie bandė iš naujo išrasti žinomus dalykus ir padarė tai neteisingai. Šiandien dramos sumažėjo.

Aleksejus: Tai labai įdomu, nes prieš keletą metų turėjome kitokią tendenciją. Tai šiek tiek panašu į priekinės dalies kūrimą, kai naršyklės priekinės dalies kūrėjai iš naujo išrado visas technologijas, kurios jau buvo populiarios užpakalinėje dalyje: sistemų kūrimas, nuolatinė integracija ir panašūs dalykai. 

Maurice: Sutinku. Tačiau tai nenuostabu, nes tikrai proveržio idėjos visada kyla iš už įsitvirtinusios bendruomenės ribų. Tikėtina, kad nusistovėję mokslininkai, ypač žinomi akademikai, padarys ką nors tikrai novatoriško. Kitai konferencijai nesunku parašyti pranešimą apie tai, kaip šiek tiek pagerinote savo ankstesnio darbo rezultatus. Eikite į konferenciją, susitikite su draugais, pasikalbėkite apie tuos pačius dalykus. Ir žmonės, kurie trykšta proveržio idėjomis, beveik visada ateina iš išorės. Jie nežino taisyklių, nemoka kalbos, bet vis dėlto... Jei esate susiformavusioje bendruomenėje, patariu atkreipti dėmesį į naujus dalykus, į tai, kas netelpa į bendrą vaizdą. Tam tikra prasme galima bandyti derinti išorinius, sklandesnius pokyčius su metodais, kuriuos jau suprantame. Pirmiausia pabandykite sukurti mokslinį pagrindą, o tada pakeiskite jį taip, kad jį būtų galima pritaikyti naujoms proveržio idėjoms. Manau, kad „blockchain“ yra puiki idėja, nes ji yra nauja, trikdanti idėja.

Aleksejus: Kaip manai, kodėl taip nutinka? Nes žmonės „išorėje“ neturi jokių konkrečių bendruomenei būdingų kliūčių?

Maurice: Čia vyksta modelis. Jei skaitote impresionistų istoriją tapyboje ir apskritai mene, tai vienu metu garsūs menininkai atmetė impresionizmą. Jie sakė, kad tai buvo vaikiška. Po kartos ši anksčiau atmesta meno forma tapo standartu. Ką aš matau savo srityje: blockchain išradėjai nesidomėjo galia, publikacijų ir citavimo indekso didinimu, jie tiesiog norėjo padaryti ką nors gero. Taip jie atsisėdo ir pradėjo tai daryti. Jiems trūko tam tikro techninio gylio, bet tai pataisoma. Kur kas sunkiau sugalvoti naujas kūrybines idėjas, nei koreguoti ir sustiprinti nepakankamai subrendusias. Šių išradėjų dėka dabar turiu ką veikti!

Aleksejus: Tai panašu į skirtumą tarp startuolių ir senų projektų. Mes paveldime daugybę mąstymo apribojimų, kliūčių, specialių reikalavimų ir pan.

Maurice: Gera analogija yra paskirstytasis kompiuteris. Pagalvokite apie „blockchain“ taip, tarsi tai būtų startuolis ir paskirstytas kompiuteris kaip didelė, įsitvirtinusi įmonė. Paskirstytasis kompiuteris yra įsigyjamas ir sujungiamas su „blockchain“.

Doktorantūros laipsnis, vadovaujamas Barbaros Liskov

Vitalijus: Dar turime daug klausimų! Ištyrėme jūsų istoriją ir radome įdomų faktą apie jūsų daktaro laipsnį. Taip, tai buvo seniai, bet atrodo, kad tai svarbi tema. Daktaro laipsnį įgijote vadovaudamasis sau Barbara Liskova! Barbara yra labai gerai žinoma programavimo kalbų bendruomenėje ir apskritai labai gerai žinoma asmenybė. Logiška, kad jūsų tyrimas buvo programavimo kalbų srityje. Kaip perėjote prie lygiagretaus skaičiavimo? Kodėl nusprendėte pakeisti temą?

Maurice'as: Tuo metu Barbara ir jos grupė tiesiog žiūrėjo į paskirstytą skaičiavimą, o tai buvo labai nauja idėja. Buvo ir tokių, kurie teigė, kad paskirstytasis kompiuteris yra nesąmonė, o kompiuterių bendravimas tarpusavyje yra beprasmis. Viena iš paskirstytojo skaičiavimo problemų, išskiriančių jį nuo centralizuoto skaičiavimo, yra atsparumas gedimams. Po daugybės tyrimų nusprendėme, kad paskirstytoji skaičiavimo programavimo kalba turi turėti kažką panašaus į atomines operacijas, nes niekada negalite būti tikri, kad nuotolinis skambutis pavyks. Kai atliksite sandorius, iškyla lygiagretumo valdymo problema. Tada buvo daug darbo siekiant gauti labai lygiagrečias sandorių duomenų struktūras. Tada, kai baigiau mokslus, nuėjau į Carnegie Mellon ir pradėjo ieškoti temos, su kuria galėtų dirbti. Man pasirodė, kad kompiuterija iš atskirų kompiuterių persikėlė į kompiuterių tinklus. Daugiaprocesoriai būtų natūralus progreso tęsinys – žodžio „daugiagysliai“ dar nebuvo. Pagalvojau: kas yra atominių transakcijų atitikmuo kelių branduolių sistemai? Tikrai ne reguliarūs sandoriai, nes jie per dideli ir sunkūs. Taip ir sugalvojau tiesiškumas ir taip sugalvojau visa nelaukiama sinchronizacija. Taip buvo bandoma atsakyti į klausimą, koks yra atominių transakcijų analogas daugiaprocesorinei sistemai su bendra atmintimi. Iš pirmo žvilgsnio šis kūrinys gali atrodyti visiškai kitaip, tačiau iš tikrųjų tai yra tos pačios temos tęsinys.

Pasaulis laukia kelių branduolių

Vitalijus: Minėjai, kad tuo metu kelių branduolių kompiuterių buvo labai mažai, tiesa?

Maurice: Jų tiesiog nebuvo. Buvo keli vadinamieji simetriniai daugiaprocesoriai, kurie iš esmės buvo prijungti prie tos pačios magistralės. Tai neveikė labai gerai, nes kiekvieną kartą, kai nauja įmonė sukurdavo kažką panašaus, „Intel“ išleis vieną procesorių, pranašesnį už kelių procesorių.

Aleksejus: Ar tai nereiškia, kad tais laikais tai buvo daugiau teorinis tyrimas?

Maurice'as: Tai buvo ne teorinis, o spekuliacinis tyrimas. Visa tai nebuvo susiję su darbu su daugybe teoremų, o mes iškėlėme hipotezes apie architektūrą, kurios tuo metu nebuvo. Štai kam skirti tyrimai! Jokia įmonė nebūtų padariusi ko nors panašaus; visa tai buvo kažkas iš tolimos ateities. Tiesą sakant, taip buvo iki 2004 m., kai pasirodė tikri kelių branduolių procesoriai. Kadangi procesoriai perkaista, galite padaryti procesorių dar mažesnį, bet negalite jo pagreitinti. Dėl šios priežasties buvo pereita prie kelių branduolių architektūrų. Ir tada tai reiškė, kad staiga buvo panaudotos visos anksčiau sukurtos sąvokos.

Aleksejus: Kodėl manote, kad kelių branduolių procesoriai atsirado tik 2000-aisiais? Tai kodėl taip vėlu?

Maurice: Taip yra dėl aparatinės įrangos apribojimų. „Intel“, „AMD“ ir kitos įmonės labai gerai didina procesoriaus greitį. Kai tam tikru momentu procesoriai tapo pakankamai maži, kad jie nebegalėjo padidinti laikrodžio greičio, nes procesoriai pradėtų perdegti. Galite juos sumažinti, bet ne greičiau. Kas yra jų galioje – vietoje labai mažo procesoriaus į tą patį korpuso tūrį, kur anksčiau tilpdavo tik vienas, tilptų aštuoni, šešiolika ar trisdešimt du procesoriai. Dabar jūs turite daugiagiją ir greitą ryšį tarp jų, nes jie dalijasi talpykla. Tačiau negalima priversti jų bėgti greičiau – yra labai konkretus greičio apribojimas. Jie ir toliau po truputį tobulėja, bet jau ne tiek daug. Fizikos dėsniai trukdė tobulėti.

Naujas pasaulis atneša naujų problemų. NUMA, NVM ir architektūros įsilaužimas

Aleksejus: Skamba labai pagrįstai. Su naujais kelių branduolių procesoriais atsirado naujų problemų. Ar jūs ir jūsų kolegos tikėjotės šių problemų? Galbūt iš anksto juos išstudijavote? Teorinėse studijose tokius dalykus nuspėti dažnai nėra labai lengva. Kada iškilo problemų, kaip jos atitiko jūsų ir kolegų lūkesčius? O gal jie buvo visiškai nauji, o jūs ir jūsų kolegos turėjote praleisti daug laiko spręsdami iškilusias problemas?

Vitalijus: Papildysiu Aleksejaus klausimą: ar teisingai numatėte procesoriaus architektūrą, kai studijavote teoriją?

Maurice: Ne 100%. Bet manau, kad mano kolegos ir aš padarėme gerą darbą numatydami kelių branduolių su bendra atmintimi. Manau, kad teisingai numatėme sunkumus kuriant lygiagrečias duomenų struktūras, veikiančias be užraktų. Tokios duomenų struktūros buvo svarbios daugeliui programų, nors ir ne visoms, bet dažnai tai, ko jums tikrai reikia, yra neužrakinanti duomenų struktūra. Kai mes jas išradome, daugelis ginčijosi, kad tai nesąmonė, kad viskas gerai veikia su spynomis. Gana gerai numatėme, kad bus paruošti sprendimai daugeliui programavimo problemų ir duomenų struktūros problemų. Buvo ir sudėtingesnių problemų, pvz NUMA – netolygi prieiga prie atminties. Tiesą sakant, jie net nebuvo svarstomi, kol nebuvo išrasti kelių branduolių procesoriai, nes jie buvo per daug specifiniai. Mokslininkų bendruomenė dirbo su klausimais, kurie paprastai buvo nuspėjami. Kai kurios techninės įrangos problemos, susijusios su konkrečiomis architektūromis, turėjo palaukti sparnuose – iš tikrųjų šių architektūrų atsiradimas. Pavyzdžiui, niekas iš tikrųjų nedirbo su GPU specifinėmis duomenų struktūromis, nes tada GPU dar nebuvo. Nors buvo padaryta daug darbo SIMD, šie algoritmai buvo paruošti naudoti, kai tik atsirado tinkama aparatinė įranga. Tačiau visko numatyti neįmanoma.

Aleksejus: Jei gerai suprantu, NUMA yra tam tikras kompromisas tarp išlaidų, našumo ir kai kurių kitų dalykų. Turite idėjų, kodėl NUMA pasirodė taip vėlai?

Maurice'as: Manau, kad NUMA egzistuoja dėl problemų, susijusių su aparatine įranga, naudojama atminčiai gaminti: kuo toliau komponentai, tuo lėčiau juos pasiekia. Kita vertus, antroji šios abstrakcijos reikšmė yra atminties vienodumas. Taigi viena iš lygiagretaus skaičiavimo savybių yra ta, kad visos abstrakcijos yra šiek tiek sulaužytos. Jei prieiga būtų visiškai vienoda, visa atmintis būtų vienodu atstumu, bet tai ekonomiškai, o gal net fiziškai, neįmanoma. Todėl ir kyla šis konfliktas. Jei rašysite savo programą taip, lyg atmintis būtų vienoda, greičiausiai ji bus teisinga. Ta prasme, kad nepateiks neteisingų atsakymų. Tačiau jos pasirodymas taip pat nepagaus žvaigždžių iš dangaus. Lygiai taip pat, jei rašote spinlocks Nesuprantant talpyklos hierarchijos, pats blokavimas bus teisingas, tačiau galite pamiršti apie našumą. Tam tikra prasme jūs turite rašyti programas, kurios gyvena ant labai paprastos abstrakcijos, bet jūs turite pergudrauti žmones, kurie jums suteikė tą abstrakciją: jūs turite žinoti, kad po abstrakcija yra tam tikra atminties hierarchija, kad yra autobusas tarp jūsų ir šio prisiminimo ir pan. Taigi tarp individualiai naudingų abstrakcijų kyla tam tikras konfliktas, o tai veda prie labai konkrečių ir pragmatiškų problemų.

Vitalijus: O kaip bus ateityje? Ar galite numatyti, kaip toliau vystysis procesoriai? Yra mintis, kad vienas iš atsakymų yra transakcinė atmintis. Tikriausiai turite dar ką nors sandėlyje.

Maurice'as: Laukia keli dideli iššūkiai. Viena iš jų yra ta, kad nuosekli atmintis yra nuostabi abstrakcija, tačiau ypatingais atvejais ji pradeda gesti. Taigi, pavyzdžiui, NUMA yra gyvas pavyzdys to, kur galite ir toliau apsimesti, kad egzistuoja vienoda atmintis. Tiesą sakant, ne, produktyvumas privers jus verkti. Tam tikru momentu architektai turės atsisakyti vienos atminties architektūros idėjos; jūs negalite apsimesti amžinai. Reikės naujų programavimo modelių, kuriuos būtų pakankamai paprasta naudoti ir kurie būtų pakankamai galingi, kad pagrindinė aparatinė įranga būtų efektyvi. Tai labai sunkus kompromisas, nes jei programišiams parodysite aparatinėje įrangoje iš tikrųjų naudojamą architektūrą, jie išprotės. Tai per daug sudėtinga ir nėra nešiojama. Jei pateiksite per paprastą sąsają, našumas bus prastas. Taigi, norint pateikti naudingų programavimo modelių, taikomų tikrai dideliems kelių branduolių procesoriams, reikės padaryti daug labai sudėtingų kompromisų. Nesu tikras, kad 2000 branduolių kompiuteryje gali programuoti kas nors kitas, išskyrus specialistą. Ir nebent užsiimate labai specializuotu ar moksliniu skaičiavimu, kriptografija ar panašiai – vis tiek visiškai neaišku, kaip tai padaryti teisingai. 

Kita panaši sritis – specializuotos architektūros. Grafikos greitintuvai buvo naudojami ilgą laiką, tačiau jie tapo klasikiniu pavyzdžiu, kaip galite naudoti specializuotą skaičiavimo tipą ir paleisti jį tam skirtame luste. Tai prideda savų iššūkių: kaip bendrauji su tokiu įrenginiu, kaip jį programuoji. Neseniai dirbau su problemomis šioje srityje šalia atminties skaičiavimo. Paimkite nedidelį procesorių ir priklijuokite jį prie didžiulės atminties dalies, kad atmintis veiktų L1 talpyklos greičiu ir tada susisiektų su įrenginiu, pvz. TPU – procesorius įkelia naujas užduotis į jūsų atminties branduolį. Dar vienas įdomus pavyzdys yra tokio pobūdžio duomenų struktūrų ir ryšio protokolų kūrimas. Taigi pasirinktiniai procesoriai ir aparatinė įranga bus tobulinami ilgą laiką.

Aleksejus: O kaip su nepastoviąja atmintimi (nepastovioji atmintis)?

Maurice: O, tai dar vienas puikus pavyzdys! NVM labai pakeis požiūrį į tokius dalykus kaip duomenų struktūros. Nekintama atmintis tam tikra prasme žada tikrai paspartinti. Tačiau tai nepalengvins gyvenimo, nes dauguma procesorių, talpyklų ir registrų vis dar nepastovūs. Kai pradėsite po avarijos, jūsų būsena ir jūsų atminties būsena nebus visiškai tokia pati kaip prieš avariją. Esu labai dėkingas žmonėms, dirbantiems su NVM – mokslininkams dar ilgai užteks ką veikti, bandant išsiaiškinti teisingumo sąlygas. Skaičiavimai yra teisingi, jei jie gali išgyventi avarijos metu, kai prarandamas talpyklų ir registrų turinys, tačiau pagrindinė atmintis lieka nepažeista.

Kompiliatoriai prieš procesorius, RISC ir CISC, bendra atmintis ir pranešimų siuntimas

Vladimiras: Ką manote apie dilemą „kompiliatoriai prieš procesorius“ instrukcijų rinkinio požiūriu? Leiskite paaiškinti tiems, kurie nežino: jei pereitume prie iškreiptos atminties ar panašių dalykų, galėtume naudoti labai paprastą komandų rinkinį ir paprašyti kompiliatoriaus sugeneruoti sudėtingą kodą, kuris galėtų pasinaudoti naujais pranašumais. Arba galime eiti kitu keliu: įgyvendinti sudėtingas instrukcijas ir paprašyti procesoriaus pertvarkyti instrukcijas bei atlikti kitas manipuliacijas su jomis. Ką jūs manote apie tai?

Maurice: Aš tikrai neturiu atsakymo į šį klausimą. Šios diskusijos tęsiasi keturis dešimtmečius. Buvo laikas, kai tarp sutrumpintai komandų rinkinys ir sunku pilietiniai karai buvo kovojami vadovaujant komandoms. Kurį laiką laimėjo RISC žmonės, bet tada „Intel“ perkūrė jų variklius taip, kad viduje buvo naudojamas sumažintas instrukcijų rinkinys, o visas rinkinys buvo eksportuotas išorėje. Tai turbūt tema, kurioje kiekviena nauja karta turi rasti savo kompromisus ir priimti sprendimus. Labai sunku nuspėti, kuris iš šių dalykų bus geresnis. Taigi bet kokia mano prognozė tam tikrą laiką bus teisinga, tada vėl kurį laiką bus klaidinga, o tada vėl teisinga.

Aleksejus: Kaip įprasta pramonei, kad kai kurios idėjos laimi kelis dešimtmečius, o pralaimi per ateinančius? Ar yra kitų tokių periodinių pokyčių pavyzdžių?

Maurice'as: Paskirstytojo skaičiavimo tema yra žmonių, kurie tiki bendra atmintis ir žmonės, kurie tiki pranešimų siuntimas. Iš pradžių paskirstytoje kompiuterijoje lygiagretus skaičiavimas reiškia pranešimo perdavimą. Tada kažkas atrado, kad daug lengviau programuoti naudojant bendrą atmintį. Priešinga pusė teigė, kad bendra atmintis yra per sudėtinga, nes jai reikia spynų ir panašiai, todėl verta pereiti prie kalbų, kuriose nieko, išskyrus pranešimų perdavimą, tiesiog nėra. Kažkas pažiūrėjo, kas iš to išėjo, ir pasakė: „Oho, ši pranešimų siuntimo įgyvendinimas labai panašus į bendrą atmintį, nes jūs sukuriate daugybę šių mažų modulių, jie siunčia žinutes vieni kitiems ir visi blokuoti„Sukurkime geresnę bendros atminties duomenų bazę! Visa tai kartojasi vėl ir vėl, ir negalima teigti, kad viena iš šalių tikrai teisi. Viena pusė visada dominuos, nes kai tik viena iš jų beveik laimi, žmonės vėl ir vėl sugalvoja būdų, kaip patobulinti kitą.

Trapaus daugiasriegio kodo rašymo menas

Aleksejus: Tai labai įdomu. Pavyzdžiui, kai rašome kodą, nesvarbu, kokia programavimo kalba, paprastai turime sukurti abstrakcijas, tokias kaip langeliai, kuriuos galima skaityti ir rašyti. Tačiau iš tikrųjų tam tikru fiziniu lygmeniu tai gali atrodyti kaip pranešimo siuntimas per aparatinės įrangos magistralę tarp skirtingų kompiuterių ir kitų įrenginių. Pasirodo, darbas vyksta abiejuose abstrakcijos lygiuose vienu metu.

Maurice: Visiškai tiesa, kad bendroji atmintis yra sukurta perduodant pranešimus – autobusus, talpyklas ir pan. Tačiau sunku rašyti programas naudojant pranešimų perdavimą, todėl aparatinė įranga tyčia meluoja, apsimeta, kad turite kažkokią vienodą atmintį. Taip galėsite lengviau rašyti paprastas, teisingas programas, kol jų našumas nepradės prastėti. Tada sakysite: atrodo, kad laikas susidraugauti su talpykla. Tada pradedi nerimauti dėl talpyklos vietos, o iš ten ji eina. Tam tikra prasme jūs įsilaužate į abstrakciją: žinote, kad tai nėra tik plokščia, vienoda atmintis, ir šias žinias panaudosite kurdami talpyklą palaikančias programas. Štai ką turėsite padaryti esant tikroms problemoms. Šis konfliktas tarp mielos, paprastos, gražios abstrakcijos ir siaubingai sudėtingo pagrindinės techninės įrangos įgyvendinimo yra ta vieta, kur kiekvienas padarys savo kompromisą. Turiu knygą apie kelis procesorius ir sinchronizavimą ir vienu metu ketinau parašyti skyrių apie duomenų struktūras java.util.concurrent. Jei pažvelgsite į juos, tokie dalykai kaip sąrašai su praleidimais Tai nuostabūs meno kūriniai. (Redaktoriaus pastaba: Tie, kurie yra susipažinę su Java kalba, turėtų bent pažvelgti į diegimą ConcurrentSkipListMap, galite pažiūrėti nuorodas API и pirminis kodas). Tačiau, mano požiūriu, būtų neatsakinga juos rodyti studentams, nes tokia duomenų struktūra yra tarsi vaikinas cirke, bėgiojantis lynu virš meškos duobės. Jei pakeisite nors vieną smulkmeną, sugrius visa konstrukcija. Šis kodas yra labai greitas ir elegantiškas vien todėl, kad parašytas tobulai, tačiau menkiausias pakeitimas sukels visišką nesėkmę. Jei pateiksiu šį kodą kaip pavyzdį studentams, jie iš karto pasakys: aš taip pat galiu! Ir tada nukris koks nors lėktuvas arba sprogs branduolinis reaktorius, ir aš būsiu kaltas, kad per daug informacijos jiems pateikiau netinkamu metu.

Aleksejus: Kai buvau šiek tiek jaunesnis, daug kartų bandžiau studijuoti Dougo Lee šaltinio kodą, pavyzdžiui, java.util.concurrent, kadangi tai atvirojo kodo, labai lengva rasti ir pabandyti suprasti, kas ten vyksta. Tai nepasirodė labai gerai: dažnai visiškai neaišku, kodėl Dougas nusprendė kažką daryti taip, kai visi kiti tai daro kitaip. Kaip šiuos dalykus paaiškinate savo mokiniams? Ar yra koks nors konkretus teisingas būdas apibūdinti, pavyzdžiui, konkrečias sudėtingo algoritmo detales? Kaip tai padaryti?

Maurice'as: Piešimo mokytojai turi klišę, kurią pirmiausia atsimena: jei nori piešti kaip Pikasas, pirmiausia reikia išmokti piešti paprastus tikroviškus paveikslus ir tik žinant taisykles galima pradėti jas laužyti. Jei iškart pradėsite pažeidinėti taisykles, atsidursite netvarkoje. Pirma, aš moku studentus, kaip parašyti paprastą, teisingą kodą, nesijaudinant dėl ​​našumo. Aš sakau, kad čia slypi sudėtingos laiko nustatymo problemos, todėl nesijaudinkite dėl talpyklų, nesijaudinkite dėl atminties modelių, tiesiog įsitikinkite, kad viskas veikia tinkamai. Tai jau pakankamai sunku: modernus programavimas savaime nėra lengvas, ypač naujiems studentams. Ir kai jie turi intuiciją, kaip parašyti tinkamas programas, sakau: pažiūrėkite į šiuos du „spinlock“ diegimus: vienas yra labai lėtas, o antrasis taip pat nėra labai, bet geresnis. Tačiau matematiškai abu algoritmai yra vienodi. Tiesą sakant, vienas iš jų naudoja talpyklos vietą. Vienas iš jų veikia naudojant vietinius talpyklos duomenis, o kitas pakartotinai atlieka operacijas visoje magistralėje. Negalite parašyti efektyvaus kodo, jei nesuprantate, kas tai yra, ir nežinote, kaip nutraukti abstrakciją ir pažvelgti į pagrindinę struktūrą. Bet jūs negalėsite pradėti to daryti iš karto. Yra žmonių, kurie tai pradeda daryti iš karto ir tiki savo genialumu, dažniausiai tai baigiasi blogai, nes nesuvokia principų. Niekas piešia taip, kaip Pikasas, ir nerašo tokių programų kaip Dougas Lee, ką tik baigęs koledžą pirmą savaitę. Norint pasiekti tokį žinių lygį, prireikia metų.

Aleksejus: Pasirodo, problemą padalijate į dvi dalis: pirmoji – teisingumas, antroji – atlikimas?

Maurice: Būtent. Ir būtent tokia tvarka. Dalis problemos yra ta, kad nauji mokiniai nesupranta, kad teisingumą pasiekti sunku. Iš pirmo žvilgsnio jie sako: tai akivaizdžiai teisinga, belieka tai paspartinti. Todėl kartais aš jiems pasakoju apie iš pradžių neteisingą algoritmą, tarsi jis būtų teisingas.

Kaip išmokyti studentus rašyti sudėtingą daugiagijų kodą

Aleksejus: Tik norėdami pamatyti, ar jie gali pajusti laimikį?

Maurice: Aš visada iš anksto įspėju, kad kartais pasiūlysiu neteisingus algoritmus. Jūs neturėtumėte apgaudinėti žmonių. Siūlau jiems informaciją priimti su druska. Jei aš ką nors sakau ir sakau: „žiūrėk, tai akivaizdžiai teisinga“ - tai signalas, kad kažkur jie bando jus apgauti, ir jūs turėtumėte pradėti klausinėti. Toliau stengiuosi paskatinti mokinius nuolat kelti klausimus, o tada siūlau: „Kas bus, jei paliksime viską taip, kaip yra? Ir jie iškart pamato klaidą. Tačiau įtikinti mokinius, kad jiems reikia susirūpinti teisingumu, yra sunkiau, nei atrodo iš pirmo žvilgsnio. Daugelis šių studentų turi programavimo patirties vidurinėje mokykloje, kai kurie ten įsidarbino ir programavo, ir jie visi kupini pasitikėjimo savimi. Tai kažkas panašaus į armiją: pirmiausia turite pakeisti jų nuotaiką, kad įtikintumėte juos kantriai spręsti kylančias problemas. O gal tai panašu į budistų vienuolių: pirmiausia jie išmoksta samprotauti apie teisingumą, o kai supranta teisingumo samprotavimo būdus, jiems leidžiama pereiti į kitą lygį ir pradėti nerimauti dėl veiklos rezultatų.

Aleksejus: Tai yra, kartais rodote studentams neveikiančius pavyzdžius, kurių dėka gaunate grįžtamąjį ryšį, parodantį, ar jie supranta problemos esmę, ar gali rasti netinkamą kodą ir neteisingą rezultatą. Taigi, studentai dažniausiai jus džiugina ar liūdina?

Maurice: Studentai beveik visada galiausiai suranda klaidą. Jei jie ieško per lėtai, aš užduodu pagrindinius klausimus, ir čia svarbu suprasti, kad jei niekada jų neapgausite, jie pradės be proto suvokti jūsų žodžius kaip galutinę tiesą. Tada jie nusibosta ir pradės užmigti skaitydami „Facebook“ nešiojamajame per pamoką. Bet kai iš anksto pasakai, kad jie bus apgauti, ir jie atrodys kvailai, jei nepajus gudrybės, jie tampa daug budresni. Tai gerai įvairiais būdais. Norėčiau, kad mokiniai ne tik abejotų savo supratimu šiuo klausimu, bet ir suabejotų mokytojo autoritetu. Idėja tokia, kad studentas gali bet kada pakelti ranką ir pasakyti: manau, kad tai, ką ką tik pasakėte, yra neteisinga. Tai svarbi mokymosi priemonė. Nenoriu, kad kuris nors iš studentų sėdėtų ir tyliai mąstytų: visa tai atrodo visiška nesąmonė, bet pakelti ranką per baisu, o šiaip jis profesorius, todėl viskas, ką jis sako, yra tiesa. Todėl iš anksto įspėjami, kad ne viskas, kas pasakyta, būtinai yra tiesa, atsiranda paskata daugiau dėmesio skirti medžiagai. Aš aiškiai pasakau, kad galima pakelti ranką ir užduoti klausimus. Jūsų klausimas gali skambėti kvailai ar naiviai, bet dažnai taip iškyla patys geriausi klausimai.

Aleksejus: Labai įdomu. Dažniausiai žmonės turi kažkokį psichologinį barjerą, kuris neleidžia užduoti klausimo profesoriui. Ypač jei salėje daug žmonių ir visi bijo, kad jūsų kvailo klausimo aptarimas atims visų šių žmonių laiką. Ar yra kokių nors gudrybių, kaip su tuo susidoroti?

Maurice: Aš dažnai sustoju ir užduodu klasikinius klausimus. Ar teiginys būtų teisingas, ar kaip jie išspręstų aptariamą problemą. Tai yra pagrindinis veiksmas, ypač pamokos pradžioje, kai žmonėms gėda pasakyti net menkiausią dalyką. Jūs užduodate studentams klausimą ir daugiau nieko nesate. Tyla, visi šiek tiek įsitempia, įtampa auga, tada staiga kažkas negali pakęsti, palūžta ir pasako atsakymą. Taip apverčiate situaciją: toliau tylėti tampa sunkiau ir nepatogu nei atsakyti! Tai standartinis pedagoginis triukas. Kiekvienas mokytojas pasaulyje turėtų žinoti, kaip tai padaryti.

Aleksejus: Dabar turime puikų šio interviu pavadinimą: „lengviau atsakyti nei tylėti“.

Vitalijus: Leisk dar kartą paklausti. Jūs dirbate su topologiniais įrodymais. Kaip jūs į tai įsitraukėte, nes paskirstytasis skaičiavimas ir topologija yra visiškai skirtingi dalykai!

Maurice: Čia yra paslėptas ryšys. Kai buvau studentas ir studijavau matematiką, mokiausi grynosios matematikos. Kompiuteriais tikrai nesidomėjau, kol nepasibaigiau studijoms ir susidūriau su neatidėliotinu poreikiu ieškotis darbo. Būdamas studentas studijavau algebrinę topologiją. Po daugelio metų, dirbdamas su problema, vadinama „k-Set susitarimo problema“, naudojau grafikus problemai modeliuoti ir, kaip tuo metu atrodė, radau sprendimą. Reikėjo tik atsisėsti ir apeiti grafą. Pabandykite rasti tinkamą atsakymą šioje diagramoje. Bet mano algoritmas neveikė: paaiškėjo, kad jis amžinai bėgs ratu. Deja, viso to nepavyko paaiškinti formalia grafų teorijos kalba – ta, kurią žino visi informatikai. Ir tada aš prisiminiau, kad prieš daugelį metų, dar topologijos pamokose, mes naudojome šią sąvoką "paprastas kompleksas", kuris yra grafikų apibendrinimas į aukštesnius matmenis. Tada paklausiau savęs: kas nutiktų, jei problemą suformuluotume supaprastintais kompleksais? Tai tapo pagrindiniu momentu. Naudojant galingesnį formalizmą, problema staiga tampa daug paprastesnė. Žmonės ilgą laiką prieš tai kovojo, naudodamiesi grafikais, bet nieko negalėjo padaryti. Ir net dabar jie negali - teisingas atsakymas pasirodė ne algoritmas, o įrodymas, kad problemos neįmanoma išspręsti. Tai yra, tokio algoritmo tiesiog nėra. Bet kiekvienas neįmanomumo įrodymas pagrįstas paprastais kompleksais arba dalykais, kurių žmonės apsimetė nelaikantys paprastais kompleksais. Vien todėl, kad ką nors vadini nauju vardu, tai nepraranda savo esmės.

Vitalijus: Pasirodo, tau tiesiog pasisekė?

Maurice: Be sėkmės, tai taip pat pasirengimą. Tai reiškia, kad neturėtumėte pamiršti „nenaudingų“ dalykų, kuriuos išmokote anksčiau. Kuo daugiau nenaudingų dalykų išmoksite, tuo daugiau idėjų galėsite išgauti susidūrę su nauja problema. Toks intuityvus modelių derinimas yra svarbus, nes... Padarykime taip, tai grandinė: iš pradžių atradau, kad grafikai visai neveikia arba neveikia, tai priminė kažką iš aštuntų įvykių prieš metus ir mano studijų metais, kai studijavome visus šiuos paprastus kompleksus. Tai savo ruožtu leido man rasti savo seną topologijos vadovėlį ir įkelti jį atgal į galvą. Bet jei ne tos senos žinios, niekada nebūčiau padaręs jokios pažangos spręsdamas pirminę problemą.

Naujas knygos „Daugiaprocesorinio programavimo menas“ leidimas

Aleksejus: Jūs pasakėte keletą žodžių apie savo knygą. Tikriausiai ne pati blogiausia paslaptis, kad parašėte garsiausią pasaulyje knygą apie daugiagiją, „Kelių procesorių programavimo menas“. Jai jau apie 11 metų ir nuo tada tik išleista  pataisytas pakartotinis leidimas. Ar bus antras leidimas?

Maurice: Gerai, kad paklausei! Tai bus labai greitai, maždaug po trijų mėnesių. Yra dar du autoriai, mes pridėjome daug daugiau medžiagos, patobulinome skyrių apie šakės/prisijungimo lygiagretumą, parašėme skyrių MapReduce, pridėjome daug naujų dalykų ir išmetėme nereikalingus dalykus – tai, kas buvo labai įdomu rašymo metu pirmasis leidimas, bet šiandien jo nebėra. Rezultatas buvo labai rimtai peržiūrėta knyga.

Aleksejus: Viskas jau padaryta, belieka tai išleisti?

Maurice'as: Keletą skyrių dar reikia šiek tiek padirbėti. Mūsų leidėjas (kuris, manau, jau mūsų nekenčia) vis dar bando perteikti žinią, kad turėtume dirbti greičiau. Mes gerokai atsiliekame nuo grafiko. Teoriškai šią knygą galėjome padaryti pora metų anksčiau.

Aleksejus: Ar yra galimybė iki Kalėdų gauti naują knygos versiją?

Maurice: Tai mūsų tikslas! Bet aš tiek kartų pranašavau pergalę, kad niekas manimi nebetiki. Tikriausiai neturėtumėte per daug pasitikėti manimi šiuo klausimu.

Aleksejus: Bet kokiu atveju tai yra puiki žinia. Man labai patiko pirmasis knygos leidimas. Galima sakyti, kad esu gerbėjas.

Maurice: Tikiuosi, kad naujasis leidimas bus vertas jūsų karšto entuziazmo, ačiū!

Kaip buvo sukurta transakcinė atmintis

Vitalijus: Kitas klausimas yra apie transakcinę atmintį. Kiek suprantu esi šios srities pradininkas, sugalvojai tais laikais, kai apie tokius dalykus niekas negalvojo. Kodėl nusprendėte pereiti į šią sritį? Kodėl sandoriai jums atrodė svarbūs? Ar manėte, kad kada nors jie bus įdiegti aparatinėje įrangoje?

Maurice'as: Apie sandorius žinojau nuo tada, kai baigiau studijas.

Vitalijus: Taip, bet tai skirtingi sandoriai!

Maurice'as: Dirbau su Elliott Moss dėl neblokuojančių šiukšlių surinkimo. Mūsų problema buvo ta, kad norėjome atomiškai pakeisti keletą žodžių atmintyje ir tada algoritmai taptų labai paprasti, o bent kai kurie iš jų taptų efektyvesni. Naudojant palyginkite ir pakeiskiteload-link/store-conditionalnumato paralelinė architektūra, galima ką nors padaryti, bet tai labai neefektyvu ir negražu, nes tektų susidurti su netiesioginių sluoksnių. Noriu pakeisti atminties žodžius ir turiu perjungti, nes galiu pakeisti tik vieną žymeklį, todėl jie turi nukreipti į kažkokią į katalogą panašią struktūrą. Kalbėjomės apie tai, kaip būtų puiku, jei galėtume pakeisti aparatinę įrangą, kad ji galėtų vienu metu įrašyti. Panašu, kad Elliottas tai pastebėjo: jei pažvelgsite į talpyklos suderinamumo protokolus, jie jau suteikia didžiąją dalį reikalingų funkcijų. Optimistinio sandorio metu talpyklos suderinamumo protokolas pastebės, kad yra laiko konfliktas ir talpykla taps negaliojantis. Kas atsitiks, jei spekuliatyviai vykdysite operaciją talpykloje ir naudosite suderinamumo protokolo mechanizmus konfliktams aptikti? Spekuliatyvią techninės įrangos architektūrą buvo lengva sukurti. Taigi mes parašėme tą pati pirmoji publikacija apie transakcinę atmintį. Tuo pat metu įmonė, kurioje dirbau, „Digital Equipment Corporation“, kūrė naują 64 bitų procesorių pavadinimu „Alpha“. Taigi nuėjau ir pristačiau Alpha kūrimo grupei apie mūsų nuostabią operacijų atmintį ir jie paklausė: kiek papildomų pajamų mūsų įmonė gautų, jei visa tai pridėtume tiesiai prie procesoriaus? Ir aš visiškai neturėjau atsakymo į tai, nes esu technologas, nesu rinkodaros specialistas. Tikrai neturėjau ką atsakyti. Jie nebuvo labai sužavėti, kad aš nieko nežinojau.

Vitalijus: Milijardai! Tiesiog pasakyk milijardus!

Morisas: Taip, aš turėjau tai pasakyti. Dabar, startuolių ir visko amžiuje, žinau, kaip rašyti verslo planą. Kad galite šiek tiek pameluoti apie savo galimo pelno dydį. Bet tais laikais tai atrodė naivu, todėl tiesiog pasakiau: „Nežinau“. Jei pažvelgtumėte į leidinio apie transakcinę atmintį istoriją, pastebėtumėte, kad po metų buvo keletas nuorodų į jį, o tada apie dešimt metų niekas šio dokumento visai necitavo. Citatos pasirodė apie 2004 m., kai pasirodė tikri daugiagysliai. Kai žmonės sužinojo, kad lygiagretaus kodo rašymas gali užsidirbti pinigų, prasidėjo nauji tyrimai. Ravi Rajwar parašė straipsnį, kuris tam tikru būdu įvedė transakcinės atminties sąvoką į pagrindinę kryptį. (Redaktoriaus pastaba: yra antra šio straipsnio versija, išleista 2010 m. ir laisvai prieinama kaip PDF). Staiga žmonės suprato, kaip tiksliai visa tai galima panaudoti, kaip paspartinti tradicinius algoritmus su užraktais. Puikus pavyzdys to, kas anksčiau atrodė kaip tik įdomi akademinė problema. Ir taip, jei tuo metu būtumėte manęs paklausę, ar aš manau, kad visa tai bus svarbu ateityje, būčiau sakęs: žinoma, bet kada tiksliai – neaišku. Gal po 50 metų? Praktiškai tai pasirodė tik dešimtmetis. Labai malonu, kai kažką darai ir vos po dešimties metų žmonės tai pastebi.

Kodėl verta atlikti tyrimus paskirstytojo skaičiavimo srityje

Vitalijus: Jei kalbėtume apie naujus tyrimus, ką patartumėte skaitytojams – paskirstytą skaičiavimą ar kelių branduolių ir kodėl? 

Maurice'as: Šiais laikais nesunku gauti kelių branduolių procesorių, bet sunkiau sukurti tikrą paskirstytą sistemą. Pradėjau dirbti su jais, nes norėjau padaryti kažką kitokio nei mano doktorantūros darbas. Tai yra patarimas, kurį visada duodu naujiems studentams: nerašykite savo baigiamojo darbo tęsinio – pabandykite eiti nauja kryptimi. Be to, daugiasriegis siūlas yra lengvas. Galiu eksperimentuoti su savo šakute, veikiančia ant nešiojamojo kompiuterio, nepakildamas iš lovos. Bet jei staiga norėčiau sukurti tikrą paskirstytą sistemą, turėčiau daug dirbti, pritraukti studentų ir pan. Esu tingus žmogus ir mieliau dirbu su kelių branduolių sistema. Eksperimentuoti su kelių branduolių sistemomis taip pat lengviau nei eksperimentuoti su paskirstytomis sistemomis, nes net ir kvailoje paskirstytoje sistemoje yra per daug veiksnių, kuriuos reikia kontroliuoti.

Vitalijus: Ką tu dabar veiki, tyrinėji blockchain? Į kuriuos straipsnius pirmiausia reikėtų atkreipti dėmesį?

Maurice: Neseniai pasirodė labai geras straipsnis, kurį parašiau kartu su savo mokiniu Vikramu Sarafu, specialiai pokalbiui adresu Tokenomcs konferencija Paryžiuje prieš tris savaites. Tai straipsnis apie praktines paskirstytas sistemas, kuriame siūlome Ethereum padaryti daugiasriegiu. Šiuo metu išmaniosios sutartys (kodas, veikiantis blokų grandinėje) vykdomos nuosekliai. Anksčiau parašėme straipsnį, kuriame buvo kalbama apie būdą, kaip panaudoti spekuliacinius sandorius procesui paspartinti. Daug idėjų pasisėmėme iš programinės įrangos operacijų atminties ir sakėme, kad jei šias idėjas padarysite virtualios mašinos Etherium dalimi, viskas veiks greičiau. Tačiau tam būtina, kad sutartyse nebūtų duomenų prieštaravimų. Ir tada manėme, kad realiame gyvenime tokių konfliktų tikrai nėra. Bet niekaip negalėjome sužinoti. Tada mums pasirodė, kad turime beveik dešimtmetį tikrosios sutarčių istorijos, todėl išmetėme Ethereum blokų grandinę ir paklausėme savęs: kas nutiktų, jei šie istoriniai įrašai būtų vykdomi lygiagrečiai? Pastebėjome žymiai padidintą greitį. Pirmosiomis Ethereum dienomis greitis labai išaugo, tačiau šiandien viskas yra šiek tiek sudėtingiau, nes sutarčių mažiau ir konfliktų dėl duomenų, kuriems reikia serializuoti, tikimybė išaugo. Bet visa tai yra eksperimentinis darbas su tikrais istoriniais duomenimis. Puikus blokų grandinės dalykas yra tai, kad ji viską prisimena amžinai, todėl galime grįžti į praeitį ir ištirti, kas būtų nutikę, jei kodui paleisti būtume panaudoję skirtingus algoritmus. Kaip žmonėms praeityje patiko mūsų nauja idėja? Tokį tyrimą atlikti daug lengviau ir maloniau, nes yra daiktas, kuris viską stebi ir viską fiksuoja. Tai jau kažkas panašesnio į sociologiją nei į algoritmų kūrimą.

Ar sustojo algoritmų kūrimas ir kaip judėti toliau?

Vitalijus: Laikas paskutiniam teoriniam klausimui! Ar atrodo, kad konkurencinių duomenų struktūrų pažanga kasmet mažėja? Ar manote, kad pasiekėme duomenų struktūrų supratimo plynaukštę, ar bus kokių nors esminių patobulinimų? Gal yra kokių gudrių idėjų, kurios gali viską visiškai pakeisti?

Maurice'as: Galbūt pasiekėme tradicinių architektūrų duomenų struktūrų plokščiakalnį. Tačiau naujų architektūrų duomenų struktūros vis dar yra labai perspektyvi sritis. Jei norite sukurti duomenų struktūras, tarkime, aparatūros greitintuvams, GPU duomenų struktūros labai skiriasi nuo procesoriaus duomenų struktūrų. Kai kuriate duomenų struktūras blokų grandinėms, turite sumaišyti duomenų dalis ir įdėti juos į kažką panašaus į Merkle medis, kad būtų išvengta padirbinėjimo. Pastaruoju metu šioje srityje suaktyvėjo aktyvumas, daugelis dirba labai gerus darbus. Bet aš manau, kad atsitiks tai, kad naujos architektūros ir naujos programos sukurs naujas duomenų struktūras. Pasenusios programos ir tradicinė architektūra – gali nebelikti daug vietos tyrinėjimui. Bet jei nukrypsite nuo praminto kelio ir pažvelgsite už kraštų, pamatysite beprotiškus dalykus, į kuriuos pagrindinis srautas nežiūri rimtai – čia iš tikrųjų vyksta visi įdomūs dalykai.

Vitalijus: Todėl, kad būčiau labai garsus tyrinėtojas, turėjau sugalvoti savo architektūrą :)

Maurice: Galite „pavogti“ kažkieno naują architektūrą – atrodo, kad tai daug lengviau!

Darbas Browno universitete

Vitalijus: Ar galėtum papasakoti plačiau Browno universitetaskur tu dirbi? Informacinių technologijų kontekste apie jį mažai žinoma. Pavyzdžiui, mažiau nei apie MIT.

Maurice'as: Browno universitetas yra vienas seniausių universitetų JAV. Manau, kad tik Harvardas yra šiek tiek vyresnis. Ruda yra dalis vadinamųjų Ivy lyga, kuri yra aštuonių seniausių universitetų kolekcija. Harvardas, Brownas, Kornelis, Jeilis, Kolumbija, Dartmutas, Pensilvanija, Prinstonas. Tai kažkoks senas, mažas ir šiek tiek aristokratiškas universitetas. Didžiausias dėmesys skiriamas laisvųjų menų ugdymui. Tai nesistengia būti kaip MIT, MIT yra labai specializuotas ir techninis. Brownas yra puiki vieta studijuoti rusų literatūrą ar klasikinę graikų kalbą ir, žinoma, kompiuterių mokslą. Jame pagrindinis dėmesys skiriamas visapusiškam ugdymui. Dauguma mūsų studentų lanko „Facebook“, „Apple“, „Google“, todėl manau, kad mūsų studentams nėra problemų susirasti darbą pramonėje. Įstojau dirbti į Browną, nes anksčiau dirbau „Digital Equipment Corporation“ Bostone. Tai buvo įmonė, kuri išrado daug įdomių dalykų, tačiau neigė asmeninių kompiuterių svarbą. Sunkaus likimo įmonė, kurios įkūrėjai kadaise buvo jauni revoliucionieriai, jie nieko neišmoko ir nieko nepamiršo, todėl per maždaug keliolika metų iš revoliucionierių tapo reakcionieriais. Jie mėgo juokauti, kad asmeniniai kompiuteriai priklauso garaže – žinoma, apleistame garaže. Visiškai akivaizdu, kad juos sunaikino lankstesnės įmonės. Kai paaiškėjo, kad įmonė turi bėdų, paskambinau savo draugui į Brauną, kuris yra maždaug už valandos nuo Bostono. Tuo metu nenorėjau išvykti iš Bostono, nes kituose universitetuose nebuvo daug darbo vietų. Tai buvo laikas, kai kompiuterių mokslo srityje nebuvo tiek daug darbo vietų, kiek yra dabar. Ir Brownas atsidarė, man nereikėjo kraustytis namų, nereikėjo perkelti savo šeimos, ir man labai patinka gyventi Bostone! Taip ir nusprendžiau eiti į Browną. Man tai patinka. Mokiniai nuostabūs, todėl niekada net nebandžiau eiti kur nors kitur. Per atostogas metus dirbau „Microsoft“, metams išvykau į „Technion“ Haifoje, o dabar dirbsiu „Algorand“. Visur turiu daug kolegų, todėl fizinė mūsų klasių vieta nėra tokia svarbi. Bet svarbiausia – studentai, jie čia patys geriausi. Niekada nebandžiau važiuoti kitur, nes čia esu labai laimingas.

Tačiau nepaisant Browno šlovės JAV, jis stebėtinai nežinomas užsienyje. Kaip matote, dabar darau viską, kas įmanoma, kad ištaisyčiau šią padėtį.

Skirtumas tarp tyrimų universitete ir korporacijoje

Vitalijus: Gerai, kitas klausimas yra apie skaitmeninę įrangą. Jūs ten buvote kaip tyrinėtojas. Kuo skiriasi darbas didelės įmonės MTEP skyriuje nuo darbo universitete? Kokie privalumai ir trūkumai?

Maurice'as: Dvidešimt metų dirbau „Microsoft“, glaudžiai dirbau su „Sun Microsystems“, „Oracle“, „Facebook“ ir dabar „Algorand“ darbuotojais. Remdamasis visu tuo noriu pasakyti, kad atlikti aukščiausios klasės tyrimus galima ir įmonėse, ir universitetuose. Svarbus skirtumas tas, kad įmonėje dirbi su kolegomis. Jei staiga turiu idėją projektui, kurio dar nėra, privalau įtikinti savo bendraamžius, kad tai gera idėja. Jei dirbu Browne, galiu pasakyti savo mokiniams: dirbkime su antigravitacija! Jie arba išvyks pas ką nors kitą, arba imsis projekto. Taip, reikės susirasti finansavimą, reikės parašyti paraišką dotacijai gauti ir pan. Bet kokiu atveju studentų visada bus daug, o sprendimus galėsite priimti vienašališkai. Tačiau universitete greičiausiai nedirbsi su savo lygio žmonėmis. Pramoninių tyrimų pasaulyje pirmiausia turite įtikinti visus, kad jūsų projektas yra vertas. Niekam nieko negaliu užsakyti. Ir abu šie darbo būdai yra vertingi, nes jei dirbi kažką tikrai beprotiško, o kolegas sunku įtikinti, magistrantus įtikinti lengviau – ypač jei jiems mokate. Jei dirbate tai, kas reikalauja daug patirties ir gilių žinių, jums reikia kolegų, kurie galėtų pasakyti „ne, taip atsitiko, kad aš suprantu šią sritį ir jūsų idėja bloga, ji neveiks“. Tai labai naudinga norint gaišti laiką. Be to, jei pramoninėse laboratorijose daug laiko praleidžiate rašydami ataskaitas, tai universitete šį laiką praleidžiate bandydami rasti pinigų. Jei noriu, kad studentai galėtų kur nors išvykti, pinigų tam turiu rasti kitur. Ir kuo svarbesnė jūsų padėtis universitete, tuo daugiau laiko turėsite skirti pinigų rinkimui. Taigi dabar jūs žinote, ką aš dirbu – profesionalus elgeta! Kaip vienas iš tų vienuolių, kurie vaikšto su aukojimo lėkšte. Apskritai šios dvi veiklos viena kitą papildo. Todėl stengiuosi gyventi ir laikyti kojas ant žemės abiejuose pasauliuose.

Vitalijus: Atrodo, kad įtikinti įmonę yra sunkiau nei kitus mokslininkus.

Maurice: Sunkiau ir daug daugiau. Be to, įvairiose srityse ji skiriasi: vieni atlieka pilno masto tyrimus, kiti susitelkia į savo temą. Jei nueičiau į „Microsoft“ ar „Facebook“ ir pasakyčiau: padarykime antigravitaciją, vargu ar jie tai įvertintų. Bet jei lygiai tą patį pasakyčiau savo abiturientams, jie greičiausiai akimirksniu pradėtų dirbti, nors dabar turėčiau problemų – juk reikia tam rasti pinigų. Tačiau tol, kol norite daryti kažką, kas atitinka įmonės tikslus, ta įmonė gali būti labai gera vieta atlikti tyrimus.

Hidra ir SPTDC

Vitalijus: Mano klausimai eina į pabaigą, tad pakalbėkime šiek tiek apie būsimą kelionę į Rusiją.

Morisas: Taip, nekantriai laukiu sugrįžimo į Sankt Peterburgą.

Aleksejus: Man garbė šiais metais būti su mumis. Sankt Peterburge jūs jau antrą kartą, tiesa?

Morisas: Jau trečias!

Aleksejus: Suprantu, bet SPTDC – tikrai antrasis. Paskutinį kartą skambino mokykla SPTCC, dabar pakeitėme vieną raidę (C į D, Concurrent to Distributed), kad pabrėžtume, kad šiais metais yra daugiau sričių, susijusių su paskirstytu skaičiavimu. Ar galite pasakyti keletą žodžių apie savo ataskaitas Mokykloje ir Hidros konferencija?

Maurice'as: Mokykloje noriu pakalbėti apie „blockchain“ pagrindus ir tai, ką galite su ja padaryti. Norėčiau parodyti, kad blokų grandinės yra labai panašios į mums pažįstamą kelių gijų programavimą, tačiau turi savo niuansų, ir šiuos skirtumus svarbu suprasti. Jei padarote klaidą įprastoje žiniatinklio programoje, tai tiesiog erzina. Jei finansinėje programoje parašysite klaidingą kodą, kažkas tikrai pavogs visus jūsų pinigus. Tai visiškai skirtingi atsakomybės lygiai ir pasekmės. Šiek tiek pakalbėsiu apie darbo įrodymą, apie išmaniąsias sutartis, apie sandorius tarp skirtingų blokų grandinių.

Šalia manęs dirbs kiti pranešėjai, kurie taip pat turi ką pasakyti apie blockchain, ir mes sutarėme derinti tarpusavyje, kad mūsų istorijos gerai derėtų. Tačiau inžinerinei ataskaitai noriu plačiajai auditorijai pateikti suprantamą paaiškinimą, kodėl neturėtumėte tikėti viskuo, ką girdite apie blokų grandines, kodėl blokų grandinės yra puiki sritis, kaip tai dera su kitomis žinomomis idėjomis ir kodėl turėtume drąsiai ieškoti į ateitį.

Aleksejus: Be to, noriu pasakyti, kad tai nevyks susitikimo ar vartotojų grupės formatu, kaip buvo prieš dvejus metus. Prie mokyklos nusprendėme surengti nedidelę konferenciją. Priežastis ta, kad pabendravę su Petru Kuznecovu supratome, kad mokykla apsiriboja tik šimtu, gal 120 žmonių. Tuo pačiu metu yra daug inžinierių, kurie nori su jumis bendrauti, dalyvauti pristatymuose ir apskritai domisi šia tema. Dėl šios priežasties sukūrėme naują konferenciją vadinama Hidra. Beje, turite idėjų, kodėl Hydra?

Mauricas: Nes bus septyni pranešėjai? O jų galvas gali nukirsti, o vietoj jų išaugs nauji garsiakalbiai?

Aleksejus: Puiki idėja auginti naujus garsiakalbius. Bet iš tikrųjų čia yra istorija. Prisiminkite legendą apie Odisėją, kur jis turėjo plaukti tarp jų Scylla ir Charybdis? Hidra yra kažkas panašaus į Charybdę. Istorija tokia, kad kartą aš kalbėjau konferencijoje ir kalbėjau apie daugiasriegius ryšius. Šioje konferencijoje buvo tik du kūriniai. Pranešimo pradžioje sakiau auditorijai salėje, kad dabar jie turi pasirinkimą tarp Scilės ir Charybdės. Mano dvasinis gyvūnas yra Charybdis, nes Charybdis turi daug galvų, o mano tema yra daugiagija. Taip atsiranda konferencijų pavadinimai.

Bet kokiu atveju pritrūkome klausimų ir laiko. Taigi, ačiū jums, draugai, už puikų interviu ir iki susitikimo SPTDC mokykloje ir „Hydra 2019“!

Pokalbį su Maurice galite tęsti konferencijoje „Hydra 2019“, kuri vyks 11 metų liepos 12-2019 dienomis Sankt Peterburge. Jis ateis su ataskaita „Blockchains ir paskirstytojo skaičiavimo ateitis“. Bilietus galima įsigyti oficialioje svetainėje.

Šaltinis: www.habr.com

Добавить комментарий