„Łatwiej jest odpowiedzieć niż milczeć” – świetny wywiad z ojcem pamięci transakcyjnej Maurice Herlihy

Maurice'a Herlihy'ego - właściciel dwóch Nagrody Dijkstry. Pierwsza przeznaczona jest do pracy „Synchronizacja bez czekania” (Brown University) i drugi, nowszy, - „Pamięć transakcyjna: wsparcie architektoniczne dla struktur danych bez blokad” (Uniwersytet Techniczny w Wirginii). Nagroda Dijkstry przyznawana jest za prace, których znaczenie i wpływ są widoczne od co najmniej dziesięciu lat, a Maurice jest oczywiście jednym z najbardziej znanych specjalistów w tej dziedzinie. Obecnie pracuje jako profesor na Uniwersytecie Browna i ma wiele osiągnięć, które można by opisać jako akapit. Obecnie bada blockchain w kontekście klasycznego przetwarzania rozproszonego.

Wcześniej Maurice przyjechał już do Rosji na SPTCC (nagranie wideo) i odbyłem doskonałe spotkanie społeczności programistów Java JUG.ru w St. Petersburgu (nagranie wideo).

Ten habrapost to świetny wywiad z Maurice'em Herlihy. Omawia następujące tematy:

  • Interakcja między środowiskiem akademickim a przemysłem;
  • Fundacja Badań nad Blockchainem;
  • Skąd biorą się przełomowe pomysły? Wpływ popularności;
  • Doktorat pod kierunkiem Barbary Liskov;
  • Świat czeka na wielordzeniowy;
  • Nowy świat przynosi nowe problemy. Hakowanie NVM, NUMA i architektury;
  • Kompilatory kontra procesory, RISC kontra CISC, pamięć współdzielona a przekazywanie komunikatów;
  • Sztuka pisania delikatnego, wielowątkowego kodu;
  • Jak nauczyć studentów pisania złożonego, wielowątkowego kodu;
  • Nowe wydanie książki „Sztuka programowania wieloprocesorowego”;
  • Jak wynaleziono pamięć transakcyjną;   
  • Dlaczego warto prowadzić badania w zakresie przetwarzania rozproszonego;
  • Czy rozwój algorytmów się zatrzymał i jak dalej postępować;
  • Praca na Uniwersytecie Browna;
  • Różnica między badaniami na uniwersytecie i w korporacji;
  • Hydra i SPTDC.

Wywiad prowadzi:

Witalij Aksenow — obecnie post-doc w IST Austria i pracownik Katedry Technologii Komputerowych na Uniwersytecie ITMO. Prowadzi badania z zakresu teorii i praktyki konkurencyjnych struktur danych. Przed pracą w IST uzyskał doktorat na Uniwersytecie Paris Diderot i Uniwersytecie ITMO pod kierunkiem profesora Petera Kuzniecowa.

Aleksiej Fiodorow - Producent w JUG Ru Group, rosyjskiej firmie organizującej konferencje dla deweloperów. Alexey brał udział w przygotowaniu ponad 50 konferencji, a jego życiorys obejmuje wszystko, od stanowiska inżyniera rozwoju w Oracle (JCK, Java Platform Group) po stanowisko programisty w Odnoklassnikach.

Włodzimierz Sitnikow - Inżynier w Netcrackerze. Dziesięć lat pracy nad wydajnością i skalowalnością NetCracker OS, oprogramowania wykorzystywanego przez operatorów telekomunikacyjnych do automatyzacji procesów zarządzania siecią i sprzętem sieciowym. Interesują mnie problemy wydajnościowe Java i Oracle Database. Autor kilkunastu ulepszeń wydajnościowych w oficjalnym sterowniku PostgreSQL JDBC.

Interakcja nauki i przemysłu

Alexey: Maurice, pracujesz w środowisku akademickim od bardzo długiego czasu i pierwsze pytanie dotyczy interakcji między sferą akademicką i przemysłową. Czy możesz opowiedzieć o tym, jak ostatnio zmieniły się interakcje między nimi? Co wydarzyło się 20-30 lat temu i co dzieje się teraz? 

Maurice: Zawsze starałem się ściśle współpracować z firmami komercyjnymi, ponieważ mają one ciekawe problemy. Z reguły nie są zbytnio zainteresowani ani publikowaniem swoich wyników, ani szczegółowym wyjaśnianiem swoich problemów społeczności światowej. Są zainteresowani jedynie rozwiązaniem tych problemów. Pracowałem jakiś czas w takich firmach. Spędziłem pięć lat, pracując na pełny etat w laboratorium badawczym w firmie Digital Equipment Corporation, która była kiedyś dużą firmą komputerową. Jeden dzień w tygodniu pracowałem w firmie Sun, Microsoft, Oracle i trochę pracowałem na Facebooku. Teraz zamierzam udać się na urlop naukowy (profesor amerykańskiej uczelni może wziąć taki urlop na rok mniej więcej raz na sześć lat) i pracować w Algorand, jest to firma kryptowalutowa z Bostonu. Ścisła współpraca z firmami zawsze była przyjemnością, bo w ten sposób można dowiedzieć się nowych i ciekawych rzeczy. Możesz nawet być pierwszą lub drugą osobą, która opublikuje artykuł na wybrany temat, zamiast pracować nad stopniowym ulepszaniem rozwiązań problemów, nad którymi wszyscy już pracują.

Alexey: Czy możesz nam powiedzieć bardziej szczegółowo, jak to się dzieje?

Maurycy: Oczywiście. Wiesz, kiedy pracowałem w Digital Equipment Corporation, ja i Elliot Moss, wynaleźliśmy pamięć transakcyjną. Był to bardzo owocny okres, w którym wszyscy zaczęli interesować się technologią informatyczną. Równoległość, w tym, chociaż systemy wielordzeniowe jeszcze nie istniały. W czasach Sun i Oracle dużo pracowałem nad równoległymi strukturami danych. Na Facebooku pracowałem nad ich projektem blockchain, o którym nie mogę mówić, ale mam nadzieję, że wkrótce ujrzy on światło dzienne. W przyszłym roku w Algorand będę pracować w grupie badawczej zajmującej się inteligentnymi kontraktami.

Alexey: Blockchain stał się bardzo popularnym tematem w ciągu ostatnich kilku lat. Czy to pomoże w Twoich badaniach? Być może ułatwi to pozyskiwanie dotacji lub zapewni dostęp do środków od firm działających w branży?

Maurice: Otrzymałem już niewielki grant od Fundacji Ethereum. Popularność blockchainu jest bardzo pomocna w inspirowaniu studentów do pracy w tej dziedzinie. Są tym bardzo zainteresowani i podekscytowani możliwością zaangażowania się, ale czasami nie zdają sobie sprawy, że badania, które na zewnątrz brzmią ekscytująco, okazują się wymagać naprawdę ciężkiej pracy. Jednak jestem bardzo podekscytowany możliwością wykorzystania całej tej tajemnicy wokół blockchainu, aby pomóc przyciągnąć studentów. 

Ale to nie wszystko. Jestem członkiem rad doradczych kilku startupów blockchain. Niektórym z nich może się udać, innym może nie, ale zawsze bardzo interesujące jest obserwowanie ich pomysłów, studiowanie ich i doradzanie ludziom. Najbardziej ekscytującą rzeczą jest ostrzeganie ludzi, aby czegoś nie robili. Wiele rzeczy na pierwszy rzut oka wydaje się dobrym pomysłem, ale czy rzeczywiście tak jest?

Fundacja Badań nad Blockchainem

Witalij: Niektórzy uważają, że przyszłość leży w blockchainie i jego algorytmach. A inni mówią, że to tylko kolejna bańka. Czy możesz podzielić się swoją opinią w tej kwestii?

Maurice: Wiele z tego, co dzieje się w świecie blockchain, jest niewłaściwych, niektóre to po prostu oszustwo, wiele jest przereklamowanych. Uważam jednak, że badania te mają solidne podstawy naukowe. Fakt, że świat blockchain jest pełen różnic ideologicznych, pokazuje poziom ekscytacji i zaangażowania. Z drugiej strony nie jest to szczególnie korzystne dla badań naukowych. Jeśli teraz opublikujesz artykuł mówiący o wadach konkretnego algorytmu, wynikająca z tego reakcja nie zawsze będzie w pełni naukowa. Często ludzie wyrzucają swoje emocje. Myślę, że tego rodzaju emocje w tej dziedzinie mogą wydawać się niektórym atrakcyjne, ale ostatecznie istnieją rzeczywiste problemy naukowe i inżynieryjne, którymi należy się zająć. Jest tu dużo informatyki.

