«Үндемегеннен гөрі жауап беру оңай» - транзакциялық жадтың әкесі Морис Херлихимен тамаша сұхбат

«Үндемегеннен гөрі жауап беру оңай» - транзакциялық жадтың әкесі Морис Херлихимен тамаша сұхбат

Морис Херлихи - екінің иесі Dijkstra жүлделері. Біріншісі жұмыс істеуге арналған «Күтусіз синхрондау» (Браун университеті) және екіншісі, соңғысы, - «Транзакциялық жад: құлыпсыз деректер құрылымдарын архитектуралық қолдау» (Виргиния технологиялық университеті). Дийкстра сыйлығы маңыздылығы мен әсері кем дегенде он жыл бойы байқалған жұмыстарға беріледі және Морис осы саладағы ең танымал мамандардың бірі екені анық. Қазіргі уақытта ол Браун университетінде профессор болып жұмыс істейді және параграфқа созылатын көптеген жетістіктерге ие. Ол қазіргі уақытта классикалық таратылған есептеулер контекстінде блокчейнді зерттеп жатыр.

Бұрын Морис Ресейге SPTCC үшін келген болатын (бейнежазба) және Санкт-Петербургте JUG.ru Java әзірлеушілер қауымдастығының тамаша жиналысын өткізді (бейнежазба).

Бұл хабрапост Морис Херлихимен тамаша сұхбат. Ол келесі тақырыптарды талқылайды:

  • Академия мен өндірістің өзара әрекеттесуі;
  • Блокчейнді зерттеу қоры;
  • Серпінді идеялар қайдан келеді? Танымалдылықтың әсері;
  • Барбара Лисковтың жетекшілігімен PhD;
  • Әлем көп ядролыларды күтуде;
  • Жаңа әлем жаңа проблемаларды әкеледі. NVM, NUMA және архитектураны бұзу;
  • Компиляторлар процессорларға қарсы, RISC және CISC, ортақ жад және хабарлама жіберу;
  • Нәзік көп ағынды кодты жазу өнері;
  • Оқушыларды күрделі көп ағынды кодты жазуға үйрету жолы;
  • «Мультипроцессорлық бағдарламалау өнері» кітабының жаңа басылымы;
  • Транзакциялық жады қалай ойлап табылды;   
  • Неліктен үлестірілген есептеулер саласында зерттеу жүргізу керек;
  • Алгоритмдерді әзірлеу тоқтатылды және қалай жүру керек;
  • Браун университетінде жұмыс істеу;
  • Университеттегі және корпорациядағы зерттеулердің айырмашылығы;
  • Гидра және SPTDC.

Сұхбатты жүргізеді:

Виталий Аксенов — қазіргі уақытта IST Austria университетінде пост-доктор және ITMO университетінің компьютерлік технологиялар кафедрасының қызметкері. Бәсекеге қабілетті деректер құрылымдарының теориясы мен тәжірибесі саласында зерттеулер жүргізеді. IST-те жұмыс істемес бұрын ол Париж Дидро университетінде және профессор Петр Кузнецовтың жетекшілігімен ITMO университетінде PhD дәрежесін алды.

Алексей Федоров - әзірлеушілерге арналған конференциялар ұйымдастыратын ресейлік JUG Ru Group компаниясының продюсері. Алексей 50-ден астам конференцияларды дайындауға қатысты және оның түйіндемесінде Oracle (JCK, Java Platform Group) әзірлеуші ​​инженері қызметінен бастап, Одноклассникидегі әзірлеуші ​​лауазымына дейін барлығы қамтылған.

Владимир Ситников - Netcracker компаниясының инженері. Желіні және желілік жабдықты басқару процестерін автоматтандыру үшін байланыс операторлары пайдаланатын NetCracker ОЖ өнімділігі мен ауқымдылығы бойынша он жылдық жұмыс. Java және Oracle Database өнімділік мәселелеріне қызығушылық танытады. Ресми PostgreSQL JDBC драйверінде оннан астам өнімділікті жақсартулардың авторы.

Академия мен өндірістің өзара әрекеттесуі

Алексей: Морис, сіз академиялық ортада өте ұзақ уақыт жұмыс істедіңіз және бірінші сұрақ – академиялық және өндірістік саланың өзара әрекеттесуі. Жақында олардың арасындағы қарым-қатынас қалай өзгергені туралы айта аласыз ба? 20-30 жыл бұрын не болды және қазір не болып жатыр? 

Морис: Мен әрқашан коммерциялық компаниялармен тығыз жұмыс істеуге тырыстым, өйткені олардың қызықты мәселелері бар. Олар, әдетте, өз нәтижелерін жариялауға да, дүниежүзілік қоғамдастыққа өз проблемаларын егжей-тегжейлі түсіндіруге де онша мүдделі емес. Олар тек осы мәселелерді шешуге мүдделі. Мен біраз уақыт осындай компанияларда жұмыс істедім. Мен бес жыл бойы үлкен компьютерлік компания болған Digital Equipment Corporation ғылыми зертханасында толық уақыт жұмыс істедім. Мен аптасына бір күн Sun-та, Microsoft-та, Oracle-да жұмыс істедім және Facebook-те аздап жұмыс жасадым. Енді мен демалысқа шығамын (Америка университетінің профессорына алты жылда бір рет осындай демалыс алуға рұқсат етіледі) және Algorand, бұл Бостондағы криптовалюталық компания. Компаниялармен тығыз жұмыс істеу әрқашан рахат болды, өйткені осылайша сіз жаңа және қызықты нәрселер туралы біле аласыз. Сіз басқалар қазірдің өзінде жұмыс істеп жатқан мәселелердің шешімдерін біртіндеп жақсартумен жұмыс істемей, таңдалған тақырып бойынша мақала жариялайтын бірінші немесе екінші адам болуыңыз мүмкін.

Алексей: Бұл қалай болғанын толығырақ айтып бере аласыз ба?

Морис: Әрине. Білесіз бе, мен Digital Equipment Corporation компаниясында жұмыс істеп жүргенімде Эллиот Мосс екеуміз транзакциялық жадты ойлап таптық. Бұл кез келген адам ақпараттық технологияға қызығушылық таныта бастаған өте жемісті кезең болды. Параллелизм, соның ішінде көп ядролы жүйелер әлі болмағанымен. Sun және Oracle күндерінде мен параллель деректер құрылымдарында көп жұмыс істедім. Facebook-те мен олардың блокчейн жобасында жұмыс істедім, ол туралы айта алмаймын, бірақ ол жақын арада көпшілікке шығады деп үміттенемін. Келесі жылы Algorand-да мен ақылды келісімшарттарды зерттейтін зерттеу тобында жұмыс істеймін.

Алексей: Блокчейн соңғы бірнеше жылда өте танымал тақырыпқа айналды. Бұл сіздің зерттеуіңізге көмектесе ме? Мүмкін бұл гранттар алуды жеңілдетеді немесе салада жұмыс істейтін компаниялардың ресурстарына қол жеткізуді қамтамасыз етеді?

Морис: Мен Ethereum қорынан шағын грант алдым. Блокчейннің танымалдығы студенттерді осы салада жұмыс істеуге шабыттандыруда өте пайдалы. Олар бұған қатты қызығады және қатысуға ынталы, бірақ кейде олар сырт көзге қызықты көрінетін зерттеу шын мәнінде ауыр жұмысты талап ететінін түсінбейді. Дегенмен, мен студенттерді тартуға көмектесу үшін блокчейннің айналасында осы тылсымды қолдануға өте қуаныштымын. 

Бірақ бұл бәрі емес. Мен бірнеше блокчейн стартаптарының консультативтік кеңесіндемін. Олардың кейбіреулері табысқа жетуі мүмкін, кейбіреулері мүмкін емес, бірақ олардың идеяларын көру, оларды зерттеу және адамдарға кеңес беру әрқашан өте қызықты. Ең қызығы, адамдарға бірдеңе жасамауды ескерткенде. Басында көп нәрсе жақсы идея болып көрінеді, бірақ олар шынымен солай ма?

Блокчейнді зерттеу қоры

Виталий: Кейбіреулер болашақ блокчейн мен оның алгоритмдерінде деп ойлайды. Ал басқа адамдар бұл жай ғана көпіршік дейді. Осы мәселе бойынша өз пікіріңізбен бөлісе аласыз ба?

Морис: Блокчейн әлемінде болып жатқан нәрселердің көпшілігі дұрыс емес, кейбіреулері жай ғана алаяқтық, көбісі асыра бағаланған. Дегенмен, бұл зерттеулердің нақты ғылыми негізі бар деп ойлаймын. Блокчейн әлемінің идеологиялық айырмашылықтарға толы екендігі толқу мен берілгендік деңгейін көрсетеді. Екінші жағынан, бұл ғылыми зерттеулер үшін әсіресе тиімді емес. Енді, егер сіз белгілі бір алгоритмнің кемшіліктері туралы айтатын мақаланы жарияласаңыз, нәтижесінде алынған реакция әрқашан толық ғылыми бола бермейді. Көбінесе адамдар эмоцияларын сыртқа шығарады. Менің ойымша, бұл саладағы мұндай толқулар кейбіреулерге тартымды болып көрінуі мүмкін, бірақ күннің соңында нақты ғылыми және инженерлік мәселелер бар, олар шешуді қажет етеді. Мұнда информатика көп.