Witalij: Próbujesz więc położyć podwaliny pod badania nad blockchainem, prawda?

Maurice: Próbuję położyć podwaliny pod solidną, solidną, naukowo i matematycznie uzasadnioną dyscyplinę. Częścią problemu jest to, że czasami trzeba zaprzeczyć niektórym zbyt ostrym stanowiskom innych ludzi i je zignorować. Czasami ludzie pytają, dlaczego pracuję w obszarze, który interesuje tylko terrorystów i handlarzy narkotyków. Taka reakcja jest tak samo bezsensowna, jak zachowanie obserwujących, którzy na ślepo powtarzają Twoje słowa. Myślę, że prawda leży gdzieś po środku. Blockchain będzie miał głęboki wpływ na społeczeństwo i globalną gospodarkę. Ale prawdopodobnie nie stanie się to dzięki nowoczesnej technologii. Nowoczesne technologie będą się rozwijać i to, co w przyszłości będzie nazywane blockchainem, stanie się bardzo ważne. Może nawet nie wyglądać jak nowoczesne łańcuchy bloków, to pytanie otwarte.

Jeśli ludzie wymyślą nowe technologie, nadal będą nazywać je blockchainem. To znaczy, tak jak dzisiejszy Fortran nie ma nic wspólnego z językiem Fortran z lat 1960. XX wieku, ale wszyscy nazywają go Fortran. To samo dla UNIX-a. To, co nazywa się „blockchain”, nadal czeka rewolucję. Wątpię jednak, czy ten nowy blockchain będzie choć trochę podobny do tego, z którego wszyscy dzisiaj korzystają.

Skąd biorą się przełomowe pomysły? Wpływ popularności

Alexey: Czy popularność blockchainu doprowadziła do nowych wyników z naukowego punktu widzenia? Więcej interakcji, więcej studentów, więcej firm w okolicy. Czy są już jakieś rezultaty tego wzrostu popularności?

Maurice: Zainteresowałem się tym, gdy ktoś wręczył mi oficjalną ulotkę firmy, która właśnie zebrała sporo pieniędzy. Pisało o zadaniem generałów bizantyjskich, z którym jestem więcej niż zaznajomiony. To, co napisano w ulotce, było wyraźnie niepoprawne technicznie. Ludzie, którzy to wszystko napisali, tak naprawdę nie rozumieli modelu stojącego za problemem... a jednak ta firma zebrała dużo pieniędzy. Następnie firma po cichu zastąpiła tę ulotkę znacznie poprawniejszą wersją - i nie powiem, jak nazywała się ta firma. Nadal są w pobliżu i mają się bardzo dobrze. To wydarzenie przekonało mnie, że po pierwsze, blockchain jest po prostu formą przetwarzania rozproszonego. Po drugie, próg wejścia (przynajmniej wtedy, cztery lata temu) był dość niski. Ludzie pracujący w tej dziedzinie byli bardzo energiczni i inteligentni, ale nie czytali prac naukowych. Próbowali wymyślić na nowo znane rzeczy i zrobili to źle. Dziś dramat już osłabł.

Alexey: To bardzo interesujące, ponieważ kilka lat temu mieliśmy inny trend. To trochę jak tworzenie front-endu, kiedy programiści front-endu korzystający z przeglądarek wymyślili na nowo całe technologie, które były już popularne w back-endzie: tworzenie systemów, ciągła integracja i tym podobne. 

Maurycy: Zgadzam się. Nie jest to jednak zaskakujące, ponieważ prawdziwie przełomowe pomysły zawsze pochodzą spoza ugruntowanej społeczności. Jest mało prawdopodobne, aby uznani badacze, zwłaszcza naukowcy o ugruntowanej pozycji, dokonali czegoś naprawdę przełomowego. Łatwo jest napisać referat na następną konferencję o tym, jak nieznacznie poprawiłeś wyniki swojej poprzedniej pracy. Idź na konferencję, spotkaj się ze znajomymi, porozmawiaj o tych samych rzeczach. A ludzie, którzy wpadają do firmy z przełomowymi pomysłami, prawie zawsze pochodzą z zewnątrz. Nie znają zasad, nie znają języka, a mimo to… Jeśli należycie do ugruntowanej społeczności, radzę zwrócić uwagę na nowe rzeczy, na coś, co nie mieści się w ogólnym obrazie. W pewnym sensie można podjąć próbę połączenia zewnętrznych, bardziej płynnych rozwiązań z metodami, które już znamy. W pierwszym kroku spróbuj ustalić podstawę naukową, a następnie zmień ją tak, aby można ją było zastosować do nowych, przełomowych pomysłów. Myślę, że blockchain jest świetny, ponieważ jest świeżym, przełomowym pomysłem.

Alexey: Jak myślisz, dlaczego tak się dzieje? Bo ludzie „z zewnątrz” nie mają żadnych specyficznych barier tkwiących w danej społeczności?

Maurice: Zachodzi tu pewien wzór. Jeśli przeczytasz historię impresjonistów w malarstwie i sztuce w ogóle, to kiedyś znani artyści odrzucili impresjonizm. Mówili, że to trochę dziecinne. Pokolenie później ta wcześniej odrzucona forma sztuki stała się standardem. To, co widzę na swoim polu: twórcom blockchaina nie zależało na władzy, na zwiększaniu liczby publikacji i indeksu cytowań, chcieli po prostu zrobić coś dobrego. Więc usiedli i zaczęli to robić. Brakowało im pewnej głębi technicznej, ale można to naprawić. O wiele trudniej jest wymyślić nowe twórcze pomysły, niż poprawić i wzmocnić niedojrzałe. Dzięki tym wynalazcom mam teraz co robić!

Alexey: Przypomina to różnicę między startupami a starszymi projektami. Dziedziczymy wiele ograniczeń myślenia, barier, specjalnych wymagań i tak dalej.

Maurice: Dobrą analogią jest przetwarzanie rozproszone. Pomyśl o blockchainie jak o startupie i o przetwarzaniu rozproszonym jak o dużej, ugruntowanej firmie. Przetwarzanie rozproszone jest w trakcie przejmowania i łączenia z blockchainem.

Doktorat pod kierunkiem Barbary Liskov

Witalij: Nadal mamy wiele pytań! Przyjrzeliśmy się Twojej przeszłości i znaleźliśmy interesujący fakt na temat Twojego doktoratu. Tak, to było dawno temu, ale wydaje się, że jest to ważny temat. Doktorat uzyskałeś pod swoim kierunkiem Barbara Liskow! Barbara jest bardzo dobrze znaną społecznością języków programowania i ogólnie bardzo znaną osobą. Logiczne jest, że Pana badania dotyczyły języków programowania. Jak przestawiłeś się na przetwarzanie równoległe? Dlaczego zdecydowałeś się zmienić temat?

Maurice: W tamtym czasie Barbara i jej grupa po prostu przyglądali się przetwarzaniu rozproszonemu, co było bardzo nowym pomysłem. Byli też tacy, którzy twierdzili, że przetwarzanie rozproszone to nonsens, a komunikacja komputerów między sobą nie ma sensu. Jedną z kwestii poruszanych w przetwarzaniu rozproszonym, odróżniającą je od przetwarzania scentralizowanego, jest odporność na awarie. Po wielu badaniach zdecydowaliśmy, że język programowania obliczeń rozproszonych musi zawierać transakcje przypominające transakcje atomowe, ponieważ nigdy nie można być pewnym, że zdalne połączenie się powiedzie. Po przeprowadzeniu transakcji pojawia się problem zarządzania współbieżnością. Potem było dużo pracy nad uzyskaniem wysoce równoległych transakcyjnych struktur danych. Potem, gdy skończyłem studia, pojechałem do Carnegie Mellona i zacząłem szukać tematu do pracy. Przyszło mi do głowy, że informatyka przeniosła się z pojedynczych komputerów do sieci komputerów. Wieloprocesory byłyby naturalną kontynuacją postępu – słowo „wielordzeniowy” jeszcze nie istniało. Pomyślałem: jaki jest odpowiednik transakcji atomowych w systemie wielordzeniowym? Zdecydowanie nie są to regularne transakcje, ponieważ są za duże i ciężkie. I tak wpadłem na pomysł linearyzowalność i tak wpadłem na całą synchronizację bez czekania. Była to próba odpowiedzi na pytanie, jaka jest analogia transakcji atomowych dla systemu wieloprocesorowego z pamięcią współdzieloną. Na pierwszy rzut oka praca ta może wyglądać zupełnie inaczej, jednak tak naprawdę jest kontynuacją tego samego tematu.

Świat czeka na wielordzeniowość

Witalij: Wspomniałeś, że w tamtym czasie było bardzo niewiele komputerów wielordzeniowych, prawda?

Maurice: Po prostu ich tam nie było. Istniało kilka tak zwanych wieloprocesorów symetrycznych, które były w zasadzie podłączone do tej samej magistrali. Nie działało to zbyt dobrze, ponieważ za każdym razem, gdy nowa firma tworzyła coś podobnego, Intel wypuszczał pojedynczy procesor, który był lepszy od procesora wieloprocesorowego.

Alexey: Czy to nie znaczy, że w tamtych czasach były to raczej studia teoretyczne?

Maurice: To nie było studium teoretyczne, ale raczej spekulatywne. W tym wszystkim nie chodziło o pracę z wieloma twierdzeniami, a raczej o stawianie hipotez na temat architektury, która wówczas nie istniała. Po to właśnie są badania! Żadna firma nie zrobiłaby czegoś takiego, to wszystko było czymś odległym. W rzeczywistości tak było do 2004 roku, kiedy pojawiły się prawdziwe procesory wielordzeniowe. Ponieważ procesory się przegrzewają, możesz zmniejszyć procesor, ale nie możesz go przyspieszyć. Z tego powodu nastąpiło przejście na architektury wielordzeniowe. A to oznaczało, że nagle wszystkie koncepcje, które opracowaliśmy w przeszłości, znalazły zastosowanie.

Alexey: Jak myślisz, dlaczego procesory wielordzeniowe pojawiły się dopiero w XNUMX roku? Dlaczego więc jest tak późno?

Maurice: Wynika to z ograniczeń sprzętowych. Intel, AMD i inne firmy są bardzo dobre w zwiększaniu szybkości procesorów. Kiedy w pewnym momencie procesory stały się na tyle małe, że nie mogły już zwiększyć taktowania, ponieważ procesory zaczęły się wypalać. Możesz je zmniejszyć, ale nie szybciej. Jaka jest ich moc – zamiast bardzo małego procesora, w tej samej objętości obudowy zmieszczą osiem, szesnaście czy trzydzieści dwa procesory, gdzie wcześniej zmieścił się tylko jeden. Teraz masz wielowątkowość i szybką komunikację między nimi, ponieważ współdzielą pamięć podręczną. Nie można ich jednak zmusić do szybszej jazdy – obowiązuje bardzo specyficzne ograniczenie prędkości. Stopniowo się poprawiają, ale już nie tak bardzo. Prawa fizyki stanęły na przeszkodzie udoskonaleniom.

Nowy świat przynosi nowe problemy. Hakowanie NUMA, NVM i architektury

Alexey: Brzmi bardzo rozsądnie. Wraz z nowymi procesorami wielordzeniowymi pojawiły się nowe problemy. Czy Ty i Twoi współpracownicy spodziewaliście się takich problemów? Być może przestudiowałeś je wcześniej? W badaniach teoretycznych często nie jest łatwo przewidzieć takie rzeczy. Kiedy pojawiły się problemy, w jaki sposób spełniły one oczekiwania Twoje i Twoich współpracowników? A może były zupełnie nowe i Ty i Twoi współpracownicy musieliście spędzić dużo czasu na rozwiązywaniu pojawiających się problemów?

Witalij: Dodam do pytania Aleksieja: czy podczas studiowania teorii poprawnie przewidziałeś architekturę procesora?

Maurice: Nie na 100%. Myślę jednak, że moi koledzy i ja wykonaliśmy dobrą robotę, przewidując wielordzeniowość z pamięcią współdzieloną. Myślę, że poprawnie przewidzieliśmy trudności w opracowywaniu równoległych struktur danych działających bez blokad. Takie struktury danych były ważne dla wielu aplikacji, chociaż nie dla wszystkich, ale często tak naprawdę potrzebna jest struktura danych niezablokowana. Kiedy je wymyśliliśmy, wielu twierdziło, że to bzdura, że ​​z zamkami wszystko działa dobrze. Całkiem nieźle przewidzieliśmy, że na wiele problemów programistycznych i problemów ze strukturą danych będą gotowe rozwiązania. Były też bardziej złożone problemy, jak np NUMA – nierówny dostęp do pamięci. W rzeczywistości nie były one nawet brane pod uwagę, dopóki nie wynaleziono procesorów wielordzeniowych, ponieważ były zbyt specyficzne. Społeczność naukowa pracowała nad pytaniami, które były ogólnie przewidywalne. Niektóre problemy sprzętowe związane z konkretnymi architekturami musiały poczekać na dalszy plan – a właściwie pojawienie się tych architektur. Na przykład nikt tak naprawdę nie pracował nad strukturami danych specyficznymi dla GPU, ponieważ wtedy nie istniały procesory graficzne. Chociaż włożono w to mnóstwo pracy SIMDalgorytmy te były gotowe do użycia, gdy tylko udostępniono odpowiedni sprzęt. Nie da się jednak wszystkiego przewidzieć.

Alexey: Jeśli dobrze rozumiem, NUMA jest rodzajem kompromisu pomiędzy kosztem, wydajnością i kilkoma innymi rzeczami. Jakieś pomysły, dlaczego NUMA wyszła tak późno?

Maurice: Myślę, że NUMA istnieje z powodu problemów ze sprzętem używanym do produkcji pamięci: im dalej znajdują się komponenty, tym wolniejszy jest do nich dostęp. Natomiast drugą wartością tej abstrakcji jest jednolitość pamięci. Zatem jedną z cech obliczeń równoległych jest to, że wszystkie abstrakcje są nieco zepsute. Gdyby dostęp był idealnie jednolity, cała pamięć byłaby w jednakowej odległości, ale jest to ekonomicznie, a może nawet fizycznie, niemożliwe. Dlatego powstaje ten konflikt. Jeśli napiszesz swój program tak, jakby pamięć była jednolita, najprawdopodobniej będzie on poprawny. W tym sensie, że nie będzie dawał błędnych odpowiedzi. Ale jej występ też nie przyciągnie gwiazd z nieba. Podobnie, jeśli piszesz spinlocki Bez zrozumienia hierarchii pamięci podręcznej samo blokowanie będzie prawidłowe, ale o wydajności można zapomnieć. W pewnym sensie trzeba pisać programy, które opierają się na bardzo prostej abstrakcji, ale trzeba też przechytrzyć ludzi, którzy tę abstrakcję dali: trzeba wiedzieć, że pod tą abstrakcją kryje się pewna hierarchia pamięci, że istnieje autobus między tobą a tym wspomnieniem i tak dalej. Istnieje zatem pewien konflikt pomiędzy indywidualnie użytecznymi abstrakcjami, co prowadzi nas do bardzo konkretnych i pragmatycznych problemów.

Witalij: A co z przyszłością? Czy można przewidzieć dalszy rozwój procesorów? Istnieje pomysł, że jedną z odpowiedzi jest pamięć transakcyjna. Prawdopodobnie masz coś innego na stanie.

Maurice: Przed nami kilka poważnych wyzwań. Po pierwsze, pamięć spójna jest cudowną abstrakcją, ale w szczególnych przypadkach zaczyna się załamywać. Na przykład NUMA jest żywym przykładem czegoś, w czym można nadal udawać, że istnieje jednolita pamięć. Właściwie nie, produktywność doprowadzi Cię do płaczu. W pewnym momencie architekci będą musieli porzucić ideę pojedynczej architektury pamięci, nie można udawać w nieskończoność. Potrzebne będą nowe modele programowania, które będą wystarczająco łatwe w użyciu i wystarczająco wydajne, aby zapewnić wydajność podstawowego sprzętu. To bardzo trudny kompromis, bo jeśli pokażesz programistom architekturę, która faktycznie jest zastosowana w sprzęcie, oszaleją. To zbyt skomplikowane i nie przenośne. Jeśli zaprezentujesz interfejs, który jest zbyt prosty, wydajność będzie słaba. Zatem konieczne będzie dokonanie wielu bardzo trudnych kompromisów, aby zapewnić przydatne modele programowania mające zastosowanie do naprawdę dużych procesorów wielordzeniowych. Nie jestem pewien, czy ktokolwiek inny niż specjalista jest w stanie programować na komputerze z 2000 rdzeniami. I jeśli nie zajmujesz się bardzo specjalistycznymi lub naukowymi obliczeniami, kryptografią lub czymś podobnym - nadal nie jest jasne, jak to zrobić poprawnie. 