Виталий: Демек, сіз блокчейндік зерттеулердің негізін қалауға тырысып жатырсыз, солай ма?

Морис: Мен берік, ғылыми және математикалық тұрғыдан негізделген пәннің негізін қалауға тырысамын. Мәселенің бір бөлігі - кейде басқа адамдардың кейбір тым қатал ұстанымдарына қайшы келіп, оларды елемеуге тура келеді. Кейде адамдар мені неге лаңкестер мен есірткі сатушылар ғана қызықтыратын аймақта жұмыс істеймін деп сұрайды. Мұндай реакция сіздің сөзіңізді соқыр қайталайтын ізбасарлардың мінез-құлқы сияқты мағынасыз. Менің ойымша, шындық бір жерде. Блокчейн қоғамға және жаһандық экономикаға қатты әсер етеді. Бірақ бұл заманауи технологияның арқасында мүмкін болмайтын шығар. Заманауи технологиялар дамиды және болашақта блокчейн деп аталатын нәрсе өте маңызды болады. Бұл тіпті заманауи блокчейндерге ұқсамауы мүмкін, бұл ашық сұрақ.

Егер адамдар жаңа технологияларды ойлап тапса, оны блокчейн деп атай береді. Айтайын дегенім, қазіргі Фортранның 1960 жылдардағы Фортран тіліне ешқандай қатысы жоқ, бірақ бәрі оны Фортран деп атайды. UNIX үшін де солай. «Блокчейн» деп аталатын нәрсе әлі де революция жасайды. Бірақ мен бұл жаңа блокчейн бүгінде барлығына ұнайтын нәрсеге ұқсайтынына күмәнім бар.

Серпінді идеялар қайдан келеді? Танымалдықтың әсері

Алексей: Блокчейннің танымалдығы ғылыми тұрғыдан жаңа нәтижелерге әкелді ме? Көбірек өзара әрекеттесу, көбірек студенттер, аймақта көбірек компаниялар. Бұл танымалдықтың артуына байланысты қандай да бір нәтиже бар ма?

Морис: Біреу маған қомақты ақша жинаған компанияның ресми парақшасын бергенде, мен бұған қызығушылық таныттым. Ол туралы жазған Византия генералдарының міндеті, мен онымен таныс емеспін. Парақшада жазылғандар техникалық тұрғыдан дұрыс емес екені анық. Осының бәрін жазған адамдар мәселенің астарындағы үлгіні түсінбеді... сонда да бұл компания көп ақша жинады. Кейіннен компания бұл парақшаны әлдеқайда дұрыс нұсқасымен үнсіз ауыстырды - мен бұл компанияның атауын айтпаймын. Олар әлі де айналасында және өте жақсы жұмыс істейді. Бұл оқиға мені, біріншіден, блокчейн жай ғана таратылған есептеулердің бір түрі екеніне сендірді. Екіншіден, кіру шегі (кем дегенде, төрт жыл бұрын) өте төмен болды. Бұл салада жұмыс істейтін адамдар өте жігерлі, зерделі болғанымен, ғылыми еңбектерді оқымайтын. Олар белгілі нәрселерді қайта ойлап табуға тырысты және оны қате жасады. Бүгінде драма азайып кетті.

Алексей: Бұл өте қызық, өйткені бірнеше жыл бұрын бізде басқа үрдіс болды. Бұл браузерге негізделген алдыңғы қатарлы әзірлеушілер бэк-эндте бұрыннан танымал болған барлық технологияларды қайта ойлап тапқан кездегі алдыңғы қатарлы әзірлеуге ұқсайды: жүйелерді құру, үздіксіз интеграция және т.б. 

Морис: Мен келісемін. Бірақ бұл таңқаларлық емес, өйткені шын мәнінде серпінді идеялар әрқашан қалыптасқан қауымдастықтан тыс келеді. Белгілі зерттеушілер, әсіресе белгілі академиктер, шын мәнінде жаңашыл нәрсе жасай алмайды. Келесі конференцияға бұрынғы жұмысыңыздың нәтижелерін қалай жақсартқаныңыз туралы мақала жазу оңай. Конференцияға барыңыз, достарыңызбен жиналыңыз, бір нәрсе туралы сөйлесіңіз. Ал серпінді идеялармен жарылған адамдар әрдайым дерлік сырттан келеді. Олар ережені білмейді, тілді білмейді, бірақ соған қарамастан... Егер сіз қалыптасқан қауымдастықтың ішінде болсаңыз, мен сізге жаңа нәрселерге, жалпы суретке сәйкес келмейтін нәрсеге назар аударуға кеңес беремін. Белгілі бір мағынада, біз бұрыннан түсінетін әдістермен сыртқы, неғұрлым жеңіл әзірлемелерді біріктіруге тырысуға болады. Бірінші қадам ретінде ғылыми негізді орнатуға тырысыңыз, содан кейін оны жаңа серпінді идеяларға қолдануға болатындай етіп өзгертіңіз. Менің ойымша, блокчейн жаңа, бұзатын идея болу үшін тамаша.

Алексей: Неліктен бұлай болды деп ойлайсың? Өйткені «сырттағы» адамдар қауымдастыққа тән ерекше кедергілерге ие емес пе?

Морис: Бұл жерде бір үлгі бар. Кескіндемедегі және жалпы өнердегі импрессионистердің тарихын оқысаңыз, бір кездері әйгілі суретшілер импрессионизмді жоққа шығарды. Олар мұны балалық деп айтты. Бір ұрпақтан кейін бұл бұрын қабылданбаған өнер түрі стандартқа айналды. Мен өз саламда көретінім: блокчейннің өнертапқыштары билікке, жарияланымдар мен дәйексөздер индексін арттыруға қызығушылық танытпады, олар тек жақсы нәрсе жасағысы келді. Сөйтіп олар отыра бастады. Оларда белгілі бір техникалық тереңдік жетіспеді, бірақ оны түзетуге болады. Жеткіліксіз жетілгендерді түзетіп, нығайтудан гөрі жаңа шығармашылық идеяларды шығару әлдеқайда қиын. Осы өнертапқыштардың арқасында менде енді бір нәрсе істеу керек!

Алексей: Бұл стартаптар мен бұрынғы жобалар арасындағы айырмашылыққа ұқсас. Біз ойлаудың көптеген шектеулерін, кедергілерді, ерекше талаптарды және т.б.

Морис: Жақсы ұқсастық - бұл таратылған есептеулер. Блокчейнді стартап және таратылған есептеуіштерді ірі, қалыптасқан компания ретінде елестетіп көріңіз. Бөлінген есептеулер блокчейнмен біріктірілуде.

Барбара Лисковтың жетекшілігімен PhD докторы

Виталий: Бізде әлі көп сұрақтар бар! Біз сіздің тарихыңызды зерттеп, докторлық дәрежеңіз туралы қызықты дерекке тап болдық. Иә, бұл баяғыда болды, бірақ маңызды тақырып сияқты. Сіз PhD дәрежесін өзіңіздің жетекшілігіңізбен алдыңыз Барбара Лисков! Барбара бағдарламалау тілдері қауымдастығында өте танымал және жалпы алғанда өте танымал адам. Сіздің зерттеуіңіз бағдарламалау тілдері саласында болғаны қисынды. Параллельді есептеулерге қалай ауыстыңыз? Неліктен тақырыпты өзгертуді шештіңіз?

Морис: Ол кезде Барбара мен оның тобы жай ғана таратылған есептеулерді қарастырды, бұл өте жаңа идея болды. Үлестірмелі есептеулер бос сөз, ал компьютерлердің бір-бірімен байланысы мағынасыз дегендер де болды. Бөлінген есептеулерде оны орталықтандырылған есептеулерден ерекшелендіретін мәселелердің бірі – ақауларға төзімділік. Көп зерттеулерден кейін біз таратылған есептеуіш бағдарламалау тілінде атомдық транзакциялар сияқты нәрсе болуы керек деп шештік, өйткені қашықтағы қоңыраудың сәтті болатынына ешқашан сенімді бола алмайсыз. Сізде транзакциялар болғаннан кейін параллельді басқару мәселесі туындайды. Содан кейін жоғары параллельді транзакциялық деректер құрылымдарын алу бойынша көп жұмыс болды. Одан кейін оқуымды бітірген соң бардым Карнеги Меллон және жұмыс істейтін тақырыпты іздей бастады. Менің ойымша, есептеуіш жеке компьютерлерден компьютерлер желісіне ауысты. Мультипроцессорлар прогресстің табиғи жалғасы болар еді - «көп ядролы» сөзі әлі болған жоқ. Мен ойладым: көп ядролы жүйе үшін атомдық транзакциялардың баламасы қандай? Әрине, тұрақты транзакциялар емес, өйткені олар тым үлкен және ауыр. Міне, менің ойыма осылай келді сызықтық Осылайша мен күтусіз синхрондауды ойлап таптым. Бұл ортақ жады бар мультипроцессорлық жүйе үшін атомдық транзакциялардың аналогы қандай деген сұраққа жауап беру әрекеті болды. Бір қарағанда бұл шығарма мүлде басқаша болып көрінгенімен, шын мәнінде бұл бір тақырыптың жалғасы.