Innym podobnym obszarem są architektury specjalistyczne. Akceleratory graficzne istnieją już od dawna, ale stały się klasycznym przykładem tego, jak można wykorzystać wyspecjalizowany typ obliczeń i uruchomić go na dedykowanym chipie. Wiąże się to z dodatkowymi wyzwaniami: sposobem komunikacji z takim urządzeniem, sposobem jego programowania. Ostatnio zajmowałem się problemami w okolicy w pobliżu obliczeń pamięciowych. Bierzesz mały procesor i przyklejasz go do ogromnego fragmentu pamięci, tak aby pamięć działała z szybkością pamięci podręcznej L1, a następnie komunikowała się z urządzeniem takim jak TPU – procesor jest zajęty ładowaniem nowych zadań do rdzenia pamięci. Projektowanie struktur danych i protokołów komunikacyjnych dla tego rodzaju rzeczy to kolejny interesujący przykład. Dlatego niestandardowe procesory i sprzęt będą udoskonalane przez dłuższy czas.

Alexey: A co z pamięcią nieulotną (pamięć nieulotna)?

Maurice: Och, to kolejny świetny przykład! NVM znacznie zmieni sposób, w jaki patrzymy na takie rzeczy, jak struktury danych. W pewnym sensie pamięć nieulotna obiecuje naprawdę przyspieszyć działanie. Ale to nie ułatwi życia, ponieważ większość procesorów, pamięci podręcznych i rejestrów jest nadal niestabilna. Kiedy zaczynasz po awarii, twój stan i stan twojej pamięci nie będą dokładnie takie same jak przed awarią. Jestem bardzo wdzięczny osobom pracującym nad NVM – badacze będą mieli mnóstwo pracy przez długi czas, próbując ustalić warunki poprawności. Obliczenia są poprawne, jeśli przetrwają awarię, w wyniku której zawartość pamięci podręcznych i rejestrów zostaje utracona, ale pamięć główna pozostaje nienaruszona.

Kompilatory kontra procesory, RISC kontra CISC, pamięć współdzielona a przekazywanie komunikatów

Vladimir: Co sądzisz o dylemacie „kompilatory kontra procesory” z punktu widzenia zestawu instrukcji? Wyjaśnię tym, którzy nie są wtajemniczeni: jeśli przejdziemy do skośnej pamięci lub czegoś podobnego, moglibyśmy użyć bardzo prostego zestawu poleceń i poprosić kompilator o wygenerowanie złożonego kodu, który będzie mógł wykorzystać odkryte zalety. Możemy też pójść drugą drogą: wdrożyć złożone instrukcje i poprosić procesor o zmianę kolejności instrukcji i wykonanie z nimi innych manipulacji. Co o tym sądzisz?

Maurice: Właściwie nie mam odpowiedzi na to pytanie. Ta debata toczy się od czterdziestu lat. Był czas pomiędzy w skrócie zestaw poleceń i trudny wojny domowe toczono na podstawie zestawu poleceń. Przez pewien czas wygrywali ludzie z RISC, ale potem Intel przebudował swoje silniki, tak że wewnętrznie wykorzystano ograniczony zestaw instrukcji, a pełny zestaw wyeksportowano na zewnątrz. To chyba temat, w którym każde nowe pokolenie musi znaleźć własne kompromisy i podejmować własne decyzje. Bardzo trudno przewidzieć, która z tych rzeczy będzie lepsza. Zatem każda przepowiednia, którą poczynię, będzie prawdziwa przez pewien czas, potem znowu fałszywa przez pewien czas, a potem znowu prawdziwa.

Alexey: Jak często w branży zdarza się, że niektóre pomysły wygrywają przez kilka dekad i przegrywają w kolejnych? Czy są inne przykłady takich okresowych zmian?

Maurice: Jeśli chodzi o przetwarzanie rozproszone, są ludzie, którzy w to wierzą wspólna pamięć i ludzie, którzy w nie wierzą wymiana wiadomości. Początkowo w przetwarzaniu rozproszonym przetwarzanie równoległe oznacza przekazywanie komunikatów. Potem ktoś odkrył, że znacznie łatwiej jest programować z pamięcią współdzieloną. Przeciwna strona stwierdziła, że ​​pamięć współdzielona jest zbyt skomplikowana, bo wymaga blokad i tym podobnych, dlatego warto przejść na języki, w których nie istnieje nic innego jak tylko przekazywanie wiadomości. Ktoś spojrzał na to, co z tego wyszło i powiedział: „Wow, ta implementacja przesyłania wiadomości wygląda bardzo podobnie do pamięci współdzielonej, ponieważ tworzysz mnóstwo tych małych modułów, wysyłają one do siebie wiadomości i wszystkie splatać„Stwórzmy lepszą bazę danych pamięci współdzielonej!” Wszystko to powtarza się w kółko i nie da się powiedzieć, że któraś ze stron ma na pewno rację. Jedna strona zawsze będzie dominować, ponieważ gdy tylko jedna z nich prawie wygra, ludzie wciąż na nowo wymyślają sposoby na ulepszenie drugiej.

Sztuka pisania kruchego kodu wielowątkowego

Aleksiej: To bardzo interesujące. Na przykład, gdy piszemy kod, niezależnie od języka programowania, zwykle musimy tworzyć abstrakcje, takie jak komórki, które można czytać i zapisywać. Jednak w rzeczywistości na pewnym poziomie fizycznym może to wyglądać jak wysyłanie wiadomości poprzez magistralę sprzętową pomiędzy różnymi komputerami i innymi urządzeniami. Okazuje się, że praca toczy się na obu poziomach abstrakcji jednocześnie.

Maurice: To absolutna prawda, że ​​pamięć współdzielona opiera się na przekazywaniu wiadomości – autobusach, pamięciach podręcznych i tak dalej. Ale trudno jest pisać programy wykorzystujące przekazywanie komunikatów, więc sprzęt celowo kłamie, udając, że masz jakąś jednolitą pamięć. Ułatwi Ci to pisanie prostych, poprawnych programów, zanim wydajność zacznie się pogarszać. Wtedy powiesz: wygląda na to, że czas zaprzyjaźnić się z keszem. A potem zaczynasz martwić się o lokalizację skrytki i tak już zostanie. W pewnym sensie naruszasz abstrakcję: wiesz, że to nie tylko płaska, jednolita pamięć, i wykorzystasz tę wiedzę do napisania programów obsługujących pamięć podręczną. To właśnie będziesz musiał zrobić w przypadku prawdziwych problemów. Ten konflikt pomiędzy słodką, prostą i przyjemną abstrakcją, którą otrzymałeś, a strasznie złożoną implementacją podstawowego sprzętu, powoduje, że każdy pójdzie na własny kompromis. Mam książkę o wieloprocesorach i synchronizacji, a w pewnym momencie miałem zamiar napisać rozdział o strukturach danych w java.util.concurrent. Jeśli na nie spojrzysz, takie rzeczy jak listy z pominięciami To niesamowite dzieła sztuki. (Nota redaktora: Osoby zaznajomione z językiem Java powinny przynajmniej rzucić okiem na implementację Współbieżna mapa listy pominięć, możesz zajrzeć do linków API и kod źródłowy). Jednak z mojego punktu widzenia pokazywanie ich studentom byłoby nieodpowiedzialne, ponieważ taka struktura danych przypomina trochę człowieka w cyrku biegającego po linie po niedźwiedziej jamie. Jeśli zmienisz choćby jeden mały szczegół, cała konstrukcja się zawali. Ten kod jest bardzo szybki i elegancki tylko dlatego, że jest napisany doskonale, ale najmniejsza zmiana doprowadzi do całkowitej awarii. Jeśli podam ten kod uczniom jako przykład, od razu powiedzą: Ja też to potrafię! A potem rozbije się jakiś samolot albo wybuchnie reaktor jądrowy, a ja będę winny przekazania im zbyt wielu informacji w niewłaściwym czasie.

Alexey: Kiedy byłem trochę młodszy, wiele razy próbowałem przestudiować kod źródłowy Douga Lee, na przykład java.util.concurrent, ponieważ jest to oprogramowanie typu open source, bardzo łatwo je znaleźć i spróbować zrozumieć, co się tam dzieje. Nie wyszło to zbyt dobrze: często jest zupełnie niejasne, dlaczego Doug zdecydował się zrobić coś w ten sposób, podczas gdy wszyscy inni robią to inaczej. Jak wytłumaczyć te rzeczy swoim uczniom? Czy istnieje na przykład szczególnie poprawny sposób opisania określonych szczegółów algorytmu hardkorowego? Jak Ty to robisz?