Әлем көп ядроны күтуде

Виталий: Сіз ол кезде көп ядролы компьютерлер өте аз болғанын айттыңыз, солай емес пе?

Морис: Олар жай ғана сонда болмады. Негізінде бір автобусқа қосылған бірнеше симметриялық мультипроцессорлар болды. Бұл өте жақсы жұмыс істемеді, өйткені жаңа компания ұқсас нәрсені жасаған сайын Intel мультипроцессордан жоғары болатын жалғыз процессорды шығаратын.

Алексей: Бұл ежелгі дәуірде бұл теориялық зерттеу болғанын білдірмейді ме?

Морис: Бұл теориялық емес, алыпсатарлық зерттеу болды. Мұның бәрі көптеген теоремалармен жұмыс істеу туралы емес, біз сол кезде болмаған архитектура туралы гипотезаларды алға тарттық. Бұл зерттеу үшін! Ешбір компания мұндай нәрсені жасамас еді; мұның бәрі алыс болашақта болатын. Шын мәнінде, бұл нақты көп ядролы процессорлар пайда болған 2004 жылға дейін болды. Процессорлар қызып кеткендіктен, процессорды одан да кішірейте аласыз, бірақ оны жылдамдата алмайсыз. Осыған байланысты көп ядролы архитектураға көшу болды. Содан кейін бұл кенеттен біз бұрын әзірлеген барлық концепцияларды пайдалану пайда болды дегенді білдіреді.

Алексей: Неліктен көп ядролы процессорлар XNUMX жылдары ғана пайда болды деп ойлайсыз? Ендеше неге сонша кеш?

Морис: Бұл аппараттық шектеулерге байланысты. Intel, AMD және басқа компаниялар процессор жылдамдығын жоғарылатуда өте жақсы. Бір сәтте процессорлар жеткілікті түрде кішкентай болған кезде, олар бұдан былай сағат жылдамдығын арттыра алмады, өйткені процессорлар күйіп кете бастайды. Сіз оларды кішірейте аласыз, бірақ тезірек емес. Олардың қолында не бар - өте кішкентай процессордың орнына олар сегіз, он алты немесе отыз екі процессорды корпустың бірдей көлеміне сыйдыра алады, бұрын тек біреуі ғана сыйды. Енді сізде олардың арасында көп ағынды және жылдам байланыс бар, себебі олар кэштерді ортақ пайдаланады. Бірақ сіз оларды жылдамырақ жүгіруге мәжбүрлей алмайсыз - өте нақты жылдамдық шегі бар. Олар бірте-бірте жақсарады, бірақ бұдан былай онша емес. Физика заңдары жетілдіру жолында тұрды.

Жаңа әлем жаңа проблемаларды әкеледі. NUMA, NVM және архитектураны бұзу

Алексей: Өте орынды естіледі. Жаңа көп ядролы процессорлармен жаңа мәселелер пайда болды. Сіз және сіздің әріптестеріңіз бұл проблемаларды күттіңіз бе? Мүмкін сіз оларды алдын ала зерттеген шығарсыз? Теориялық зерттеулерде мұндай нәрселерді болжау көбінесе оңай емес. Қиындықтар туындаған кезде олар сіздің және әріптестеріңіздің үміттерін қалай қанағаттандырды? Немесе олар мүлдем жаңа болды ма және сіз және сіздің әріптестеріңіз пайда болған мәселелерді шешуге көп уақыт жұмсауға тура келді ме?

Виталий: Мен Алексейдің сұрағына қосайын: теорияны оқып жатқанда процессордың архитектурасын дұрыс болжай алдыңыз ба?

Морис: 100% емес. Бірақ менің әріптестерім мен ортақ жады бар көп ядроларды болжауда жақсы жұмыс жасадым деп ойлаймын. Менің ойымша, біз құлыпсыз жұмыс істейтін параллельді деректер құрылымдарын әзірлеудегі қиындықтарды дұрыс болжадық. Мұндай деректер құрылымдары көптеген қолданбалар үшін маңызды болды, бірақ бәрі болмаса да, бірақ көбінесе сізге құлыпталмаған деректер құрылымы қажет. Біз оларды ойлап тапқан кезде, көпшілігі бұл нонсенс екенін, құлыптармен бәрі жақсы жұмыс істейтінін айтты. Біз көптеген бағдарламалау мәселелері мен деректер құрылымы мәселелеріне дайын шешімдер болатынын жақсы болжадық. сияқты күрделі мәселелер де болды IN – жадқа біркелкі қол жеткізу. Шын мәнінде, олар тым ерекше болғандықтан, көп ядролы процессорлар ойлап табылмайынша, олар тіпті қарастырылмады. Зерттеу қауымдастығы жалпы болжауға болатын сұрақтармен жұмыс істеді. Белгілі бір архитектурамен байланысты кейбір аппараттық мәселелер қанаттарда күтуге тура келді - шын мәнінде, осы архитектуралардың пайда болуы. Мысалы, GPU-ға тән деректер құрылымдарында шынымен де ешкім жұмыс істемеді, өйткені GPU ол кезде болмаған. Көптеген жұмыстар атқарылғанымен SIMD, бұл алгоритмдер қолайлы жабдық қол жетімді болған кезде пайдалануға дайын болды. Дегенмен, бәрін алдын ала болжау мүмкін емес.

Алексей: Егер мен дұрыс түсінсем, NUMA - бұл құн, өнімділік және басқа да нәрселер арасындағы ымыраның бір түрі. NUMA неге кеш шыққаны туралы қандай да бір түсінік бар ма?

Морис: Менің ойымша, NUMA жадты шығару үшін қолданылатын аппараттық құралдарға қатысты мәселелерге байланысты бар: құрамдас бөліктер неғұрлым алыс болса, оларға қол жеткізу соғұрлым баяу болады. Екінші жағынан, бұл абстракцияның екінші мәні - есте сақтаудың біркелкілігі. Сонымен, параллельді есептеулердің бір сипаттамасы - барлық абстракциялар аздап бұзылады. Егер қол жеткізу біркелкі болса, барлық жад бірдей қашықтықта болар еді, бірақ бұл экономикалық және мүмкін физикалық тұрғыдан мүмкін емес. Сондықтан бұл қақтығыс туындайды. Егер сіз бағдарламаңызды жад біркелкі сияқты жазсаңыз, ол дұрыс болуы мүмкін. Бұл қате жауаптар бермейді деген мағынада. Бірақ оның өнері аспандағы жұлдыздарды да ұстай алмайды. Сол сияқты, егер сіз жазсаңыз спинлоктар Кэш иерархиясын түсінбестен, блоктаудың өзі дұрыс болады, бірақ өнімділік туралы ұмытуға болады. В каком-то смысле, вы должны писать программы, живущие поверх очень простой абстракции, но вы должны перехитрить людей, которые эту абстракцию вам предоставили: вы обязаны знать, что под абстракцией лежит некая иерархия памяти, что есть шина между вами и этой памятью, тағыда басқа. Осылайша, жеке пайдалы абстракциялар арасында кейбір қайшылықтар бар, бұл бізді өте нақты және прагматикалық мәселелерге әкеледі.

Виталий: Болашақ ше? Процессорлардың әрі қарай қалай дамитынын болжай аласыз ба? Жауаптардың бірі транзакциялық жады деген түсінік бар. Сізде басқа нәрсе бар шығар.

Морис: Алда бірнеше маңызды міндеттер тұр. Біреуі, когерентті есте сақтау керемет абстракция, бірақ ол ерекше жағдайларда бұзыла бастайды. Мәселен, мысалы, NUMA біркелкі жады бар деп көрсетуді жалғастыра алатын нәрсенің тірі мысалы. Шын мәнінде жоқ, өнімділік сізді жылатады. Бір кездері сәулетшілер біртұтас жады архитектурасы идеясынан бас тартуға мәжбүр болады, сіз мәңгілік көріне алмайсыз. Қолдану оңай және негізгі жабдықты тиімді ету үшін жеткілікті қуатты жаңа бағдарламалау үлгілері қажет болады. Бұл өте қиын ымыраға келу, өйткені бағдарламашыларға аппараттық құралда шын мәнінде қолданылатын архитектураны көрсетсеңіз, олар есінен танып қалады. Бұл тым күрделі және портативті емес. Тым қарапайым интерфейсті ұсынсаңыз, өнімділік нашар болады. Осылайша, шын мәнінде үлкен көп ядролы процессорларға қолданылатын пайдалы бағдарламалау үлгілерін қамтамасыз ету үшін көптеген өте қиын айырбастарды жасау қажет болады. Маманнан басқа ешкімнің 2000 ядролы компьютерде бағдарлама жасай алатынына сенімді емеспін. Егер сіз өте мамандандырылған немесе ғылыми есептеулермен немесе криптографиямен немесе соған ұқсас нәрсемен айналыспасаңыз - мұны қалай дұрыс жасау керектігі әлі анық емес. 