Maurice: Nauczyciele rysunku mają banał, który najpierw zapamiętują: jeśli chcesz rysować jak Picasso, najpierw musisz nauczyć się rysować proste, realistyczne obrazy i dopiero wtedy, gdy znasz zasady, możesz zacząć je łamać. Jeśli od razu zaczniesz łamać zasady, skończysz w bałaganie. Po pierwsze, uczę studentów, jak pisać prosty, poprawny kod, nie martwiąc się o wydajność. Mówię tylko, że czyhają tu złożone problemy z synchronizacją, więc nie martw się o pamięci podręczne, nie martw się o modele pamięci, po prostu upewnij się, że wszystko działa poprawnie. To już jest wystarczająco trudne: nowoczesne programowanie samo w sobie nie jest łatwe, zwłaszcza dla nowych uczniów. A kiedy mają intuicję, jak napisać odpowiednie programy, mówię: spójrzcie na te dwie implementacje spinlocka: jedna jest bardzo wolna, a druga też nie bardzo, ale lepsza. Jednak matematycznie te dwa algorytmy są takie same. W rzeczywistości jeden z nich wykorzystuje lokalizację pamięci podręcznej. Jeden z nich działa na danych przechowywanych lokalnie w pamięci podręcznej, a drugi wielokrotnie wykonuje operacje w całej magistrali. Nie możesz napisać wydajnego kodu, jeśli nie rozumiesz, co to jest i nie wiesz, jak przełamać abstrakcję i przyjrzeć się leżącej u jej podstaw strukturze. Ale nie będziesz mógł zacząć tego robić od razu. Są ludzie, którzy od razu zaczynają to robić i wierzą we własny geniusz, zwykle kończy się to źle, bo nie rozumieją zasad. Nikt nie rysuje tak jak Picasso i nie pisze programów jak Doug Lee, świeżo po studiach w pierwszym tygodniu. Osiągnięcie tego poziomu wiedzy zajmuje lata.

Alexey: Okazuje się, że problem dzielisz na dwie części: pierwsza to poprawność, druga to wydajność?

Maurycy: Dokładnie. I dokładnie w tej kolejności. Częścią problemu jest to, że nowi uczniowie nie rozumieją, że trudno jest osiągnąć poprawność. Na pierwszy rzut oka mówią: to oczywiście prawda, pozostaje tylko to przyspieszyć. Czasami więc opowiadam im o początkowo błędnym algorytmie, jakby był poprawny.

Jak nauczyć uczniów pisania złożonego kodu wielowątkowego

Alexey: Tylko po to, żeby zobaczyć, czy wyczują haczyk?

Maurice: Zawsze ostrzegam z wyprzedzeniem, że czasami zaproponuję nieprawidłowe algorytmy. Nie należy oszukiwać ludzi. Sugeruję, aby traktować tę informację z przymrużeniem oka. Jeśli coś powiem i powiem: „patrz, to oczywiście prawda” - to sygnał, że gdzieś próbują cię oszukać i powinieneś zacząć zadawać pytania. Następnie staram się zachęcać uczniów, aby nadal zadawali pytania, a następnie sugeruję: „Co się stanie, jeśli zostawimy wszystko tak, jak jest?” I od razu widzą błąd. Jednak przekonanie uczniów, że muszą martwić się o poprawność, jest znacznie trudniejsze, niż się wydaje na pierwszy rzut oka. Wielu z tych uczniów zdobyło doświadczenie w programowaniu w szkole średniej, niektórzy znaleźli tam pracę i programowali, a wszyscy są przepełnieni pewnością siebie. To trochę jak z wojskiem: najpierw trzeba zmienić ich nastrój, żeby przekonać ich, żeby cierpliwie podchodzili do rozwiązywania pojawiających się problemów. A może to tak jak z mnichami buddyjskimi: najpierw uczą się rozumowania na temat poprawności, a kiedy zrozumieją sposoby rozumowania na temat poprawności, mogą przejść na wyższy poziom i zacząć martwić się o wydajność.

Alexey: To znaczy czasami pokazujesz uczniom niedziałające przykłady, dzięki czemu dostajesz informację zwrotną pokazującą, czy rozumieją istotę problemu, czy potrafią znaleźć zły kod i zły wynik. Czy uczniowie zwykle sprawiają, że jesteś szczęśliwy czy smutny?

Maurice: Studenci prawie zawsze w końcu znajdują błąd. Jeśli szukają zbyt wolno, zadaję pytania naprowadzające i tutaj ważne jest, aby zrozumieć, że jeśli nigdy ich nie oszukasz, zaczną bezmyślnie postrzegać Twoje słowa jako ostateczną prawdę. Wtedy znudzą się i zaczną zasypiać, czytając Facebooka na laptopie podczas zajęć. Ale kiedy powiesz im z wyprzedzeniem, że zostaną oszukani i będą wyglądać głupio, jeśli nie wyczują podstępu, stają się znacznie bardziej czujni. To jest dobre na różne sposoby. Chciałbym, aby uczniowie nie tylko kwestionowali swoje rozumienie zagadnienia, ale także kwestionowali autorytet nauczyciela. Pomysł jest taki, że uczeń może w każdej chwili podnieść rękę i powiedzieć: Uważam, że to, co właśnie powiedziałeś, jest błędne. Jest to ważne narzędzie edukacyjne. Nie chcę, żeby któryś ze studentów siedział i w milczeniu myślał: to wszystko wydaje się kompletną bzdurą, ale podniesienie ręki jest zbyt straszne, a poza tym to profesor, więc wszystko, co mówi, jest prawdą. Dlatego też, jeśli zostaną z wyprzedzeniem ostrzeżeni, że nie wszystko, co zostało powiedziane, musi być prawdą, mają motywację do zwrócenia większej uwagi na materiał. Wyjaśniam, że można podnosić rękę i zadawać pytania. Twoje pytanie może wydawać się głupie lub naiwne, ale często w ten sposób powstają najlepsze pytania.

Aleksiej: Bardzo interesujące. Zwykle ludzie mają jakąś barierę psychologiczną, która nie pozwala im zadać pytania profesorowi. Zwłaszcza jeśli na sali jest dużo osób i wszyscy boją się, że omówienie twojego głupiego pytania zajmie czas tych wszystkich osób. Czy są jakieś triki, żeby sobie z tym poradzić?

Maurice: Często zatrzymuję się i zadaję klasyczne pytania. Czy stwierdzenie byłoby poprawne lub w jaki sposób rozwiązaliby omawiany problem. To kluczowa czynność, szczególnie na początku lekcji, kiedy ludzie wstydzą się powiedzieć nawet najdrobniejszą rzecz. Zadajesz uczniom pytanie i nie mówisz nic więcej. Zapada cisza, wszyscy są trochę spięci, napięcie rośnie, aż nagle ktoś nie może wytrzymać, załamuje się i mówi odpowiedź. Oto jak odwrócić sytuację: dalsze milczenie staje się trudniejsze i niewygodniejsze niż odpowiadanie! To typowy chwyt pedagogiczny. Każdy nauczyciel na świecie powinien wiedzieć, jak to zrobić.

Alexey: Teraz mamy doskonały tytuł tego wywiadu: „łatwiej jest odpowiedzieć, niż milczeć”.

Witalij: Zapytam jeszcze raz. Pracujesz nad dowodami topologicznymi. Jak w ogóle się w to zaangażowałeś, skoro przetwarzanie rozproszone i topologia to zupełnie różne rzeczy!

Maurice: Jest w tym ukryte powiązanie. Kiedy byłem studentem matematyki, studiowałem czystą matematykę. Nie interesowałem się komputerami aż do końca studiów i stanąłem przed pilną potrzebą poszukiwania pracy. Jako student studiowałem topologię algebraiczną. Wiele lat później, pracując nad problemem tzw „Problem z umową k-set”, wykorzystałem wykresy do modelowania problemu i, jak się wówczas wydawało, znalazłem rozwiązanie. Trzeba było po prostu usiąść i obejść liczenie. Spróbuj znaleźć odpowiednią odpowiedź na tym wykresie. Ale mój algorytm nie zadziałał: okazało się, że będzie biegał w kółko w nieskończoność. Niestety, tego wszystkiego nie dało się wytłumaczyć w formalnym języku teorii grafów – takim, jaki znają wszyscy informatycy. I wtedy przypomniałem sobie, że wiele lat temu, na zajęciach z topologii, używaliśmy tego pojęcia „uproszczony kompleks”, co jest uogólnieniem wykresów na wyższe wymiary. Następnie zadałem sobie pytanie: co by się stało, gdybyśmy przeformułowali problem w kategoriach uproszczonych kompleksów? To stał się kluczowy moment. Stosując potężniejszy formalizm, problem nagle staje się znacznie prostszy. Ludzie długo z tym walczyli, posługując się wykresami, ale nic nie mogli zrobić. I nawet teraz nie mogą - poprawna odpowiedź okazała się nie algorytmem, ale dowodem na niemożność rozwiązania problemu. Oznacza to, że taki algorytm po prostu nie istnieje. Ale każdy dowód na niemożliwość oparte albo na uproszczonych kompleksach, albo na rzeczach, których ludzie udawali, że nie biorą pod uwagę uproszczonych kompleksów. Tylko dlatego, że nazwiesz coś nową nazwą, nie traci to swojej istoty.

Witalij: Okazuje się, że miałeś po prostu szczęście?

Maurice: Oprócz szczęścia, to także gotowość. Oznacza to, że nie powinieneś zapominać o „bezużytecznych” rzeczach, których nauczyłeś się wcześniej. Im więcej bezużytecznych rzeczy się nauczysz, tym więcej pomysłów będziesz mógł wyciągnąć w obliczu nowego problemu. Tego rodzaju intuicyjne dopasowywanie wzorców jest ważne, ponieważ... Zróbmy tak, to jest łańcuszek: na początku odkryłem, że wykresy w ogóle nie działają lub nie działają w ogóle, przypomniało mi to coś z wydarzeń z ósemki lata temu i lata studenckie, kiedy badaliśmy wszystkie te uproszczone kompleksy. To z kolei pozwoliło mi znaleźć mój stary podręcznik topologii i załadować go z powrotem do głowy. Ale gdyby nie ta stara wiedza, nigdy nie zrobiłbym żadnego postępu w rozwiązaniu pierwotnego problemu.

Nowe wydanie książki „Sztuka programowania wieloprocesorowego”

Alexey: Powiedziałeś kilka słów o swojej książce. To chyba nie jest najgorszy sekret, że napisałeś najsłynniejszą na świecie książkę o wielowątkowości, „Sztuka programowania wieloprocesorowego”. Ma już około 11 lat i od tamtej pory dopiero się wypuszczał  poprawiony przedruk. Czy będzie druga edycja?

Maurice: Dobrze, że zapytałeś! To nastąpi już niedługo, za jakieś trzy miesiące. Jest jeszcze dwóch autorów, dodaliśmy dużo więcej materiału, poprawiliśmy sekcję o równoległości fork/join, napisaliśmy sekcję o MapReduce, dodaliśmy wiele nowych rzeczy i wyrzuciliśmy niepotrzebne rzeczy - coś, co było bardzo interesujące w momencie pisania pierwsze wydanie, ale dziś już go nie ma. W rezultacie powstała bardzo poważnie poprawiona książka.

Alexey: Wszystko już zostało zrobione, pozostaje tylko to wypuścić?

Maurice: Kilka rozdziałów wymaga jeszcze pracy. Nasz wydawca (który, jak sądzę, już nas nienawidzi) wciąż stara się przekazać wiadomość, że powinniśmy działać szybciej. Jesteśmy znacznie opóźnieni w realizacji harmonogramu. Teoretycznie moglibyśmy napisać tę książkę kilka lat wcześniej.

Alexey: Czy jest szansa na otrzymanie nowej wersji książki przed Świętami Bożego Narodzenia?

Maurice: To jest nasz cel! Ale tyle razy przepowiadałem zwycięstwo, że nikt mi już nie wierzy. Prawdopodobnie i w tej kwestii nie powinieneś mi zbytnio ufać.

Aleksiej: W każdym razie to fantastyczna wiadomość. Pierwsze wydanie książki bardzo mi się podobało. Można powiedzieć, że jestem fanem.

Maurice: Mam nadzieję, że nowe wydanie będzie godne Twojego gorącego entuzjazmu, dziękuję!

Jak wynaleziono pamięć transakcyjną

Witalij: Następne pytanie dotyczy pamięci transakcyjnej. O ile rozumiem, jesteś pionierem w tej dziedzinie, wymyśliłeś to w czasach, gdy nikt o takich rzeczach nie myślał. Dlaczego zdecydowałeś się zająć tą dziedziną? Dlaczego transakcje wydawały Ci się ważne? Czy myśleliście, że pewnego dnia zostaną one zaimplementowane sprzętowo?

Maurice: Wiedziałem o transakcjach od czasów studiów podyplomowych.

Witalij: Tak, ale to są różne transakcje!

Maurice: Pracowałem z Elliottem Mossem nad nieblokującym zbieraniem śmieci. Naszym problemem było to, że chcieliśmy atomowo zmienić kilka słów w pamięci i wtedy algorytmy stałyby się bardzo proste, a przynajmniej część z nich stałaby się bardziej wydajna. Za pomocą porównaj i zamień dla link ładowania/warunek przechowywaniazapewniana przez architekturę równoległą, można coś zrobić, ale jest to bardzo nieefektywne i brzydkie, ponieważ trzeba by radzić sobie z warstwami pośrednimi. Chcę zmienić słowa w pamięci i muszę to zmienić, ponieważ mogę zmienić tylko jeden wskaźnik, więc muszą one wskazywać na jakąś strukturę przypominającą katalog. Rozmawialiśmy o tym, jak wspaniale byłoby, gdybyśmy mogli zmienić sprzęt, aby możliwe było jednoczesne nagrywanie. Wydaje się, że Elliott to zauważył: jeśli spojrzysz na protokoły spójności pamięci podręcznej, zapewniają one już większość wymaganej funkcjonalności. W optymistycznej transakcji protokół spójności pamięci podręcznej zauważy konflikt taktowania i pamięć podręczna stanie się nieważny. Co się stanie, jeśli spekulacyjnie przeprowadzisz transakcję w swojej pamięci podręcznej i użyjesz mechanizmów protokołu spójności do wykrywania konfliktów? Spekulacyjna architektura sprzętowa była łatwa do zaprojektowania. Więc napisaliśmy ten już pierwsza publikacja o pamięci transakcyjnej. W tym samym czasie firma, w której pracowałem, Digital Equipment Corporation, tworzyła nowy 64-bitowy procesor o nazwie Alpha. Poszedłem więc i przedstawiłem grupie programistów Alpha prezentację na temat naszej niesamowitej pamięci transakcyjnej, a oni zapytali: Ile dodatkowych przychodów uzyskałaby nasza firma, gdybyśmy dodali to wszystko bezpośrednio do procesora? I nie miałem na to absolutnie żadnej odpowiedzi, bo jestem technologiem, nie specjalistą od marketingu. Naprawdę nie miałem nic do powiedzenia. Nie zrobiło na nich większego wrażenia to, że nic nie wiem.

Witalij: Miliardy! Powiedzmy po prostu: miliardy!

Maurice: Tak, to właśnie powinienem był powiedzieć. Teraz, w dobie startupów i w ogóle, wiem, jak napisać biznesplan. Że można trochę skłamać na temat wielkości potencjalnego zysku. Ale w tamtych czasach wydawało mi się to naiwne, więc po prostu powiedziałem: „Nie wiem”. Jeśli spojrzysz na historię publikacji na temat pamięci transakcyjnej, zauważysz, że po roku pojawiło się kilka wzmianek o niej, a następnie przez około dziesięć lat nikt w ogóle nie cytował tej pracy. Cytaty pojawiły się około 2004 roku, kiedy pojawiły się prawdziwe wielordzeniowce. Kiedy ludzie odkryli, że pisanie kodu równoległego może przynosić zyski, rozpoczęły się nowe badania. Ravi Rajwar napisał artykuł, co w pewnym sensie wprowadziło do głównego nurtu pojęcie pamięci transakcyjnej. (Nota wydawcy: istnieje druga wersja tego artykułu, opublikowana w 2010 roku i dostępna bezpłatnie w formacie PDF). Nagle ludzie zdali sobie sprawę, jak można to wszystko wykorzystać, jak można przyspieszyć tradycyjne algorytmy z blokadami. Dobry przykład czegoś, co w przeszłości wydawało się po prostu interesującym problemem akademickim. I tak, gdyby mnie pan wtedy zapytał, czy uważam, że to wszystko będzie ważne w przyszłości, odpowiedziałbym: oczywiście, ale kiedy dokładnie nie jest jasne. Może za 50 lat? W praktyce okazało się, że trwało to tylko dekadę. To bardzo miłe, gdy coś robisz i już po dziesięciu latach ludzie to zauważają.