Тағы бір ұқсас сала - арнайы архитектуралар. Графикалық үдеткіштер бұрыннан бар, бірақ олар есептеудің мамандандырылған түрін алып, оны арнайы чипте іске қосудың классикалық мысалы болды. Бұл өз қиындықтарын қосады: мұндай құрылғымен қалай байланысу керек, оны қалай бағдарламалайсыз. Мен жақында облыстағы мәселелермен айналыстым жадты есептеуге жақын. Сіз шағын процессорды алып, жадтың L1 кэш жылдамдығында жұмыс істеуі үшін оны жадтың үлкен бөлігіне жабыстырасыз, содан кейін келесідей құрылғымен байланысады. TPU – процессор жад өзегіне жаңа тапсырмаларды жүктеумен бос емес. Бұл үшін деректер құрылымдарын және байланыс протоколдарын жобалау тағы бір қызықты мысал болып табылады. Сондықтан реттелетін процессорлар мен аппараттық құралдар біршама уақыт бойы жақсартуларды көре береді.

Алексей: Тұрақты жады туралы не деуге болады (тұрақты жад)?

Морис: О, бұл тағы бір керемет мысал! NVM деректер құрылымдары сияқты нәрселерге көзқарасымызды айтарлықтай өзгертеді. Тұрақты емес жад, белгілі бір мағынада, шынымен де жылдамдатуға уәде береді. Бірақ бұл өмірді жеңілдетпейді, өйткені процессорлардың, кэштердің және регистрлердің көпшілігі әлі де тұрақсыз. Сіз апаттан кейін іске қосқан кезде, сіздің күйіңіз бен жадыңыздың күйі апатқа дейінгімен бірдей болмайды. Мен NVM-де жұмыс істейтін адамдарға өте ризамын - зерттеушілердің дұрыстық шарттарын анықтауға тырысатын ұзақ уақыт жұмысы көп болады. Кэштер мен регистрлердің мазмұны жоғалған, бірақ негізгі жады өзгеріссіз қалатын апатқа төтеп бере алатын болса, есептеулер дұрыс.

Компиляторлар процессорларға қарсы, RISC және CISC, ортақ жад және хабарлама жіберу

Владимир: Нұсқаулар жиынтығы тұрғысынан «компиляторлар мен процессорлар» дилеммасы туралы не ойлайсыз? Білмейтіндерге түсіндірейін: егер біз қисық жадқа немесе соған ұқсас нәрсеге барсақ, біз өте қарапайым пәрмендер жинағын пайдаланып, компилятордан жаңа артықшылықтарды пайдалана алатын күрделі кодты жасауды сұрай аламыз. Немесе біз басқа жолмен жүре аламыз: күрделі нұсқауларды орындаңыз және процессордан нұсқауларды қайта реттеуді және олармен басқа манипуляцияларды жасауды сұраңыз. Бұл туралы не ойлайсыз?

Морис: Менде бұл сұраққа нақты жауап жоқ. Бұл пікірталас қырық жыл бойы жалғасып келеді. Арасында бір кез болды қысқартылған командалар жинағы және күрделі азаматтық соғыстар командалар жиынтығымен жүргізілді. Біраз уақыт бойы RISC адамдары жеңіске жетті, бірақ содан кейін Intel қозғалтқыштарын қысқартылған нұсқаулар жинағы ішкі қолданылып, ал толық жиынтығы сыртқа экспортталатын етіп қайта жасады. Бұл әрбір жаңа ұрпақ өз ымырасын тауып, өзінше шешім қабылдауы тиіс тақырып болса керек. Бұлардың қайсысы жақсырақ болатынын болжау өте қиын. Сондықтан мен жасаған кез келген болжам белгілі бір уақытқа дейін шындық болады, содан кейін біраз уақытқа қайтадан жалған болады, содан кейін қайтадан шындық болады.

Алексей: Кейбір идеялардың бірнеше ондаған жылдар бойы жеңіске жетіп, келесіде жеңіліп қалуы сала үшін қаншалықты жиі кездеседі? Осындай мерзімді өзгерістердің басқа мысалдары бар ма?

Морис: Бөлінген есептеулер тақырыбына сенетін адамдар бар ортақ жады және сенетін адамдар хабар алмасу. Бастапқыда үлестірілген есептеулерде параллельді есептеулер хабарламаны жіберуді білдіреді. Содан кейін біреу ортақ жадымен бағдарламалау әлдеқайда оңай екенін анықтады. Қарсы тарап ортақ жадтың тым күрделі екенін айтты, өйткені ол құлыптарды және т.б. қажет етеді, сондықтан хабарлама жіберуден басқа ештеңе жоқ тілдерге көшкен жөн. Біреу бұдан шыққан нәрсеге қарап: «Ой, бұл хабар алмасуды іске асыру ортақ жадқа ұқсайды, өйткені сіз осы шағын модульдерді көп және көп жасайсыз, олар бір-біріне хабарламалар жібереді және олардың барлығы блоктау«Жақсы ортақ жад дерекқорын жасайық!» Осының бәрі қайта-қайта қайталанып, тараптардың бірін сөзсіз дұрыс деп айту мүмкін емес. Тараптардың бірі әрқашан үстемдік етеді, өйткені олардың біреуі жеңе салысымен, адамдар екіншісін жақсартудың жолдарын қайта-қайта ойлап табады.

Сынғыш көп ағынды кодты жазу өнері

Алексей: Бұл өте қызық. Мысалы, кодты жазғанда, қандай бағдарламалау тіліне қарамастан, әдетте оқуға және жазуға болатын ұяшықтар сияқты абстракцияларды жасауға тура келеді. Бірақ шын мәнінде, кейбір физикалық деңгейде бұл әртүрлі компьютерлер мен басқа құрылғылар арасында аппараттық шиналар арқылы хабарлама жіберу сияқты көрінуі мүмкін. Абстракцияның екі деңгейінде де жұмыс бірден жүреді екен.

Морис: Ортақ жадтың хабар алмасуға құрылғаны – автобустар, кэштер және т.б. Бірақ хабарды жіберу арқылы бағдарламаларды жазу қиын, сондықтан аппараттық құрал әдейі өтірік айтады, сізде біркелкі жады бар деп кейіп танытады. Бұл өнімділік нашарлай бастағанға дейін қарапайым, дұрыс бағдарламаларды жазуды жеңілдетеді. Сонда сіз айтасыз: кэшпен достасатын кез келген сияқты. Содан кейін сіз кэштің орналасқан жері туралы алаңдай бастайсыз, содан кейін ол кетеді. Белгілі бір мағынада сіз абстракцияны бұзып жатырсыз: сіз бұл жай ғана тегіс, біркелкі жад емес екенін білесіз және сіз бұл білімді кэшке ыңғайлы бағдарламалар жазу үшін пайдаланасыз. Бұл сізге нақты мәселелерде істеу керек. Сізге берілген тәтті, қарапайым, жақсы абстракция мен негізгі жабдықтың жан түршігерлік күрделі іске асырылуы арасындағы бұл қайшылық әркім өз ымыраға келуге мүмкіндік береді. Менде мультипроцессорлар және синхрондау туралы кітабым бар және бір сәтте мен деректер құрылымдары туралы тарауды жазғым келді. java.util.concurrent. Егер сіз оларға қарасаңыз, сияқты нәрселер қалдырылған тізімдер Бұл таңғажайып өнер туындылары. (Редактордың ескертпесі: Java тілімен таныстар, кем дегенде, іске асыруды қарастыруы керек ConcurrentSkipListMap, сілтемелерінен қарай аласыз API и бастапқы код). Бірақ менің көзқарасым бойынша, оларды студенттерге көрсету жауапсыздық болар еді, өйткені мұндай деректер құрылымы цирктегі жігіттің аю шұңқырының үстінде жіппен жүгіріп жүргеніне ұқсайды. Егер сіз тіпті бір ұсақ бөлшектерді өзгертсеңіз, бүкіл құрылым құлап кетеді. Бұл код өте жылдам және талғампаз, өйткені ол тамаша жазылған, бірақ ең аз өзгеріс толық сәтсіздікке әкеледі. Егер мен бұл кодты студенттерге мысал ретінде берсем, олар бірден айтады: менің де қолымнан келеді! Сосын әлдебір ұшақ апатқа ұшырайды немесе ядролық реактор жарылады, мен оларға дұрыс емес уақытта тым көп ақпарат бергені үшін кінәлі боламын.

Алексей: Мен кішкентай кезімде Даг Лидің бастапқы кодын көп рет зерттеуге тырыстым, мысалы, java.util.concurrent, бұл ашық бастапқы код болғандықтан, оны табу өте оңай және онда не болып жатқанын түсінуге тырысады. Бұл өте жақсы нәтиже бермеді: көбіне Дуг неге бұлай істеуге шешім қабылдағаны түсініксіз, ал басқалары мұны басқаша жасайды. Сіз бұл нәрселерді студенттеріңізге қалай түсіндіресіз? Мысалы, хардкор алгоритмінің нақты мәліметтерін сипаттаудың дұрыс жолы бар ма? Мұны қалай істейсіз?

Морис: Сызу мұғалімдерінің алдымен есте қалатын клишелері бар: егер сіз Пикассо сияқты сурет салғыңыз келсе, алдымен қарапайым шынайы суреттер салуды үйренуіңіз керек, ал ережелерді білгенде ғана оларды бұзуға кірісе аласыз. Егер сіз бірден ережені бұзудан бастасаңыз, сіз тәртіпсіздікке ұшырайсыз. Біріншіден, мен студенттерге өнімділік туралы алаңдамай қарапайым, дұрыс кодты жазуды үйретемін. Менің айтайын дегенім, мұнда күрделі уақыт мәселелері бар, сондықтан кэштер туралы алаңдамаңыз, жад үлгілері туралы алаңдамаңыз, барлығы дұрыс жұмыс істейтініне көз жеткізіңіз. Бұл қазірдің өзінде жеткілікті қиын: заманауи бағдарламалау өздігінен оңай емес, әсіресе жаңа студенттер үшін. Оларда дұрыс бағдарламаларды қалай жазу керектігі туралы түйсігі болған кезде, мен айтамын: осы екі спинлокты іске асыруға қараңыз: біреуі өте баяу, екіншісі өте емес, бірақ жақсы. Дегенмен, математикалық тұрғыдан екі алгоритм бірдей. Іс жүзінде олардың біреуі кэш локализациясын пайдаланады. Олардың бірі жергілікті кэштелген деректерде жұмыс істейді, ал екіншісі шина бойынша бірнеше рет операцияларды орындайды. Егер сіз оның не екенін түсінбесеңіз және абстракцияны бұзып, негізгі құрылымды қалай қарау керектігін білмесеңіз, тиімді код жаза алмайсыз. Бірақ сіз мұны бірден бастай алмайсыз. Мұны бірден бастап, өздерінің данышпандығына сенетін адамдар бар, әдетте бұл принциптерді түсінбегендіктен жаман аяқталады. Ешкім Пикассо сияқты сурет салмайды немесе бірінші аптасында колледжді жаңа бітірген Дуг Ли сияқты бағдарламалар жазбайды. Мұндай білім деңгейіне жету үшін жылдар қажет.

Алексей: Сіз мәселені екі бөлікке бөлесіз бе: бірінші - дұрыстық, екіншісі - өнімділік?

Морис: Дәл. Және дәл осы ретпен. Мәселенің бір бөлігі жаңадан келген студенттердің дұрыстыққа жету қиын екенін түсінбейді. Бір қарағанда олар: бұл дұрыс екені анық, оны тездету ғана қалады. Сондықтан кейде мен оларға бастапқыда дұрыс емес алгоритмді дұрыс сияқты айтып беремін.

Оқушыларды күрделі көп ағынды кодты жазуға қалай үйрету керек

Алексей: Олар аулауды сезе алатынын білу үшін бе?

Морис: Мен кейде дұрыс емес алгоритмдерді ұсынатынымды алдын ала ескертемін. Адамдарды алдамау керек. Мен оларға ақпаратты аздап қабылдауды ұсынамын. Егер мен бірдеңе айтсам: «қараңыз, бұл дұрыс» - бұл бір жерде олар сізді алдағысы келетінін білдіреді және сіз сұрақ қоюды бастауыңыз керек. Әрі қарай, мен студенттерді үнемі сұрақ қоюға ынталандыруға тырысамын, содан кейін мен: «Егер біз заттарды сол күйінде қалдырсақ не болады?» Деп ұсынамын. Және олар қатені бірден көреді. Бірақ студенттерді дұрыстық туралы алаңдау керек екеніне сендіру, бірінші көзқараста көрінгеннен әлдеқайда қиын. Бұл студенттердің көпшілігі орта мектепте бағдарламалау тәжірибесімен келеді, кейбіреулері жұмысқа орналасып, сол жерде бағдарламалаумен айналысты және олардың барлығы сенімділікке толы. Бұл армия сияқты нәрсе: сіз оларды туындаған мәселелерді шешуге шыдамдылықпен қарауға сендіру үшін алдымен олардың көңіл-күйін өзгертуіңіз керек. Немесе бұл будда монахтары сияқты болуы мүмкін: алдымен олар дұрыстық туралы пайымдауды үйренеді, ал дұрыстық туралы пайымдау жолдарын түсінгеннен кейін оларға келесі деңгейге өтуге және өнімділік туралы алаңдауға рұқсат етіледі.

Алексей: Яғни, кейде сіз студенттерге жұмыс істемейтін мысалдарды көрсетесіз, соның арқасында сіз олардың мәселенің мәнін түсінетінін, қате кодты және қате нәтижені таба алатындарын көрсететін кері байланыс аласыз. Сонымен, студенттер сізді әдетте қуантады ма, әлде ренжітеді ме?

Морис: Оқушылар әрқашан дерлік қатені табады. Егер олар тым баяу іздейтін болса, мен жетекші сұрақтар қоямын және бұл жерде сіз оларды ешқашан алдамасаңыз, олар сіздің сөздеріңізді түпкілікті шындық ретінде санасыз қабылдай бастайтынын түсіну маңызды. Содан кейін олар сабақ кезінде ноутбукта Facebook-ты оқып отырып, жалығып, ұйықтай бастайды. Бірақ оларға алданып қалатындарын, айланы сезбесе ақымақ болып көрінетінін алдын ала айтсаң, олар әлдеқайда қырағы болады. Бұл әртүрлі жолдармен жақсы. Студенттердің мәселені түсініп қана қоймай, мұғалімнің беделіне күмәнданғанын қалаймын. Мұндағы ой оқушы кез келген уақытта қолын көтеріп: «Менің ойымша, жаңа айтқан сөзіңіз дұрыс емес. Бұл оқудың маңызды құралы. Мен студенттердің ешқайсысының отырып, үнсіз ойланғанын қаламаймын: мұның бәрі нонсенс сияқты көрінеді, бірақ қолды көтеру тым қорқынышты, және бәрібір, ол профессор, сондықтан оның айтқанының бәрі шындық. Сондықтан, егер олар айтылғанның бәрі міндетті түрде шындыққа сәйкес келмейтіні туралы алдын ала ескертілген болса, олар материалға көбірек көңіл бөлуге ынталандырады. Қол көтеріп, сұрақ қоюдың дұрыс екенін түсіндіремін. Сіздің сұрағыңыз ақымақ немесе аңғал болып көрінуі мүмкін, бірақ ең жақсы сұрақтар жиі осылай туындайды.

Алексей: Өте қызық. Әдетте адамдарда профессорға сұрақ қоюға мүмкіндік бермейтін қандай да бір психологиялық кедергі болады. Әсіресе, бөлмеде адам көп болса және бәрі сіздің ақымақ сұрағыңызды талқылау осы адамдардың уақытын алады деп қорқады. Мұнымен күресудің амалдары бар ма?

Морис: Мен жиі тоқтап, классикалық сұрақтар қоямын. Мәлімдеме дұрыс бола ма, әлде олар талқыланатын мәселені қалай шешеді. Бұл негізгі әрекет, әсіресе сабақтың басында адамдар тіпті ең кішкентай нәрсені айтуға ұялатын кезде. Сіз студенттерге сұрақ қоясыз және одан әрі ештеңе айтпайсыз. Тыныштық орнайды, бәрі аздап шиеленіседі, шиеленіс күшейеді, содан кейін кенеттен біреу шыдай алмай, бұзылып, жауап береді. Жағдайды осылай өзгертесіз: үндемеуді жалғастыру жауап беруден гөрі қиынырақ және ыңғайсыз болады! Бұл стандартты педагогикалық трюк. Әлемдегі әрбір мұғалім мұны қалай жасау керектігін білуі керек.

Алексей: Енді бізде бұл сұхбаттың тамаша атауы бар: «үндемеуден гөрі жауап беру оңай».

Виталий: Тағы да сұрайыншы. Сіз топологиялық дәлелдемелермен жұмыс істеп жатырсыз. Сіз бұған қалай араластыңыз, өйткені бөлінген есептеулер мен топология мүлдем басқа нәрсе!