Dlaczego warto prowadzić badania w zakresie przetwarzania rozproszonego

Witalij: Jeśli mówimy o nowych badaniach, co doradziłbyś czytelnikom – przetwarzanie rozproszone czy wielordzeniowe i dlaczego? 

Maurice: W dzisiejszych czasach łatwo jest uzyskać procesor wielordzeniowy, ale trudniej jest skonfigurować prawdziwie rozproszony system. Zacząłem nad nimi pracować, bo chciałem zrobić coś innego niż moja praca doktorska. Oto rada, którą zawsze daję nowym studentom: nie pisz kontynuacji swojej pracy dyplomowej – spróbuj pójść w nowym kierunku. A także wielowątkowość jest łatwa. Mogę eksperymentować z własnym widelcem działającym na laptopie, nie wstając z łóżka. Ale gdybym nagle chciał stworzyć prawdziwy system rozproszony, musiałbym włożyć dużo pracy, przyciągnąć studentów i tak dalej. Jestem leniwą osobą i wolę pracować na wielu rdzeniach. Eksperymentowanie na systemach wielordzeniowych jest również łatwiejsze niż przeprowadzanie eksperymentów na systemach rozproszonych, ponieważ nawet w głupim systemie rozproszonym istnieje zbyt wiele czynników, które należy kontrolować.

Witalij: Co teraz robisz, badając blockchain? Na jakie artykuły zwrócić uwagę w pierwszej kolejności?

Maurice: Niedawno się pojawił bardzo dobry artykuł, który napisałam wspólnie z moim uczniem Vikramem Sarafem specjalnie na rozmowę o godz Konferencja Tokenomc w Paryżu trzy tygodnie temu. To artykuł o praktycznych systemach rozproszonych, w którym proponujemy uczynienie Ethereum wielowątkowym. Obecnie inteligentne kontrakty (kod działający na blockchainie) wykonywane są sekwencyjnie. Pisaliśmy wcześniej artykuł, który mówił o sposobie wykorzystania transakcji spekulacyjnych w celu przyspieszenia procesu. Wzięliśmy wiele pomysłów z programowej pamięci transakcyjnej i powiedzieliśmy, że jeśli włączysz te pomysły do ​​maszyny wirtualnej Etherium, wszystko będzie działać szybciej. Ale w tym celu konieczne jest, aby w umowach nie było konfliktów danych. A potem założyliśmy, że w prawdziwym życiu naprawdę nie ma takich konfliktów. Ale nie mieliśmy jak się tego dowiedzieć. Wtedy przyszło nam do głowy, że mamy na rękach prawie dekadę prawdziwej historii kontraktów, więc porzuciliśmy blockchain Ethereum i zadaliśmy sobie pytanie: co by się stało, gdyby te historyczne zapisy były realizowane równolegle? Stwierdziliśmy znaczny wzrost prędkości. Na początku Ethereum prędkość bardzo wzrosła, ale dziś wszystko jest nieco bardziej skomplikowane, ponieważ jest mniej umów i prawdopodobieństwo konfliktów dotyczących danych wymagających serializacji wzrosło. Ale wszystko to jest pracą eksperymentalną z prawdziwymi danymi historycznymi. Zaletą blockchainu jest to, że pamięta wszystko na zawsze, dzięki czemu możemy cofnąć się w czasie i zbadać, co by się stało, gdybyśmy do uruchomienia kodu użyli innych algorytmów. Jak ludziom w przeszłości podobałby się nasz nowy pomysł? Takie badania są dużo łatwiejsze i przyjemniejsze, bo jest coś, co wszystko monitoruje i wszystko rejestruje. To już jest coś bardziej zbliżonego do socjologii niż do rozwoju algorytmów.

Czy rozwój algorytmów się zatrzymał i jak iść dalej?

Witalij: Czas na ostatnie pytanie teoretyczne! Czy masz wrażenie, że postęp w konkurencyjnych strukturach danych maleje z roku na rok? Czy sądzisz, że osiągnęliśmy plateau w rozumieniu struktur danych, czy też nastąpią jakieś istotne ulepszenia? Może istnieją jakieś sprytne pomysły, które mogą całkowicie zmienić wszystko?

Maurice: Być może osiągnęliśmy plateau w zakresie struktur danych dla tradycyjnych architektur. Jednak struktury danych dla nowych architektur są nadal bardzo obiecującym obszarem. Jeśli chcesz utworzyć struktury danych dla, powiedzmy, akceleratorów sprzętowych, struktury danych dla procesora graficznego bardzo różnią się od struktur danych dla procesora. Kiedy opracowujesz struktury danych dla łańcuchów bloków, musisz zahaszować fragmenty danych, a następnie umieścić je w czymś podobnym Drzewo Merkle'a, aby zapobiec podrabianiu. Ostatnio nastąpił gwałtowny wzrost aktywności w tej dziedzinie, a wielu z nich wykonało bardzo dobrą robotę. Myślę jednak, że nowe architektury i nowe aplikacje doprowadzą do powstania nowych struktur danych. Starsze aplikacje i tradycyjna architektura – może nie być już zbyt wiele miejsca na eksplorację. Ale jeśli zejdziesz z utartej ścieżki i spojrzysz poza krawędzie, zobaczysz szalone rzeczy, których mainstream nie traktuje poważnie – to właśnie tam dzieją się wszystkie ekscytujące rzeczy.

Witalij: Dlatego, żeby zostać bardzo sławnym badaczem, musiałem wymyślić własną architekturę :)

Maurice: Można „ukraść” czyjąś nową architekturę – wydaje się to dużo prostsze!

Pracuje na Uniwersytecie Browna

Witalij: Czy możesz nam powiedzieć więcej o Uniwersytet Brownagdzie pracujesz? Niewiele o nim wiadomo w kontekście technologii informatycznych. Mniej niż na przykład na MIT.

Maurice: Brown University jest jednym z najstarszych uniwersytetów w Stanach Zjednoczonych. Myślę, że tylko Harvard jest trochę starszy. Brązowy należy do tzw Liga Bluszczowa, czyli zbiór ośmiu najstarszych uniwersytetów. Harvard, Brown, Cornell, Yale, Kolumbia, Dartmouth, Pensylwania, Princeton. To taki stary, mały i nieco arystokratyczny uniwersytet. Główny nacisk położony jest na edukację w zakresie sztuk wyzwolonych. Nie próbuje być jak MIT, MIT jest bardzo wyspecjalizowany i techniczny. Brown to świetne miejsce do studiowania literatury rosyjskiej, klasycznej greki i oczywiście informatyki. Stawia na wszechstronną edukację. Większość naszych studentów korzysta z Facebooka, Apple, Google - więc myślę, że nasi studenci nie mają problemów ze znalezieniem pracy w branży. Poszedłem do pracy w Brown, ponieważ wcześniej pracowałem w Digital Equipment Corporation w Bostonie. Była to firma, która wynalazła wiele ciekawych rzeczy, ale zaprzeczyła znaczeniu komputerów osobistych. Firma o trudnym losie, której założycielami byli niegdyś młodzi rewolucjoniści, niczego się nie nauczyli i niczego nie zapomnieli, więc w ciągu kilkunastu lat z rewolucjonistów stali się reakcjonistami. Lubili żartować, że komputery osobiste znajdują się w garażu – oczywiście w opuszczonym garażu. Jest rzeczą oczywistą, że zostały one zniszczone przez firmy bardziej elastyczne. Kiedy stało się jasne, że firma ma kłopoty, zadzwoniłem do mojego przyjaciela w Brown, około godziny drogi od Bostonu. Nie chciałem wtedy opuszczać Bostonu, bo na innych uczelniach nie było zbyt wielu ofert pracy. To był czas, kiedy nie było tak wielu zawodów w informatyce, jak obecnie. A Brown miał szansę, nie musiałam przeprowadzać się do domu, nie musiałam przeprowadzać się z rodziną i naprawdę uwielbiam mieszkać w Bostonie! Dlatego zdecydowałem się pojechać do Brown. Lubię to. Studenci są wspaniali, więc nawet nie próbowałam iść gdzie indziej. Podczas mojego urlopu naukowego przez rok pracowałem w Microsoft, przez rok pojechałem do Technion w Hajfie, a teraz będę w Algorand. Mam wielu kolegów na całym świecie i dlatego fizyczna lokalizacja naszych sal lekcyjnych nie jest aż tak ważna. Ale najważniejsi są studenci, oni są tutaj najlepsi. Nigdy nie próbowałem iść gdzie indziej, ponieważ jestem tutaj całkiem szczęśliwy.