Морис: Онда жасырын байланыс бар. Математиканы оқитын студент кезімде таза математиканы оқыдым. Оқуым аяқталмайынша менде компьютерге деген қызығушылық болмады және мен жұмыс іздеудің өзекті қажеттілігіне тап болдым. Студент кезімде мен алгебралық топологияны оқыдым. Көп жылдар өткен соң, жұмыс істеп жатқанда, деп аталатын мәселе "k-Set келісім мәселесі", Мен мәселені модельдеу үшін графиктерді қолдандым және сол кездегідей шешім таптым. Тек отыруға және санауды айналып өтуге тура келді. Осы графиктен лайықты жауапты табуға тырысыңыз. Бірақ менің алгоритмім жұмыс істемеді: ол мәңгілікке шеңбер бойымен жүгіретін болды. Өкінішке орай, мұның барлығын барлық компьютер ғалымдары білетін графикалық теорияның ресми тілінде түсіндіру мүмкін болмады. Содан кейін мен көп жылдар бұрын топология сабақтарында бұл тұжырымдаманы қолданғанымыз есіме түсті «қарапайым кешен», бұл графиктерді жоғары өлшемдерге жалпылау. Сонда мен өзіме сұрақ қойдым: егер мәселені қарапайым комплекстер тұрғысынан қайта тұжырымдасақ не болар еді? Бұл маңызды сәт болды. Күшті формализмді қолдану арқылы мәселе кенеттен әлдеқайда жеңіл болады. Адамдар графиктерді пайдаланып, оған қарсы ұзақ күресті, бірақ олар ештеңе істей алмады. Қазір де олар мүмкін емес - дұрыс жауап алгоритм емес, мәселені шешудің мүмкін еместігінің дәлелі болып шықты. Яғни, мұндай алгоритм жай жоқ. Бірақ мүмкін еместігінің әрбір дәлелі не қарапайым комплекстерге, не адамдар қарапайым кешендерді қарастырмайтындай кейіп танытқан нәрселерге негізделген. Бір нәрсені жаңа атаумен атағандықтан, ол өзінің мәнін жоғалтпайды.

Виталий: Сіздің жолыңыз болды ма?

Морис: Сәттіліктен басқа, бұл да дайын. Бұл бұрын үйренген «пайдасыз» нәрселерді ұмытпау керек дегенді білдіреді. Неғұрлым пайдасыз нәрселерді үйренсеңіз, жаңа мәселеге тап болған кезде соғұрлым көп идеяларды алуға болады. Интуитивті үлгіні сәйкестендірудің бұл түрі маңызды, өйткені... Мұны істейік, бұл тізбек: басында мен графиктердің мүлдем жұмыс істемейтінін немесе мүлдем жұмыс істемейтінін анықтадым, бұл маған сегіз оқиғалардан бір нәрсені еске түсірді. жылдар бұрын және менің студенттік жылдарым, біз осы қарапайым кешендерді зерттеген кезім. Бұл өз кезегінде менің ескі топология оқулығымды тауып, оны қайтадан басыма жүктеуге мүмкіндік берді. Бірақ егер сол ескі білім болмаса, мен бастапқы мәселені шешуде ешқашан алға жылжымас едім.

«Көп процессорлық бағдарламалау өнері» кітабының жаңа басылымы

Алексей: Сіз кітабыңыз туралы бірнеше сөз айттыңыз. Сіз көп ағым туралы әлемдегі ең әйгілі кітапты жазғаныңыздың құпиясы емес шығар, «Көп процессорлық бағдарламалау өнері». Ол шамамен 11 жаста және содан бері ол тек шығарылды  өңделген қайта басып шығару. Екінші басылым болады ма?

Морис: Сұрағаныңыз жақсы болды! Бұл өте жақын арада, үш айдан кейін болады. Тағы екі автор бар, біз көп материал қостық, шанышқы/қосылу параллелизмі бөлімін жетілдірдік, MapReduce бөлімін жаздык, көптеген жаңа нәрселер қостық және қажет емес нәрселерді тастадық - бұл жазу кезінде өте қызықты нәрсе болды. бірінші басылымы, бірақ бүгінде жоқ. Нәтиже өте байыпты өңделген кітап болды.

Алексей: Барлығы жасалды, оны босату ғана қалды?

Морис: Бірнеше тарау әлі біраз жұмысты қажет етеді. Біздің баспагер (менің ойымша, ол бізді жек көреді) әлі де тезірек жұмыс істеу керек деген хабарды жеткізуге тырысуда. Біз кестеден әлдеқайда артта қалдық. Теориялық тұрғыдан біз бұл кітапты бір-екі жыл бұрын жасаған болар едік.

Алексей: Рождествоға дейін кітаптың жаңа нұсқасын алу мүмкіндігі бар ма?

Морис: Бұл біздің мақсатымыз! Бірақ жеңісті талай рет болжағаным сонша, енді маған ешкім сенбейді. Бұл мәселеде де маған көп сенбеу керек шығар.

Алексей: Қалай болғанда да, бұл керемет жаңалық. Маған кітаптың бірінші басылымы қатты ұнады. Мен жанкүйермін деп айтуға болады.

Морис: Жаңа басылым сіздің ыстық ықыласыңызға лайық болады деп үміттенемін, рахмет!

Транзакциялық жады қалай пайда болды

Виталий: Келесі сұрақ транзакциялық жады туралы. Менің түсінуімше, сіз бұл салада пионерсіз, ондай нәрселерді ешкім ойламаған кезде ойлап таптыңыз. Неліктен осы салаға ауысуды шештіңіз? Неліктен транзакциялар сізге маңызды болып көрінді? Сіз бір күні олар аппараттық құралға енгізіледі деп ойладыңыз ба?

Морис: Мен транзакциялар туралы дипломдық зерттеу күндерімнен бері білемін.

Виталий: Иә, бірақ бұл әртүрлі транзакциялар!

Морис: Мен Эллиотт Мосспен қоқыстарды бөгетсіз жинау бойынша жұмыс істедім. Біздің мәселе жадтағы бірнеше сөзді атомдық түрде өзгерткіміз келді, содан кейін алгоритмдер өте қарапайым болады және кем дегенде олардың кейбіреулері тиімдірек болады. Қолдану салыстыру және ауыстыру үшін жүктеу-сілтеме/дүкен-шарттыпараллельді архитектурамен қамтамасыз етілген, бірдеңе жасауға болады, бірақ ол өте тиімсіз және ұсқынсыз, өйткені жанама қабаттармен күресуге тура келеді. Мен жадтағы сөздерді өзгерткім келеді және ауысуым керек, себебі мен тек бір көрсеткішті өзгерте аламын, сондықтан олар қандай да бір каталогқа ұқсас құрылымды көрсетуі керек. Біз аппараттық құралды бір уақытта жазуды жүзеге асыра алатындай етіп өзгерте алатын болсақ, қаншалықты жақсы болатынын айттық. Эллиотт мұны байқаған сияқты: егер сіз кэш когеренттілік протоколдарына қарасаңыз, олар қажетті функциялардың көпшілігін қамтамасыз етеді. Оптимистік транзакцияда кэш когеренттілік протоколы уақыт қайшылығы бар екенін байқайды және кэш жарамсыз. Кэште транзакцияны алыпсатарлық түрде орындасаңыз және қайшылықтарды анықтау үшін когеренттілік протоколының механизмдерін пайдалансаңыз не болады? Спекуляциялық аппараттық архитектураны жобалау оңай болды. Сондықтан біз оны жаздық ең алғашқы басылым транзакциялық жады туралы. Дәл осы уақытта мен жұмыс істейтін компания Digital Equipment Corporation Alpha деп аталатын жаңа 64 биттік процессорды жасап жатыр. Сондықтан мен барып, Alpha әзірлеу тобына таңғажайып транзакциялық жадымыз туралы презентация жасадым, олар былай деп сұрады: Егер осының бәрін тікелей процессорға қоссақ, біздің компания қанша қосымша табыс алады? Мен бұған мүлдем жауап бере алмадым, өйткені мен технологпын, маркетинг маманы емеспін. Менде шынымен жауап беретін ештеңе болмады. Олар менің ештеңе білмегеніме қатты таңданбады.

Виталий: Миллиардтар! Тек миллиардтарды айт!

Морис: Иә, мен осылай айтуым керек еді. Қазір, стартаптар және барлық нәрсе дәуірінде мен бизнес-жоспар жазуды білемін. Сіздің әлеуетті пайдаңыздың мөлшері туралы аздап өтірік айтуға болады. Бірақ сол күндері бұл аңғал болып көрінді, сондықтан мен жай ғана «білмеймін» дедім. Егер сіз транзакциялық жады бойынша басылымның тарихына қарасаңыз, бір жылдан кейін оған бірнеше сілтемелер болғанын байқайсыз, содан кейін шамамен он жыл бойы бұл қағазға ешкім сілтеме жасамаған. Тырнақшалар 2004 жылы шынайы көп ядролар пайда болған кезде пайда болды. Адамдар параллель код жазу ақша табуға болатынын білгенде, жаңа зерттеулер басталды. Рави Раджвар мақала жазды, ол қандай да бір түрде транзакциялық жады тұжырымдамасын негізгі ағымға енгізді. (Редактордың ескертпесі: Бұл мақаланың 2010 жылы шыққан және еркін қол жетімді екінші нұсқасы бар PDF ретінде). Кенеттен адамдар мұның бәрін қалай қолдануға болатынын, құлыптары бар дәстүрлі алгоритмдерді қалай тездетуге болатынын түсінді. Бұрын қызықты академиялық мәселе болып көрінген нәрсенің жақсы мысалы. Иә, егер сіз сол кезде мен мұның бәрі болашақта маңызды болады деп ойлайсыз ба деп сұрасаңыз, мен: әрине, бірақ нақты қашан екені анық емес деп айтар едім. Мүмкін 50 жылдан кейін? Іс жүзінде бұл он жыл ғана болып шықты. Сіз бірдеңе істеп, он жылдан кейін адамдар оны байқағаныңыз өте жақсы.