Jednak pomimo sławy Browna w Stanach Zjednoczonych, jest on zaskakująco nieznany za granicą. Jak widać, robię teraz wszystko, co w mojej mocy, aby naprawić ten stan rzeczy.

Różnica między badaniami na uniwersytecie i w korporacji

Witalij: OK, następne pytanie dotyczy sprzętu cyfrowego. Byłeś tam jako badacz. Jaka jest różnica pomiędzy pracą w dziale badawczo-rozwojowym dużej firmy a pracą na uniwersytecie? Jakie są zalety i wady?

Maurice: Przez dwadzieścia lat pracowałem w Microsoft, blisko współpracowałem z pracownikami Sun Microsystems, Oracle, Facebooka, a teraz Algorand. Na tej podstawie chcę powiedzieć, że możliwe jest prowadzenie badań na najwyższym poziomie zarówno w firmach, jak i na uczelniach. Istotna różnica jest taka, że ​​w firmie pracuje się z kolegami. Jeśli nagle wpadnę na pomysł na projekt, który jeszcze nie istnieje, muszę przekonać rówieśników, że to dobry pomysł. Jeśli jestem w Brown, mogę powiedzieć moim studentom: pracujmy nad antygrawitacją! Albo odejdą do kogoś innego, albo zajmą się projektem. Tak, będę musiał znaleźć fundusze, będę musiał napisać wniosek o dotację i tak dalej. W każdym razie uczniów zawsze będzie wielu i będziesz mógł podejmować decyzje jednostronnie. Ale na uniwersytecie najprawdopodobniej nie będziesz pracować z ludźmi na twoim poziomie. W świecie badań przemysłowych trzeba najpierw przekonać wszystkich, że warto się podjąć Twojego projektu. Nie mogę nikomu nic zamówić. Obydwa sposoby pracy są wartościowe, bo jeśli pracujesz nad czymś naprawdę szalonym i trudno przekonać współpracowników, łatwiej jest przekonać absolwentów – zwłaszcza jeśli im płacisz. Jeśli pracujesz nad czymś, co wymaga dużego doświadczenia i głębokiej wiedzy specjalistycznej, to potrzebujesz współpracowników, którzy potrafią powiedzieć „nie, tak się składa, że ​​rozumiem w tym obszarze i Twój pomysł jest zły, to nie zadziała”. Jest to bardzo przydatne, jeśli chodzi o marnowanie czasu. Poza tym, jeśli w laboratoriach przemysłowych spędzasz dużo czasu na pisaniu raportów, to na uniwersytecie spędzasz ten czas na poszukiwaniu pieniędzy. Jeśli chcę, żeby studenci mogli gdzieś wyjechać, muszę znaleźć na to pieniądze gdzie indziej. A im ważniejsze jest Twoje stanowisko na uniwersytecie, tym więcej czasu musisz poświęcić na zbieranie pieniędzy. Więc teraz wiesz, po co pracuję - zawodowy żebrak! Jak jeden z tych mnichów, którzy chodzą z talerzem ofiarnym. Generalnie te dwie działalności się uzupełniają. Dlatego staram się żyć i stąpać po ziemi w obu światach.

Witalij: Wygląda na to, że przekonanie firmy jest trudniejsze niż przekonanie innych naukowców.

Maurice: Trudniejsze i dużo więcej. Co więcej, w różnych obszarach jest inaczej: niektórzy prowadzą badania na pełną skalę, a inni skupiają się na swoim temacie. Gdybym poszedł do Microsoftu lub Facebooka i powiedział: zróbmy antygrawitację, raczej by tego nie docenili. Ale gdybym dokładnie to samo powiedział swoim absolwentom, to najprawdopodobniej od razu wzięliby się do pracy, chociaż teraz miałbym problemy – w końcu muszę znaleźć na to pieniądze. Ale jeśli chcesz robić coś, co jest zgodne z celami firmy, ta firma może być bardzo dobrym miejscem do prowadzenia badań.

Hydra i SPTDC

Witalij: Moje pytania dobiegają końca, więc porozmawiajmy trochę o zbliżającej się podróży do Rosji.

Maurice: Tak, nie mogę się doczekać powrotu do Petersburga.

Alexey: Jestem zaszczycony, że mogę Cię gościć w tym roku. To twój drugi raz w Petersburgu, prawda?

Maurice: Już trzeci!

Aleksiej: Rozumiem, ale SPTDC – zdecydowanie to drugie. Ostatni raz dzwoniono do szkoły SPTCC, zmieniliśmy teraz jedną literę (C na D, Równoległe na Rozproszone), aby podkreślić, że w tym roku jest więcej obszarów związanych konkretnie z przetwarzaniem rozproszonym. Czy możesz powiedzieć kilka słów o swoich raportach w Szkole i Konferencja Hydry?

Maurice: W szkole chcę porozmawiać o podstawach blockchain i tym, co można z nim zrobić. Chciałbym pokazać, że blockchainy są bardzo podobne do znanego nam programowania wielowątkowego, ale mają swoje własne niuanse i te różnice są ważne do zrozumienia. Jeśli popełnisz błąd w zwykłej aplikacji internetowej, jest to po prostu denerwujące. Jeśli napiszesz błędny kod w aplikacji finansowej, ktoś na pewno ukradnie wszystkie Twoje pieniądze. To zupełnie różne poziomy odpowiedzialności i konsekwencji. Opowiem trochę o proof-of-work, o inteligentnych kontraktach, o transakcjach pomiędzy różnymi blockchainami.

Obok mnie będą pracować inni mówcy, którzy również mają coś do powiedzenia na temat blockchainu i zgodziliśmy się na wzajemną koordynację, aby nasze historie dobrze do siebie pasowały. Ale w przypadku raportu inżynieryjnego chcę przedstawić szerokiemu gronu odbiorców zrozumiałe wyjaśnienie, dlaczego nie należy wierzyć we wszystko, co słyszy się o blockchainach, dlaczego blockchainy to świetna dziedzina, jak wpasowuje się to w inne znane idee i dlaczego powinniśmy odważnie szukać w przyszłość.

Alexey: Dodatkowo chcę powiedzieć, że nie będzie się to odbywać w formie spotkania czy grupy użytkowników, jak to miało miejsce dwa lata temu. Postanowiliśmy zorganizować małą konferencję w pobliżu szkoły. Powodem jest to, że po rozmowie z Piotrem Kuzniecowem zdaliśmy sobie sprawę, że szkoła jest ograniczona do zaledwie stu, może 120 osób. Jednocześnie jest wielu inżynierów, którzy chcą się z Tobą komunikować, uczestniczyć w prezentacjach i są ogólnie zainteresowani tematem. Z tego powodu stworzyliśmy nową konferencję zwana Hydrą. Swoją drogą, masz jakiś pomysł dlaczego Hydra?

Maurice: Ponieważ będzie siedmiu mówców? A głowy da się obciąć, a na ich miejscu wyrosną nowe głośniki?

Alexey: Świetny pomysł na hodowlę nowych głośników. Ale tak naprawdę jest tu pewna historia. Przypomnij sobie legendę o Odyseuszu, gdzie musiał przepłynąć pomiędzy Skylla i Charybda? Hydra jest czymś w rodzaju Charybdy. Historia jest taka, że ​​kiedyś przemawiałem na konferencji i mówiłem o wielowątkowości. Na tej konferencji były tylko dwa utwory. Na początku relacji powiedziałem widzom na sali, że mają teraz wybór między Scyllą a Charybdą. Moim duchowym zwierzęciem jest Charybda, ponieważ Charybda ma wiele głów, a mój temat jest wielowątkowy. Tak wyglądają nazwy konferencji.

W każdym razie skończyły nam się pytania i czas. Dziękuję zatem, przyjaciele, za wspaniały wywiad i do zobaczenia w szkole SPTDC i Hydrze 2019!

Rozmowę z Maurycym będziesz mógł kontynuować na konferencji Hydra 2019, która odbędzie się w dniach 11-12 lipca 2019 w St. Petersburgu. Przyjdzie z raportem „Blockchains i przyszłość przetwarzania rozproszonego”. Bilety można kupić na oficjalnej stronie internetowej.

Źródło: www.habr.com

Dodaj komentarz