Неліктен үлестірілген есептеулер саласында зерттеу жүргізу керек

Виталий: Егер жаңа зерттеулер туралы айтатын болсақ, оқырмандарға не кеңес берер едіңіз – бөлінген есептеулер немесе көп ядролы және неге? 

Морис: Бұл күндері көп ядролы процессорды алу оңай, бірақ шынайы таратылған жүйені орнату қиынырақ. Мен олармен жұмыс істей бастадым, өйткені мен кандидаттық диссертациямнан басқа нәрсе жасағым келді. Бұл менің жаңадан келген студенттерге беретін кеңесім: диссертацияңыздың жалғасын жазбаңыз - жаңа бағытқа баруға тырысыңыз. Сондай-ақ, көп ағынды беру оңай. Мен төсектен тұрмай-ақ ноутбукта жұмыс істейтін өз шанышқымен тәжірибе жасай аламын. Бірақ егер мен кенеттен нақты үлестірілген жүйені құрғым келсе, мен көп жұмыс істеуге, студенттерді тартуға және т.б. Мен жалқау адаммын және көп ядрода жұмыс істегенді жөн көремін. Көп ядролы жүйелерде тәжірибе жасау үлестірілген жүйелерде эксперименттер жасаудан да оңай, өйткені ақымақ бөлінген жүйеде де бақылауды қажет ететін факторлар тым көп.

Виталий: Сіз қазір не істеп жатырсыз, блокчейнді зерттеп жатырсыз ба? Ең алдымен қандай мақалаларға назар аудару керек?

Морис: Жақында пайда болды өте жақсы мақала, оны мен студентім Викрам Сарафпен бірге жаздым, әсіресе сөйлесу үшін Tokenomcs конференциясы үш апта бұрын Парижде. Бұл практикалық таратылған жүйелер туралы мақала, онда біз Ethereum көп ағынды етуді ұсынамыз. Қазіргі уақытта смарт келісімшарттар (блокчейнде жұмыс істейтін код) дәйекті түрде орындалады. Процесті жылдамдату үшін алыпсатарлық транзакцияларды пайдалану әдісі туралы бұрын біз мақала жаздық. Біз бағдарламалық жасақтаманың транзакциялық жадынан көптеген идеяларды алдық және егер сіз бұл идеяларды Etherium виртуалды машинасының бөлігі етсеңіз, онда бәрі жылдамырақ жұмыс істейтінін айттық. Бірақ бұл үшін келісімшарттарда деректер қайшылықтары болмауы керек. Содан кейін біз шынайы өмірде мұндай қақтығыстар жоқ деп ойладық. Бірақ білуге ​​мүмкіндік болмады. Содан кейін біздің қолымызда он жылға жуық нақты келісімшарт тарихы бар деп ойладық, сондықтан біз Ethereum блокчейнін тастап, өзімізден сұрадық: егер бұл тарихи жазбалар параллель орындалса не болады? Біз жылдамдықтың айтарлықтай өсуін байқадық. Ethereum-тың алғашқы күндерінде жылдамдық өте өсті, бірақ бүгінде бәрі біршама күрделірек, өйткені келісім-шарттар аз және сериализацияны қажет ететін деректерге қатысты қақтығыстардың ықтималдығы жоғары болды. Бірақ мұның бәрі нақты тарихи деректермен эксперименталды жұмыстар. Блокчейннің жақсы жағы - ол бәрін мәңгі есте сақтайды, сондықтан біз уақытты кері қайтарып, кодты іске қосу үшін әртүрлі алгоритмдерді пайдаланғанымызда не болатынын зерттей аламыз. Бұрынғы адамдарға жаңа идеямыз қалай ұнады? Мұндай зерттеулерді жасау әлдеқайда оңай және рахатқа бөленеді, өйткені барлығын бақылайтын және бәрін жазып алатын нәрсе бар. Бұл қазірдің өзінде алгоритмдерді әзірлеуден гөрі әлеуметтануға ұқсас нәрсе.

Алгоритмдердің дамуы тоқтап қалды ма және әрі қарай қалай өту керек?

Виталий: Соңғы теориялық сұрақтың уақыты келді! Бәсекеге қабілетті деректер құрылымдарындағы ілгерілеу жыл сайын азайып бара жатқан сияқты ма? Сіздің ойыңызша, біз деректер құрылымдарын түсінуде үстіртке жеттік пе немесе кейбір маңызды жақсартулар болады ма? Мүмкін бәрін толығымен өзгерте алатын ақылды идеялар бар шығар?

Морис: Біз дәстүрлі архитектуралар үшін деректер құрылымдарында үстіртке жеткен шығармыз. Бірақ жаңа архитектуралар үшін деректер құрылымдары әлі де өте перспективалы сала болып табылады. Егер сіз, айталық, аппараттық жеделдеткіштер үшін деректер құрылымдарын жасағыңыз келсе, онда GPU үшін деректер құрылымдары CPU үшін деректер құрылымдарынан өте ерекшеленеді. Блокчейндер үшін деректер құрылымдарын жасаған кезде, деректер бөліктерін хэштеу керек, содан кейін оларды ұқсас нәрсеге қою керек Меркле ағашы, жалған ақша жасаудың алдын алу үшін. Соңғы уақытта бұл салада белсенділік байқалып, көбісі өте жақсы жұмыс атқаруда. Бірақ менің ойымша, жаңа архитектуралар мен жаңа қолданбалар жаңа деректер құрылымдарына әкеледі. Бұрынғы қолданбалар және дәстүрлі архитектура - енді зерттеуге көп орын болмауы мүмкін. Бірақ егер сіз жолдан шығып, шеттерге қарасаңыз, сіз негізгі ағым маңызды қабылдамайтын ақылсыз нәрселерді көресіз - бұл жерде барлық қызықты нәрселер орын алады.

Виталий: Сондықтан өте танымал зерттеуші болу үшін мен өз сәулетімді ойлап табуым керек болды :)

Морис: Сіз біреудің жаңа архитектурасын «ұрлай аласыз» - бұл әлдеқайда оңай сияқты!

Браун университетінде жұмыс істейді

Виталий: Толығырақ айтып бере аласыз ба? Браун университетісен қайда жұмыс істейсің? Ақпараттық технологиялар аясында ол туралы көп нәрсе белгілі емес. Мысалы, MIT туралы аз.

Морис: Браун университеті АҚШ-тағы ең көне университеттердің бірі. Менің ойымша, тек Гарвард сәл үлкенірек. Қоңыр - деп аталатын бөлігі Айви Лигасы, бұл сегіз көне университеттердің жинағы. Гарвард, Браун, Корнелл, Йель, Колумбия, Дартмут, Пенсильвания, Принстон. Бұл ескі, шағын және сәл ақсүйектер университеті. Негізгі назар гуманитарлық білімге аударылады. Бұл MIT сияқты болуға тырыспайды, MIT өте мамандандырылған және техникалық. Браун - орыс әдебиетін немесе классикалық грек тілін және, әрине, информатиканы оқуға тамаша орын. Ол жан-жақты білім беруге бағытталған. Студенттеріміздің көпшілігі Facebook, Apple, Google-ге барады - сондықтан менің ойымша, біздің студенттеріміз салада жұмыс табуда қиындықтар туғызбайды. Мен Brown компаниясына жұмысқа бардым, себебі мен бұрын Бостондағы Digital Equipment Corporation компаниясында жұмыс істегенмін. Бұл көптеген қызықты нәрселерді ойлап тапқан, бірақ дербес компьютерлердің маңыздылығын жоққа шығаратын компания болды. Тағдыры қиын компания, негізін салушылар бір кездері жас революционерлер болды, олар ештеңе үйренбеді және ештеңені ұмытпады, сондықтан олар он шақты жыл ішінде революционерлерден реакцияшыларға айналды. Олар жеке компьютерлер гаражға - әрине, қараусыз қалған гаражға тиесілі деп әзілдегенді ұнататын. Оларды икемді компаниялар жойғаны анық. Компанияның қиыншылыққа тап болғаны белгілі болғанда, мен Бостоннан бір сағаттай қашықтықта орналасқан Браундағы досыма қоңырау шалдым. Мен ол кезде Бостоннан кеткім келмеді, өйткені басқа университеттерде ашылулар көп емес еді. Бұл қазіргідей информатикада жұмыс орындары көп болмаған кез еді. Ал Браунның ашылуы болды, мен үйімді, отбасымды көшірудің қажеті жоқ еді, мен Бостонда өмір сүргенді жақсы көремін! Осылайша мен Браунға баруды шештім. Маған ұнады. Студенттер керемет, сондықтан мен ешқашан басқа жерге баруға тырыспадым. Демалыс кезінде мен Microsoft-та бір жыл жұмыс істедім, Хайфадағы Технионға бір жыл бардым, енді мен Алгорандта боламын. Әр жерде менің көптеген әріптестерім бар, сондықтан біздің сыныптардың физикалық орналасуы соншалықты маңызды емес. Бірақ ең бастысы студенттер, олар мұнда үздік. Мен ешқашан басқа жерге баруға тырысқан емеспін, өйткені мен мұнда өте бақыттымын.

Браунның Құрама Штаттардағы даңқына қарамастан, ол шетелде таңқаларлықтай белгісіз. Көріп отырғаныңыздай, мен қазір бұл жағдайды түзету үшін қолдан келгеннің бәрін жасаймын.

Университеттегі және корпорациядағы зерттеулер арасындағы айырмашылық

Виталий: Жарайды, келесі сұрақ цифрлық жабдық туралы. Сіз зерттеуші ретінде болдыңыз. Үлкен компанияның ҒЗТКЖ бөлімінде жұмыс істеу мен университетте жұмыс істеудің айырмашылығы неде? Артықшылықтары мен кемшіліктері қандай?

Морис: Жиырма жыл бойы мен Microsoft-та жұмыс істедім, Sun Microsystems, Oracle, Facebook және қазір Algorand қызметкерлерімен тығыз жұмыс істедім. Осының барлығына сүйене отырып, компанияларда да, университеттерде де бірінші дәрежелі зерттеулер жүргізуге болатынын айтқым келеді. Маңызды айырмашылық компанияда сіз әріптестеріңізбен жұмыс жасайсыз. Егер менде кенеттен әлі жоқ жоба туралы идея туындаса, мен өз құрдастарымды бұл жақсы идея екеніне сендіруім керек. Егер мен Браунда болсам, онда мен студенттеріме айта аламын: антигравитациямен жұмыс істейік! Олар не басқа біреуге кетеді, не жобаны қолға алады. Иә, мен қаржыландыруды табуым керек, грантқа өтінім жазуым керек және т.б. Қалай болғанда да, студенттер әрқашан көп болады және сіз біржақты шешім қабылдай аласыз. Бірақ университетте сіз өз деңгейіңіздегі адамдармен жұмыс істемейтін шығарсыз. Өнеркәсіптік зерттеулер әлемінде сіз алдымен жобаңызды қабылдауға тұрарлық екеніне барлығын сендіруіңіз керек. Мен ешкімге ештеңе тапсырыс бере алмаймын. Бұл екі жұмыс тәсілі де құнды, өйткені егер сіз шынымен ақылсыз нәрсемен жұмыс істеп жатсаңыз және әріптестеріңізді сендіру қиын болса, магистранттарды сендіру оңайырақ, әсіресе оларға ақша төлейтін болсаңыз. Егер сіз үлкен тәжірибе мен терең тәжірибені қажет ететін нәрсемен жұмыс істеп жатсаңыз, сізге «жоқ, мен бұл салада түсінемін және сіздің идеяңыз нашар, ол жұмыс істемейді» деп айта алатын әріптестер қажет. Бұл уақытты ысырап ету тұрғысынан өте пайдалы. Сондай-ақ, өндірістік зертханаларда есеп жазуға көп уақыт бөлсеңіз, университетте бұл уақытты ақша табуға жұмсайсыз. Студенттердің бір жерге баруын қаласам, оған ақшаны басқа жерден табуым керек. Сіздің университеттегі лауазымыңыз неғұрлым маңызды болса, соғұрлым ақша жинауға көбірек уақыт жұмсауға тура келеді. Енді сіз менің не үшін жұмыс істейтінімді білесіз - кәсіби қайыршы! Құрбандық табақпен жүретін монахтардың бірі сияқты. Жалпы бұл екі әрекет бірін-бірі толықтырады. Сондықтан екі дүниеде де аяғымды жерге тигізбей, өмір сүруге тырысамын.

Виталий: Басқа ғалымдарды сендіруден гөрі компанияны сендіру қиынырақ сияқты.

Морис: Одан да қиын және тағы басқа. Оның үстіне, әртүрлі салаларда бұл әртүрлі: кейбіреулері толық ауқымды зерттеулер жүргізеді, ал басқалары өз тақырыбына назар аударады. Егер мен Майкрософтқа немесе Facebook-ке кіріп: гравитацияға қарсы жасайық десем, олар оны бағаламайды. Бірақ егер мен магистранттарыма дәл осылай айтсам, олар бірден жұмысқа кірісуі мүмкін, дегенмен қазір менде қиындықтар туындауы мүмкін - бұл үшін ақша табу керек. Бірақ сіз компанияның мақсаттарына сәйкес келетін нәрсені жасағыңыз келсе, бұл компания зерттеу жүргізу үшін өте жақсы орын болуы мүмкін.

Гидра және SPTDC

Виталий: Менің сұрақтарым аяқталуға жақын, сондықтан Ресейге алдағы сапар туралы аздап сөйлесейік.

Морис: Иә, мен Санкт-Петербургке оралуды асыға күтемін.

Алексей: Осы жылы сізбен бірге болғаныңызға қуаныштымын. Бұл сіздің Санкт-Петербургке екінші рет келуіңіз, солай емес пе?

Морис: Қазірдің өзінде үшінші!

Алексей: Түсінемін, бірақ SPTDC – әрине, екіншісі. Соңғы рет мектепке қоңырау шалды SPTCC, біз енді бір әріпті өзгерттік (C-D, Concurrent to Distributed), осы жылы бөлінген есептеулерге қатысты көбірек аймақтар бар екенін баса көрсету үшін. Мектептегі баяндамаларыңыз туралы бірнеше сөз айта аласыз ба? Гидра конференциясы?

Морис: Мектепте мен блокчейннің негіздері және онымен не істеуге болатыны туралы айтқым келеді. Мен блокчейндер бізге таныс көп ағынды бағдарламалауға өте ұқсас екенін көрсеткім келеді, бірақ олардың өзіндік нюанстары бар және бұл айырмашылықтарды түсіну маңызды. Кәдімгі веб-қосымшада қателессеңіз, бұл жай ғана тітіркендіреді. Егер сіз қаржылық қосымшада қате кодты жазсаңыз, біреу сіздің барлық ақшаңызды ұрлайды. Бұл жауапкершілік пен салдардың мүлдем басқа деңгейлері. Мен жұмыстың дәлелі туралы, смарт келісімшарттар туралы, әртүрлі блокчейндер арасындағы транзакциялар туралы аздап сөйлесемін.

Менің қасымда басқа спикерлер жұмыс істейді, олардың да блокчейн туралы айтатын сөздері бар және біз әңгімелеріміз бір-біріне жақсы сәйкес келуі үшін бір-бірімізбен үйлестіруге келісті. Бірақ инженерлік есеп үшін мен кең аудиторияға блокчейндер туралы естігеннің бәріне неге сенбеу керек, блокчейндер неліктен керемет өріс, оның басқа белгілі идеялармен қаншалықты үйлесетіні және неге батыл қарау керектігі туралы түсінікті түсініктеме айтқым келеді. болашаққа.

Алексей: Бұған қоса, бұл екі жыл бұрынғыдай кездесу немесе пайдаланушылар тобы форматында болмайтынын айтқым келеді. Мектеп жанында шағын конференция өткізуді жөн көрдік. Себебі, Петр Кузнецовпен тілдескеннен кейін мектептің жүз, мүмкін 120 адаммен ғана шектелетінін аңғардық. Сонымен қатар, сізбен сөйлескісі келетін, презентацияларға қатысқысы келетін және жалпы тақырыпқа қызығушылық танытатын инженерлер өте көп. Осы себепті біз жаңа конференция құрдық Гидра деп аталады. Айтпақшы, Hydra неліктен идеяларыңыз бар?

Морис: Өйткені жеті спикер болады ма? Ал олардың бастарын кесіп тастауға болады, ал олардың орнына жаңа спикерлер өседі?

Алексей: Жаңа спикерлерді өсіру үшін тамаша идея. Бірақ шын мәнінде бұл жерде бір оқиға бар. Одиссей туралы аңыз есіңізде болсын, ол арасында жүзуге тура келді Скилла және Чарибдис? Гидра - Charybdis сияқты нәрсе. Әңгіме мынада: бірде мен конференцияда сөз сөйлеп, көп ағым туралы айттым. Бұл конференцияда тек екі трек болды. Баяндаманың басында мен залдағы көрермендерге енді Скилла мен Чарибдистің арасында таңдау бар екенін айттым. Менің рухани жануарым - Чарибдис, өйткені Чарибдистің басы көп және менің тақырыбым көп жіпті. Конференциялардың атаулары осылай көрінеді.

Қалай болғанда да, бізде сұрақтар мен уақыт таусылды. Сонымен, достар, тамаша сұхбатыңыз үшін рахмет және SPTDC мектебінде және Hydra 2019-да кездескенше!

Мориспен әңгімеңізді 2019 жылдың 11-12 шілдесінде Санкт-Петербургте өтетін Hydra 2019 конференциясында жалғастыра аласыз. Ол есеппен келеді «Блокчейндер және таратылған есептеулердің болашағы». Билеттерді сатып алуға болады ресми сайтында.

Ақпарат көзі: www.habr.com

пікір қалдыру