"Empiriaj rezultoj estas por publikigo nur, la realaj motivoj de la laboro estas estetikaj." Bonega intervjuo kun Michael Scott

"Empiriaj rezultoj estas por publikigo nur, la realaj motivoj de la laboro estas estetikaj." Bonega intervjuo kun Michael Scott Michael Scott - dum 34 jaroj kiel profesoro pri Komputado ĉe la Universitato de Roĉestro, kaj en sia hejma Universitato de Wisconsin-Madison li estis dekano dum kvin jaroj. Li esploras kaj instruas studentojn pri paralela kaj distribuita programado kaj lingvodezajno.

La mondo konas Mikaelo'n el la lernolibro "Programlingvo-Pragmatiko", kio pri laboro "Algoritmoj por skalebla sinkronigo sur komunaj memoraj multiprocesoroj" ricevis la Dijkstra Premion kiel unu el la plej famaj en la kampo de distribuita komputiko. Vi eble ankaŭ konas lin kiel la aŭtoron de tiu sama algoritmo Mikaelo-Skot.

Вместе с Дагом Ли разработал те неблокирующие алгоритмы и синхронные очереди, на которых работают библиотеки Java. Внедрение "duoblaj datumstrukturoj" en JavaSE 6 plibonigis rendimenton je 10 fojojn ThreadPoolExecutor.

Enhavo:

  • Frua kariero, Universitato de Rochester. Projekto Charlotte, Lynx-lingvo;
  • IEEE Scalable Coherent Interface, MCS-ŝlosado;
  • Supervivo en ĉiam ŝanĝanta mondo;
  • Ĉu studentoj fariĝas pli stultaj? Tutmondaj tendencoj, internaciigo;
  • Efika laboro kun studentoj;
  • Как не отстать при подготовке новых курсов и книг;
  • Ligoj inter komerco kaj akademio;
  • Praktika efektivigo de ideoj. MCS, MS, CLH, JSR 166, laborante kun Doug Lee kaj pli;
  • Транзакционная память;
  • Novaj arkitekturoj. La venko de transakcia memoro estas proksima;
  • Ne-volatila memoro, Optane DIMM, ultrarapidaj aparatoj;
  • Следующий большой тренд. Dual data structures. Hydra.

La intervjuo estas farita de:

Vitalij Aksenov — nuntempe postdoktorino ĉe IST Aŭstrio kaj membro de la Sekcio pri Komputilaj Teknologioj ĉe ITMO-Universitato. Faras esploradon en la kampo de teorio kaj praktiko de konkurencivaj datumstrukturoj. Antaŭ ol labori pri IST, li ricevis sian PhD de Paris Diderot University kaj ITMO University sub la inspektado de profesoro Peter Kuznetsov.

Aleksej Fedorov - Produktanto ĉe JUG Ru Group, rusa kompanio, kiu organizas konferencojn por programistoj. Alexey partoprenis en la preparado de pli ol 50 konferencoj, kaj lia vivresumo inkluzivas ĉion de la pozicio de evoluinĝeniero ĉe Oracle (JCK, Java Platform Group) ĝis la pozicio de programisto ĉe Odnoklassniki.

Vladimir Sitnikov - Inĝeniero ĉe Netcracker. Dek jaroj da laboro pri la rendimento kaj skaleblo de NetCracker OS, programaro uzata de teleentreprenistoj por aŭtomatigi procezojn pri administrado de retaj kaj retaj ekipaĵoj. Interesas pri agado de problemoj pri Java kaj Oracle Database. Aŭtoro de pli ol dekduo agado-plibonigoj en la oficiala PostgreSQL JDBC-ŝoforo.

Frua kariero, Universitato de Rochester. Charlotte-projekto, Lynx-lingvo.

Алексей: Komence, mi volis diri al vi, ke en Rusio ni ĉiuj vere amas Komputika, Datuma Scienco kaj algoritmoj. Ĝi estas tute obscena. Ni legis ĉion libro Cormen, Leiserson kaj Rivest. Tial, la venonta konferenco, lernejo kaj ĉi tiu intervjuo mem devus esti tre popularaj. Ni ricevis multajn demandojn por ĉi tiu intervjuo de studentoj, programistoj kaj komunumanoj, do ni tre dankas pro ĉi tiu ŝanco. Ĉu Komputiko ricevas la saman amon en Usono?

Mi Michaelaelo: Nia fako estas tiel diversa, ĝi havas tiom da direktoj, kaj ĝi influas la socion en tiom da diversaj manieroj, ke malfacilas al mi doni al vi definitivan respondon. Sed la fakto estas, ke ĝi kaŭzis enormajn ŝanĝojn en komerco, industrio, arto kaj socio ĝenerale dum la lastaj 30 jaroj.

Vitali: Ni komencu per io malproksima. En multaj universitatoj ekzistas io kiel specialiĝo en unu aparta areo. Por Carnegie Mellon University tio estas paralela komputado, por MIT ĝi estas kriptografio, robotoj kaj multifadenado. Ĉu ekzistas tia specialiĝo ĉe la Universitato de Roĉestro?

Mi Michaelaelo: Если честно, я бы сказал, что CMU и MIT специализируются по всем направлениям. На нашей кафедре всегда больше всего внимания уделялось искусственному интеллекту. Половина работающих у нас людей занимаются ИИ или человеко-компьютерным взаимодействием — эта доля больше, чем на других кафедрах, и так было всегда. Но когда я учился в университете, у меня не было курсов по ИИ, и я никогда в этой области не работал. Так что моя кафедра специализируется на проблеме, к которой я отношения не имею. Утешением служит то, что вторая по важности для нашей кафедры проблема — это параллельное и многопоточное программирование, то есть моя специализация.

Vitali: Вы начали заниматься Computer Science, когда область многопоточного программирования только зарождалась. По списку ваших публикаций видно, что первые работы касались достаточно широкого спектра вопросов: управление памятью в многопоточных системах, распределенные файловые системы, операционные системы. Почему такая разносторонность? Вы пытались найти своё место в исследовательском сообществе?

Mi Michaelaelo: Kiel studento, mi partoprenis Charlotte-projekto ĉe la Universitato de Viskonsino, kie unu el la unuaj distribuitaj operaciumoj estis evoluigita. Tie mi laboris kune kun Rafael Finkel (Rafaelo Finkel) kaj Marvin Solomon (Marvin Salomono). Mia disertacio estis dediĉita al la evoluo de lingvo por sistema programaro por distribuitaj sistemoj - nun ĉiuj forgesis pri ĝi, kaj dankon al Dio. Mi kreis la programlingvon Lynx, kiu celis faciligi la kreadon de serviloj por loze kunligita distribuita operaciumo. Ĉar en tiu tempo mi ĉefe okupiĝis pri operaciumoj, mi supozis, ke mia kariero estos ĉefe ligita kun ili. Sed Rochester estis tre malgranda universitato, kaj pro tio, la malsamaj grupoj tie interagis tre proksime unu kun la alia. Ne estis dekduo da aliaj operaciumoj por mi paroli tie, do ĉiuj miaj kontaktoj estis kun homoj kiuj laboris en tute malsamaj areoj. Mi tre ĝuis ĝin, esti ĉiuflanka estas granda avantaĝo por mi. Se ni parolas specife pri multfadenaj datumstrukturoj kaj sinkronigaj algoritmoj, tiam mi eklaboris pri ili tute hazarde.

IEEE Scalable Coherent Interface, блокировка MCS.

Vitali: Можно немного подробней об этом?

Mi Michaelaelo: Ĉi tio estas amuza rakonto, kiun mi neniam laciĝas rakonti al ĉiuj. Ĝi okazis en konferenco ASPLOS en Bostono - tio estis en la malfruaj 80-aj jaroj aŭ fruaj 90-aj jaroj. John Mellor-Crummey (John Mellor-Crummey), выпускник нашего факультета. Я был с ним знаком, но мы до этого не вели совместных исследований. Мэри Вернон (Mary Vernon) el Viskonsino faris prelegon pri multprocesora sistemo, kiun ili disvolvis en Viskonsino: Viskonsina Multikubo. Tiu Multicube havis sinkronigan mekanismon sur la hardvarnivelo nomita la Q sur Sync Bit, kaj poste ĝi estis renomita la Q sur Lock Bit ĉar ĝi sonis kiel Colby-fromaĝo, kio estis vortludo. Se vi interesiĝas pri multfadenaj mekanismoj, vi verŝajne scias, ke Colby finfine iĝis la sinkroniga motoro por la normo IEEE Scalable Coherent Interface. Tio estis ŝlosmekanismo kiu kreis montrilojn de unu kaŝmemoro al alia sur la hardvarnivelo tiel ke ĉiu serurposedanto sciis kies vico ĝi estis. Kiam Johano kaj mi aŭdis pri tio, ni rigardis unu la alian kaj diris: kial fari tion sur la aparataro? Ĉu oni ne povas atingi la samon per kompar-kaj-interŝanĝo? Ni prenis unu el la kajeroj kuŝantaj en la klasĉambro kaj skribaĉis sur ĝi MCS-blokado, dum Maria daŭrigis sian raporton. Poste, ni efektivigis ĝin, eksperimentis, la ideo montriĝis sukcesa, kaj ni publikigis la artikolon. Tiutempe, por mi, ĉi tiu temo ŝajnis nur amuza distraĵo, post kio mi planis reveni al operaciumoj. Sed tiam aperis alia problemo laŭ la sama linio, kaj finfine sinkronigado, multfadenado kaj datumstrukturoj fariĝis mia specialaĵo. Kiel vi povas vidi, ĉio ĉi okazis hazarde.

Vitali: Mi jam delonge konas MCS-blokadon, sed ĝis nun mi ne sciis, ke ĝi estas via laboro, kaj ne komprenis, ke ĝi estas akronimo por viaj familiaj nomoj.

Kiel postvivi en ĉiam ŝanĝiĝanta mondo?

Алексей: Mi havas demandon pri rilata temo. Antaŭ 30 aŭ 40 jaroj estis pli da libereco en diversaj fakoj. Se vi volas komenci karieron en multfadenaj aŭ distribuitaj sistemoj, vi bonvenas, se vi volas eniri en operaciumojn, neniu problemo. En ĉiu areo estis multaj malfermitaj demandoj kaj malmultaj spertuloj. Nun aperis mallarĝaj specialaĵoj: ne ekzistas nur fakuloj pri operaciumoj ĝenerale, ekzistas specialistoj pri individuaj sistemoj. Estas same kun multfadenaj kaj distribuitaj sistemoj. Sed la problemo estas, ke niaj vivoj ne estas senfinaj; ĉiuj povas dediĉi nur kelkajn jardekojn al esplorado. Kiel postvivi en ĉi tiu nova mondo?

Mi Michaelaelo: Мы в этом плане не особенные, всё то же самое происходило когда-то и в других областях. Мне повезло, что я начал работать в Computer Science, когда эта сфера была в «подростковом» возрасте. Некоторые основы уже были заложены, но все было еще очень незрелое. Такая возможность появляется нечасто. Электротехника существует уже очень давно, физика — еще дольше, математика — чуть ли не с начала времён. Но это не значит, что в математике никто больше не делает интересных открытий. Открытых проблем по-прежнему множество, но в то же время и учиться нужно больше. Вы верно заметили, что сейчас значительно больше специализаций, чем было раньше, но это лишь значит, что мы оказались в той же ситуации, что и большинство остальных областей человеческой деятельности.

Алексей: Mi interesiĝas pri la pli praktika aspekto de la afero ĉi tie. Mi havas matematikan fonon, kaj dum miaj studoj mi ofte partoprenis konferencojn kaj laboris pri diversaj sciencaj temoj. Mi malkovris, ke neniu en la publiko komprenis miajn raportojn, kaj same, la raportoj de aliaj homoj estis kompreneblaj nur por si mem. Tio ne okazas en altnivelaj temoj, sed tuj kiam vi komencas enprofundiĝi en ion, la publiko ne plu povas sekvi vin. Kiel vi traktas ĉi tion?

Mi Michaelaelo: Ne ĉiam sukcesa. Mi antaŭ nelonge preparis raporton, en kiu mi tro profundiĝis en teknikajn detalojn. Dum la parolado progresis, evidentiĝis, ke la plimulto de la publiko ne komprenas min, do mi devis adaptiĝi al la situacio surflue. La diapozitivoj ne eblis ŝanĝi, do ĝi ne tre bone rezultis - do, ĝenerale, mi provas ne uzi diapozitivojn. Ĝenerale, mia konsilo estas konsideri vian publikon. Vi devas scii al kiu vi parolas, kio estas ilia nivelo de scio kaj kion ili bezonas aŭdi por aprezi vian laboron.

Vitali: Ĉu vi povus doni al ni aludon pri kio temas ĉi tiu prelego?

Mi Michaelaelo: Verdire, mi preferus ne pligrandigi ĉi tiun temon por lasi la koncernajn personojn anonimaj. La afero estas, ke ni ofte tro profundiĝas en la komplikaĵojn de la problemo, pri kiu ni laboras, do fariĝas malfacile por ni klarigi komence de la parolado kial la problemo estas interesa kaj grava kaj kiel ĝi rilatas al aferoj, kiujn la publiko jam scias. Laŭ miaj observoj, studentoj havas la plej malfacilan tempon lerni ĉi tiun kapablon. Kaj ĉi tio ankaŭ estis la malforta punkto de mia lastatempa raporto. Taŭge strukturita raporto devus, ekde la komenco, trovi kontakton kun la publiko, klarigi al ili, kio ĝuste estas la problemo kaj kiel ĝi rilatas al temoj jam konataj de ĝi. Kiom teknika estas ĉi tiu enkonduko dependas de la publiko. Se ĝi estas tute diversa, tiam la raporto povas esti plurŝtupa. La enkonduko devus esti alirebla por ĉiuj, kaj ĝis la fino la peco eble ne povos daŭrigi kun vi, sed homoj relative konataj kun via fako povos eltrovi ĝin.

Становятся ли студенты глупее? Глобальные тренды, интернационализация.

Алексей: Vi observas studentojn dum pluraj jardekoj. Ĉu studentoj fariĝas pli stultaj aŭ pli inteligentaj de jardeko al jardeko aŭ jaro al jaro? En Rusio, profesoroj konstante plendas, ke studentoj fariĝas pli stultaj ĉiujare, kaj vere ne estas klare, kion fari pri tio.

Mi Michaelaelo: От нас, стариков, действительно можно услышать много негатива. Подсознательно у нас есть склонность ожидать, что студенты освоят весь тот 30-летний опыт, который уже есть у нас. Если у меня есть более глубокое понимание, чем в 1985 году, то почему его нет у студентов? Наверное, потому что им 20 лет, как вам такое? Думаю, наиболее существенные изменения в последние десятилетия касаются демографического состава: у нас сейчас значительно больше международных студентов, за исключением канадцев. Раньше канадцев было много, поскольку мы находимся очень близко к границе с Канадой, и студенты оттуда могут ездить домой на выходных. Но сейчас в Канаде много хороших университетов, и канадцы предпочитают учиться у себя, в США их стало ездить значительно меньше.

Алексей: Ĉu vi pensas, ke tio estas loka tendenco aŭ tutmonda?

Mi Michaelaelo: Mi ne memoras precize kiu, sed iu diris, ke la mondo estas plata. Nia kampo fariĝis multe pli internacia. ACM-Konferencoj Antaŭe, ili estis tenitaj ekskluzive ene de Usono, tiam ili decidis okazigi ilin unufoje ĉiujn 4 jarojn en aliaj landoj, kaj nun ili estas tenitaj ĉie en la mondo. Ĉi tiuj ŝanĝoj influis eĉ pli IEEE, ĉar ĝi ĉiam estis pli internacia organizo ol ACM. Kaj estas programseĝoj el Ĉinio, Barato, Rusio, Germanio kaj multaj aliaj landoj, ĉar nun ĉie okazas multo.

Алексей: Sed, verŝajne, estas iuj negativaj aspektoj de tia internaciigo?

Mi Michaelaelo: Mi dirus, ke ĉiuj negativaj aspektoj rilatas ne al teknologio, sed al politiko. Iam, la ĉefa problemo estis la fakto, ke Usono ŝtelis la plej inteligentajn kaj talentajn homojn el landoj ĉirkaŭ la mondo. Kaj nun la ĉefa problemo estas la politikaj ludoj inter diversaj landoj ĉirkaŭ vizoj kaj enmigrado.

Алексей: То есть барьеры и тому подобные вещи. Понятно.

Vidi: Persone, mi interesiĝas pri kia aliro vi prenas kiam vi instruas novan temon al studentoj. Estas malsamaj ebloj: vi povas provi antaŭ ĉio inspiri ilin provi ion novan, aŭ vi povas pli atenti la detalojn pri kiel certa teknologio funkcias. Kion vi preferas?

Efika laboro kun studentoj

Алексей: И как найти чёртов баланс между первым и вторым?

Mi Michaelaelo: La problemo estas, ke klasoj ne ĉiam iras kiel mi ŝatus. Mi kutime donas al studentoj legan materialon anticipe por ke ili enprofundu ĝin, komprenu ĝin laŭ sia kapablo kaj formulu demandojn pri tiuj partoj kiujn ili ne povis kompreni. Tiam en klaso vi povas koncentriĝi pri la plej malfacilaj momentoj kaj esplori ilin kune. Jen kiel mi plej ŝatas instrui klasojn. Sed pro la ŝarĝo, kiu nun kuŝas sur studentoj, mi ne ĉiam kapablas certigi, ke ili anticipe prepariĝas. Kiel rezulto, vi devas dediĉi multe pli da tempo al la ĝenerala rerakonto de la materialo ol vi ŝatus. Malgraŭ tio, mi provas teni niajn klasojn interagaj. Alie, estas pli facile registri video unufoje, ke studentoj tiam povas spekti hejme. La punkto de vivaj klasoj estas homa interago. En la klaso, mi preferas uzi kreton kaj nigran tabulon prefere ol lumbildojn, krom en certaj kazoj kiam diagramo estas tro kompleksa por bildigi sur la tabulo. Dank' al tio, mi ne devas teni rigidan lecionplanon. Ĉar ne ekzistas strikta ordo en kiu mi donas la materialon, tio permesas al mi adapti ĝin al la publiko depende de la demandoj, kiujn mi ricevas. Ĝenerale mi provas fari klasojn kiel eble plej interagajn, tiel ke la materialo, kiun mi prezentas, dependas de la demandoj, kiujn oni faras al mi.

Vidi: Ĝi estas bonega. Laŭ mia sperto, estas sufiĉe malfacile igi aŭskultantojn demandi. Eĉ se vi anticipe demandas demandi ajnajn demandojn, kiom ajn stultaj aŭ inteligentaj, ili ankoraŭ silentas. Kiel vi traktas ĉi tion?

Mi Michaelaelo: Вы будете смеяться, но если достаточно долго молча стоять, то рано или поздно всем станет неудобно, и кто-нибудь да задаст вопрос. Или можно задать простой технический вопрос с ответом «да» или «нет», чтобы определить, поняли ли люди, о чём только что шла речь. Например, есть ли в приведённом примере гонка данных? Кто считает, что да? Кто считает, что нет? Кто вообще ничего не понимает, потому что в общей сложности поднялась только половина рук?

Vitali: Kaj se vi malĝuste respondis, vi estas forpelita el klaso :)

Mi Michaelaelo: Se vi nenion respondis, tiam vi devus demandi demandon. Mi devas kompreni, kion precize la studento bezonas scii por respondi la demandon, kiun mi ĵus demandis. Mi bezonas, ke ili helpu min helpi ilin. Mi estas preta adaptiĝi al ili, por ke ili komprenu la problemon. Sed se mi ne scias, kio okazas en ilia kapo, mi ne povas fari tion. Kaj se vi ne donas al studentoj pacon por sufiĉe longa tempo, kelkfoje finfine ili faras la ĝustajn demandojn, tio estas, kiuj permesas al mi vidi kio ĝuste okazas en la kapoj de la studentoj. 

Алексей: Ĉu ĉi tiuj demandoj foje kondukas al ideoj, pri kiuj vi mem ne pensis antaŭe? Ĉu ili estas neatenditaj? Ĉu ili permesas vin rigardi problemon en nova lumo?

Mi Michaelaelo: Estas demandoj, kiuj malfermas novan manieron prezenti materialon. Ofte estas demandoj, kiuj kondukas al interesaj problemoj, pri kiuj mi ne planis paroli. Studentoj ofte diras al mi, ke mi emas foriri de la temo kiam tio okazas. Kaj, laŭ ili, tre ofte ĉi tio estas la plej interesa parto de la leciono. Tre malofte, nur kelkajn fojojn, studentoj faris demandojn kiuj instigis novan direkton en esplorado kaj kreskis en artikolon. Tio okazas multe pli ofte en konversacioj kun studentoj prefere ol dum klasoj, sed foje ĝi okazis dum klasoj. 

Алексей: То есть студенты задавали вам вопросы, на основе которых потом можно было опубликовать статью?

Mi Michaelaelo: Jes. 

Vitali: Kiom ofte vi havas ĉi tiujn konversaciojn kun studentoj? Kiam ili volas lerni pli ol kio estis kovrita dum la leciono?

Mi Michaelaelo: С моими аспирантами — постоянно. У меня их где-то 5 или 6 человек, и мы всё время с ними что-то обсуждаем. А разговоры такого рода со студентами, которые просто посещают мои занятия — не слишком часто. Хотя хотелось бы, чтобы это происходило чаще. Подозреваю, что они просто боятся приходить на факультет в часы приёма. Каждый семестр некоторым студентам удаётся преодолеть этот психологический барьер, и с ними всегда очень интересно говорить после занятий. Правда, если бы все студенты были настолько же смелыми, у меня просто не хватило бы времени. Так что, возможно, всё работает так, как надо. 

Vitali: Kiel vi sukcesas trovi tempon por komuniki kun studentoj? Laŭ mia scio, en Usono instruistoj havas multe da laboro - petante subvenciojn kaj similajn. 

Mi Michaelaelo: Sincere, labori kun studentoj estas la aspekto de mia laboro, kiun mi plej ĝuas. Do mi havas sufiĉe da motivo por ĉi tio. Plejparto de la tempo, kiun mi pasigas en mia oficejo, estas pasigita por ĉiaspecaj kunvenoj. Nun estas somero, do mia horaro estas malpli okupata, sed dum la lerneja jaro, ĉiutage de la 9-a ĝis la 17-a mi havas ĉion pakita. Esplorlaboroj, recenzoj, subvencioj – por ĉio ĉi estas nur vesperoj kaj semajnfinoj. 

Kiel daŭrigi kun la preparado de novaj kursoj kaj libroj.

Алексей: Ĉu vi nuntempe daŭre instruas iujn kursojn, kiujn vi delonge instruas? Io kiel enkonduko al Komputika Scienco.

Mi Michaelaelo: La unua afero, kiu venas al la menso ĉi tie, estas kurso pri programlingvoj. 

Алексей: Kiom malsamas la hodiaŭa versio de ĉi tiu kurso de tio, kion ĝi estis antaŭ 10, 20, 30 jaroj? Eble kio estas pli interesa ĉi tie ne estas la detaloj de aparta kurso, sed la ĝeneralaj tendencoj.

Mi Michaelaelo: Mia kurso pri programlingvoj estis iom nekutima kiam mi kreis ĝin. Mi komencis legi ĝin en la malfruaj 1980-aj jaroj, anstataŭigante mian kolegon, Doug Baldwin (Doug Baldwin). Тема курса лишь косвенно относилась к моей специализации, но когда он ушёл, я оказался лучшим кандидатом для проведения этого курса. Мне не нравился ни один из существовавших тогда учебников, поэтому я в конечном итоге сам написал учебник для этого курса. (Примечание редакции: речь идёт о книге "Programlingvo-Pragmatiko") Ĝi nun estas uzata en pli ol 200 universitatoj tra la mondo. Mia aliro estas nekutima pro tio, ke ĝi intence miksas la problemojn de lingvodezajno kaj efektivigo, kaj multe atentas la interagon inter tiuj aspektoj en ĉiuj eblaj areoj. La baza aliro restis senŝanĝa, same kiel multaj bazaj konceptoj: abstraktaĵoj, nomspacoj, modulareco, tipoj. Sed la aro de lingvoj, per kiuj ĉi tiuj konceptoj estas pruvitaj, tute ŝanĝiĝis. Kiam la kurso estis unue kreita, estis multaj ekzemploj en Paskalo, sed hodiaŭ multaj el miaj lernantoj eĉ ne aŭdis pri ĉi tiu lingvo. Sed ili konas Swift, Go, Rust, do mi devas paroli pri la lingvoj, kiuj estas uzataj hodiaŭ. Ankaŭ studentoj nun bone konas skriptlingvojn, sed kiam mi komencis instrui ĉi tiun kurson, temis pri kompilitaj lingvoj. Nun ni bezonas multe da materialo pri Python, Ruby kaj eĉ Perl, ĉar ĉi tio estas kodo skribita en ĉi tiuj tagoj, kaj okazas multaj interesaj aferoj en ĉi tiuj lingvoj, inkluzive en la kampo de lingvodezajno. 

Vitali: Tiam mia sekva demando estos rilata al la antaŭa. Kiel daŭrigi en ĉi tiu areo? Mi suspektas, ke ĝisdatigi tian kurson postulas multe da laboro - necesas kompreni novajn lingvojn, kompreni la ĉefajn ideojn. Kiel vi faras ĉi tion?

Mi Michaelaelo: Mi ne povas fanfaroni, ke mi ĉiam sukcesas 100%. Sed plejofte mi nur faras tion, kion faras ĉiuj aliaj - legi la Interreton. Se mi volas kompreni Rust, mi Google ĝin, iru al la paĝo de Mozilo kaj legu la manlibron afiŝita tie. Ĉi tio estas parto de la aferoj, kiuj okazas en komerca evoluo. Se ni parolas pri scienco, tiam vi devas sekvi la raportojn ĉe la ĉefaj konferencoj. 

Ligo inter komerco kaj akademio

Vitali: Ni parolu pri la rilato inter komerca kaj scienca esplorado. En via listo de verkoj, mi trovis plurajn artikolojn pri kaŝmemoro. Mi komprenas, ke la kaŝmemorkonsekvencaj algoritmoj estis malstabilaj kiam ili estis publikigitaj? Aŭ ne sufiĉe disvastigita. Kiom oftaj estis viaj ideoj en la praktiko?

Mi Michaelaelo: Mi ne estas precize certa pri kiuj publikaĵoj vi parolas. Mi multe laboris kun miaj studentoj Bill Bolosky (Vilhelmo Bolosky) kaj Leonidas Kontotanassis (Leonidas Kontothanassis) en la fruaj 1990-aj jaroj pri memoradministrado de Neumann-maŝinoj. En tiu tempo, komerco ankoraŭ ne komprenis kiel ĝuste fari multiprocesoran sistemon: ĉu indas krei subtenon por aliro al fora memoro ĉe la aparataro, ĉu valoras distribui la memoron, ĉu eblas ŝargi la kaŝmemoron el? fora memoro, aŭ ĉu necesas movi paĝojn en la operaciejo?-sistemo. Bill kaj Leonidas ambaŭ laboris en tiu areo kaj esploris alirojn sen fora kaŝmemorŝarĝado. Tio ne estis rekte rilatita al kaŝmemorkohereco, sed ĝi daŭre estis laboro pri NUMA-memoradministrado, kaj poste modernaj aliroj al paĝlokigo en modernaj operaciumoj kreskis de tio. Ĝenerale, Bill kaj Leonidas faris gravan laboron, kvankam ne la plej influan en tiu ĉi areo - estis multaj aliaj homoj laborantaj pri la sama afero tiutempe. Poste, mi laboris pri temo rilata al kaŝmemorkohereco en la kunteksto de aparatara transakcia memoro. La grupo kun kiu mi laboris pri ĉi tiu problemo finis ricevi plurajn patentojn. Estas kelkaj sufiĉe interesaj ideoj malantaŭ ili, sed mi ne pensas, ke ili finfine efektiviĝos praktike. Iel aŭ alimaniere, estas malfacile por mi juĝi ilian profitecon. 

Алексей: Ĉi-rilate, pli persona demando: kiom gravas al vi, ke viaj ideoj estas praktikitaj? Aŭ ĉu vi ne pensas pri tio?

Mi Michaelaelo: Я обожаю задавать этот вопрос в интервью с другими людьми, абитуриентами или кандидатами, желающими работать на факультете. Мне не кажется, что на этот вопрос есть правильный ответ. У людей, делающих классные вещи, может быть самая разная мотивация. Меня проблемы привлекают, потому что они лично мне кажутся интересными, а не из-за их практической пользы. Но с другой стороны, когда какая-нибудь интересная штука всё-таки находит себе применение, мне это очень нравится. Так что тут всё непросто. Но в начале работы всё-таки мной движет не идея конечного использования в мире, а стройность идеи и желание её исследовать и посмотреть, что из неё выйдет. Если в итоге она даст практическую отдачу — отлично. 

Алексей: Pro via edukado kaj sperto, vi pli kapablas ol la plimulto juĝi la valoron de la ideoj de aliaj homoj. Vi povas kompari ilin kaj determini kiu funkcias pli bone kun kiu. Mi certas, ke vi havas opinion pri aferoj, kiuj nuntempe estas uzataj praktike de grandaj fabrikantoj kiel Intel. Laŭ via vidpunkto, kiom ĝusta estas la kurso, kiun ĉi tiuj kompanioj faras?

Mi Michaelaelo: Praktiko ĉiam rondiras ĉirkaŭ tio, kio povas esti komerce sukcesa, tio estas, krei profiton, kaj vi pli bone demandi iun alian pri tio. Mia laboro plejparte rezultas en publikaĵoj, kaj en la kampo de operaciumoj ili estas taksitaj surbaze de agado-indikiloj: rapideco, energikonsumo, kodgrandeco. Sed ĉiam ŝajnis al mi, ke ĉi tiuj empiriaj rezultoj estas aldonitaj al artikoloj nur por ke ili estu eldonitaj, kaj la veraj labormotivoj de homoj estas estetikaj. Esploristoj taksas solvojn el arta perspektivo, ili zorgas pri kiom elegantaj la ideoj estas, kaj ili provas krei ion pli bonan ol ekzistantaj aliroj. Esploristoj estas pelitaj de personaj, subjektivaj, estetikaj motivoj. Sed vi ne povas skribi pri tio en la artikolo mem; ĉi tiuj aferoj ne estas argumentoj por la programa komitato. Feliĉe, elegantaj solvoj ofte estas ankaŭ rapidaj kaj malmultekostaj. Dekduo da miaj kolegoj kaj mi diskutis ĉi tiun temon antaŭ ĉirkaŭ 15 jaroj kaj finfine verkis artikolon pri ĝi. Mi pensas, ke vi ankoraŭ povas trovi ĝin nun, ĝi nomiĝas "Kiel taksi sisteman esploradon" aŭ io tia, ĝi havas pli ol dekduon da aŭtoroj. Ĉi tiu estas la sola artikolo, en kiu mi estas la aŭtoro kune kun Saŝa Fedorova, do se vi serĉas ŝian nomon en mia listo de eldonaĵoj, vi trovos tion, kion vi bezonas. Ĝi parolas pri taksado de sistemaj esploroj kaj kiom gravas eleganteco. 

Алексей: Do estas diferenco inter la normo de tio, kio estas konsiderata bona en scienco kaj en komerco. La scienco taksas rendimenton, elektrokonsumon, TDP, facilecon de efektivigo kaj multe pli. Ĉu vi havas la ŝancon fari ĉi tiun tipon de esplorado en la universitato? Ĉu vi havas laboratorion kun malsamaj maŝinoj kaj malsamaj arkitekturoj en kiu vi povus fari eksperimentojn?

Mi Michaelaelo: Jes, nia fako havas multajn diversajn interesajn maŝinojn. Plej ofte ili estas malgrandaj, ni havas malgrandan areton kaj multajn multprocesorajn sistemojn kun malsamaj akceliloj. Krome, la kampuso havas grandegan komputikcentron kiu servas sciencistojn de pluraj dekduoj da malsamaj disciplinoj. Ĝi havas ĉirkaŭ mil nodojn kaj dudek mil kernojn, ĉio en Linukso. Se la bezono aperas, vi ĉiam povas aĉeti iujn AWS. Do ni ne havas signifajn limigojn kun aparataro. 

Алексей: Kiel ĝi estis antaŭ tridek jaroj? Ĉu estis problemoj tiam?

Mi Michaelaelo: Estis iom alie tiam. En la mez-al-malfruaj 1980-aj jaroj, scienco estis konsiderita kiel manke de komputikresursoj. Por solvi ĉi tiun situacion, la Nacia Scienca Fondaĵo (Nacia Scienca Fonduso) kreis programon de kunordigita eksperimenta esplorado (Coordinated Experimental Research, CER). La misio de la programo estis disponigi komputikinfrastrukturon por Komputika fakoj, kaj ĝi realigis signifan ŝanĝon. Per la mono, kiun ŝi disponigis, ni ĉe la Universitato de Roĉestro aĉetis 1984-nodan BBN-Papilion en 128, tio estis jaro antaŭ ol mi alvenis tien. Tiutempe ĝi estis la plej granda multiprocesora sistemo de la mondo kun komuna memoro. Ĝi havis 128 procesorojn, ĉiu sur aparta baztabulo, kaj okupis kvar rakojn. Ĉiu procesoro havis megabajton da memoro, 128 megabajtoj da RAM estis neimagebla kvanto en tiu tempo. Sur ĉi tiu maŝino ni unuafoje efektivigis MCS-ŝlosadon. 

Алексей: Do, se mi bone komprenas vin, tiam nuntempe la problemo kun la aparataro estas solvita? 

Mi Michaelaelo: Ĝenerale, jes. Estas kelkaj avertoj: unue, se vi faras komputilan arkitekturon je la blatnivelo, ĝi estas malfacile fari en akademia medio ĉar ekzistas multe pli bonaj iloj por fari ĝin en komerco. Se vi bezonas ion pli malgrandan ol 10 nanometrojn, vi devos mendi ĝin de iu alia. En ĉi tiu areo estas multe pli facile esti esploristo ĉe Intel. Se vi laboras pri optikaj komunikadoj sur blatoj aŭ sur solida memoro, vi trovos teknologiojn en komerco, kiuj ankoraŭ ne estas en scienco, do vi devas krei aliancojn. Ekzemple, Stephen Swanson (Steven Swanson) kreita tia partnereco por novaj memorteknologioj. Ĉi tiu formo ne ĉiam funkcias, sed en iuj kazoj ĝi povas esti sufiĉe sukcesa. Krome, en scienco la evoluo de la plej potencaj komputilaj sistemoj estas pli malfacila. La plej grandaj superkomputilprojektoj nuntempe en Usono, Japanio kaj Ĉinio estas ĉiuj temigis komercon. 

Praktika efektivigo de ideoj. MCS, MS, CLH, JSR 166, laborante kun Doug Lee kaj pli.

Vitali: Vi jam parolis pri kiel vi komencis labori pri sinkronigaj algoritmoj. Vi havas du tre famajn artikolojn pri MCS-blokado и Michael-Scott-vico (MS), которые в определённом смысле были реализованы в Java. (Примечание редакции: все публикации можно посмотреть ligilo). Tie ĉi tiu blokado estis efektivigita kun kelkaj ŝanĝoj kaj ĝi rezultis CLH seruro, kaj la vico estis efektivigita kiel celite. Sed multaj jaroj pasis inter la publikigo de viaj artikoloj kaj ilia praktika aplikado. 

Алексей: Ŝajnas ĉirkaŭ 10 jaroj en la kazo de la vico.

Mi Michaelaelo: Antaŭ ol ĉi tiuj funkcioj aperis en la Java norma biblioteko?

Vitali: Jes. Kion vi faris por ke tio okazu? Aŭ ĉu ili faris nenion?

Mi Michaelaelo: Mi povas rakonti al vi kiel MS Queue eniris Java 5. Kelkajn jarojn antaŭ ol ĝi aperis, mi laboris kun la grupo de Mark Moyers ĉe Sun Microsystems en ilia laboratorio proksime de Boston. Li organizis laborrenkontiĝon por homoj, kiujn li konis, kiuj laboris pri interesaj problemoj en multifadenado ĉar li volis trovi temojn kiujn li povis vendi al ilia firmao. Tie mi unue renkontis Doug Lea. Doug kaj mi kaj ĉirkaŭ 25 aliaj homoj de Sun kune diskutis pri la prezento de Doug JSR 166, kiu poste iĝis java.util.concurrent. Dum la vojo, Doug diris, ke li ŝatus uzi la MS-vicon, sed por tio li bezonis nombrilon por la nombro da elementoj en la vosto por la interfaco. Tio estas, tio devus esti farita per aparta metodo, atoma, preciza kaj rapida. Mi sugestis simple aldoni seriajn numerojn al la nodoj, preni la nombron de la unua nodo kaj la lasta kaj subtrahi unu de la alia. Doug gratis sian kapon, diris "kial ne" kaj finis ĝuste tion. Ni diskutis efektivigi ĉi tiun aliron en la biblioteko, sed Doug faris la plej grandan parton de la laboro mem. Kiel rezulto, li sukcesis establi bonegan multifadenan subtenon en Java. 

Алексей: То есть если я правильно понимаю, метод .size() должен был входить в стандартный интерфейс очереди, и у него должна была быть алгоритмическая сложность O(1)?

Mi Michaelaelo: Jes, kaj krom tio necesas aparta nombrilo.

Алексей: Ĉar se vi nomas la metodon .size() en Java, la rezulto estas atendita esti disponebla tuj kaj ne bazita sur la reala grandeco de la kolekto. Mi vidas, dankon.

Mi Michaelaelo: Несколькими годами позже я работал над двойными структурами данных (dual data structures) с моим студентом Биллом Шерером (Bill Scherer) — собственно, о них будет мой raporto pri Hidro. Doug venis al ni kaj diris, ke li povas uzi ilin en la Java Executor Framework. Kune kun Bill, ili kreis du efektivigojn, la tielnomitajn justajn kaj maljustajn atendovicojn. Mi konsilis ilin pri ĉi tiu projekto, kvankam mi ne partoprenis en la verkado de la reala kodo. Kiel rezulto, la rapideco de ekzekutistoj signife pliiĝis. 

Vidi: Ĉu vi renkontis malĝustajn realigojn de viaj algoritmoj aŭ petojn aldoni novajn funkciojn? Ĝenerale, praktiko devus koincidi kun teorio, sed sufiĉe ofte ili diferencas. Supozu, ke vi skribis algoritmon, kaj surpapere ĝi funkcias, sed la homoj, kiuj estas implikitaj en la efektivigo, komencis peti de vi pli da funkcioj aŭ ia tajlado de la algoritmo. Ĉu vi iam havis tiajn situaciojn?

Mi Michaelaelo: La nura ekzemplo en kiu iu venis al mi kaj demandis "kiel efektivigi ĝin" estis la demando de Doug, pri kiu mi jam parolis. Sed estis kelkaj kazoj kie interesaj ŝanĝoj estis faritaj por konveni praktikajn bezonojn. Ekzemple, la K42-teamo ĉe IBM transformis la MCS-seruron kaj igis ĝin norma interfaco tiel ke ekzistis neniu bezono pasi la atendovicnodon tien kaj reen al la akirado kaj liberigo rutinoj. Danke al ĉi tiu norma interfaco, ideo, kiu estis bela teorie, ekfunkciis en la praktiko. Estas surprize, ke ili neniam publikigis artikolon pri ĝi, kaj kvankam ili ricevis patenton, ili poste forlasis ĝin. La ideo estis mirinda, kaj mi provas paroli pri ĝi kiam ajn eblas. 

Estis aliaj kazoj kie homoj faris plibonigojn al la algoritmoj kiujn mi publikigis. Ekzemple, la MS-vico havas du-paŝan instalaĵmekanismon, kio signifis ke ekzistis du CASoj sur la kritika pado de la atendovico. Sur pli malnovaj aŭtoj, CAS estis sufiĉe multekostaj. Intel kaj aliaj fabrikantoj sufiĉe bone optimumigis ilin lastatempe, sed iam ĉi tiuj estis 30-ciklaj instrukcioj, do havi pli ol unu sur la kritika vojo estis nedezirinda. Kiel rezulto, malsama atendovico estis evoluigita kiu estis simila al la MS-vico, sed kiu havis nur unu atoman operacion sur la kritika pado. Tio estis atingita pro la fakto ke dum certa tempodaŭro la operacio povis preni O (n) tempon, prefere ol O (1). Ĝi estis neverŝajna, sed ebla. Ĉi tio okazis pro tio, ke en certaj momentoj la algoritmo trairis la atendovicon de la komenco ĝis la nuna pozicio en ĉi tiu vico. Ĝenerale, la algoritmo montriĝis tre sukcesa. Kiom mi scias, ĝi ne estas tre vaste uzata, parte ĉar atomoperacioj postulas signife malpli da rimedoj ol antaŭe. Sed la ideo estis bonega. Mi ankaŭ tre ŝatas la verkon de Dave Dice de Oracle. Ĉio, kion li faras, estas tre praktika kaj li tre lerte uzas feron. Li havis manon en multo da la NUMA-konsciaj sinkronigaj algoritmoj kaj multi-fadenaj datumstrukturoj. 

Vidi: Kiam vi skribas algoritmojn aŭ instruas studentojn, la rezulto de via laboro ne estas tuj videbla. La komunumo bezonas iom da tempo por konatiĝi kun, ekzemple, nova artikolo. La nova algoritmo ne tuj trovas aplikon. 

Mi Michaelaelo: Estas malproksime de tuj klare ĉu la artikolo estos signifa aŭ ne. Mi pensas, ke estus interese fari studon de artikoloj, kiuj gajnis premiojn en konferencoj. Tio estas, rigardu la artikolojn, kiujn homoj en la programkomitatoj iam konsideris la plej bonaj. Vi devas provi kalkuli per la nombro da ligiloj kaj la efiko al komerco kiom influaj ĉi tiuj artikoloj vere montriĝis en 10, 20, 25 jaroj. Mi dubas, ke estus forta korelacio inter la du. Ĝi ne estos nulo, sed plej verŝajne ĝi estos multe pli malforta ol ni ŝatus. Multaj ideoj restas longe nereklamataj antaŭ ol ili disvastiĝas. Ekzemple, ni prenu transakcian memoron. Pli ol 10 jaroj pasis de la tempo kiam la originala artikolo estis publikigita ĝis la tempo, kiam homoj efektive komencis konstrui maŝinojn per ĝi. Kaj antaŭ la apero de ĉi tiu memoro en komercaj produktoj - kaj ĉiuj 20. Dum tre longa tempo neniu atentis la artikolon, kaj tiam la nombro da ligiloj al ĝi akre pliiĝis. Estus malfacile antaŭdiri ĉi tion. Aliflanke, foje ideoj trovas efektivigon tuj. Antaŭ kelkaj jaroj, mi skribis artikolon kun Joe Izraelevitz por DISK kiu proponis novan formalan difinon de valideco por persistaj datumstrukturoj kiuj povus esti uzataj post kiam la komputilo prizorganta ilin kraŝoj. Mi ŝatis la artikolon de la komenco, sed ĝi montriĝis multe pli populara ol mi atendis. Ĝi estis uzita fare de pluraj malsamaj grupoj kaj poste iĝis la norma difino de persistaj strukturoj. Kio, kompreneble, estas bela.

Vidi: Ĉu ekzistas teknikoj, kiujn vi uzas por taksado? Ĉu vi eĉ provas taksi viajn artikolojn kaj viajn studentojn? Koncerne ĉu la persono, kiun vi instruis, iras en la ĝustan direkton.

Mi Michaelaelo: Kiel ĉiuj aliaj, mi pli atentas tion, kion mi faras nuntempe. Denove, kiel ĉiuj aliaj, mi foje kontrolas Google Scholar por vidi ĉu miaj pasintaj artikoloj estas cititaj, sed tio estas pli pro scivolemo. Plejparte mi absorbiĝas pri tio, kion faras miaj studentoj nun. Kiam temas pri taksado de aktuala laboro, parto de ĝi estas estetikaj konsideroj, kio estas eleganta kaj kio ne. Kaj ĉe la ĉiutaga nivelo, malfermaj demandoj ludas grandan rolon. Ekzemple, studento venas al mi kun grafikaĵo de iuj rezultoj, kaj ni provas kompreni, de kie venis ia stranga konduto de la grafikaĵo. Ĝenerale, en nia laboro ni konstante provas kompreni aferojn, kiujn ni ankoraŭ ne komprenas. 

Transakcia memoro

Vitali: Eble ni povas iomete paroli pri transakcia memoro?

Mi Michaelaelo: Mi opinias, ke indas diri almenaŭ iomete, ĉar mi multe klopodis por tio. Ĉi tio estas temo pri kiu mi havas pli da publikaĵoj ol iu ajn alia. Sed samtempe, strange, mi ĉiam estis tre skeptika pri transakcia memoro. Miaopinie, artikolo de Herlihy kaj Moss (M. Herlihy, J. E. B. Moss) estis publikigita antaŭ sia tempo. En la fruaj 1990-aj jaroj, ili sugestis ke transakcia memoro povus helpi al talentaj programistoj labori pri plurfadenaj datumstrukturoj, tiel ke tiuj strukturoj povus tiam esti utiligitaj kiel bibliotekoj fare de ordinaraj programistoj. Tio estas, ĝi estus helpo por Doug Lee faranta sian JSR 166. Sed transakcia memoro ne estis celita faciligi plurfadenan programadon. Sed ĝuste tiel ĝi komencis esti perceptita komence de la 2000-aj jaroj, kiam ĝi disvastiĝis. Ĝi estis reklamita kiel maniero solvi la problemon de paralela programado. Ĉi tiu aliro ĉiam ŝajnis al mi senespera. Transakcia memoro povis nur faciligi skribi paralelajn datumstrukturojn. Ĉi tio, ŝajnas al mi, estas kion ŝi atingis. 

О сложности написания многопоточного кода

Алексей: Tre interesa. Ŝajnas esti certa baro inter regulaj programistoj kaj tiuj, kiuj povas skribi multfadenan kodon. Pasintjare, mi parolis plurajn fojojn kun homoj, kiuj efektivigis iun algoritman kadron. Ekzemple, kun Martin Thomson, same kiel kun programistoj laborantaj pri plurfadenaj bibliotekoj. (Noto de la redaktoro: Martin Thompson estas tre fama programisto, li skribis Disruptor и Aeron. Kaj li ankaŭ havas raporto ĉe nia Joker 2015-konferenco, videoregistrado disponebla ĉe Jutubo. Li estas la sama malfermita ĉi tiu konferenco ĉefa registrado ankaŭ disponeblas). La ĉefa defio, ili diras, estas fari la algoritmojn kaj rapidajn kaj facile uzeblajn. Tio estas, ili provas venki ĉi tiun baron kaj altiri kiel eble plej multajn homojn al ĉi tiu areo. Kion vi opinias pri ĝi?

Mi Michaelaelo: Это главная проблема многопоточности: как добиться высокой производительности, не увеличивая сложности системы. 

Алексей: Ĉar kiam ili provas eviti kompleksecon, la algoritmo fariĝas malpli universala.

Mi Michaelaelo: La ŝlosilo ĉi tie estas konvene desegnitaj abstraktaĵoj. Ŝajnas al mi, ke ĉi tio ĝenerale estas la ĉefa afero por komputilaj sistemoj kiel kampo. Butler Lampson ŝatas uzi ĉi tiun terminon, kaj li nomas nin "komercistoj de abstraktaĵoj". Simplaj teknologioj ne ekzistas hodiaŭ. La procesoroj, kiujn ni uzas, havas 10 miliardojn da transistoroj - simpleco estas ekstere de demando. Samtempe, la ISA estas multe pli simpla ol la procesoro, ĉar ni laboris tre longan tempon por provizi ĝin per alta rendimento kaj relative simpla interfaco. Sed ankaŭ ĉe ŝi ne ĉio estas glata. La sama problemo estas kun akceliloj, kiuj nun aperas sur la merkato. Demandoj ŝprucas - kiel fari la ĝustan interfacon por la GPU, ĉifrada mekanismo, kunpremado, transkoda mekanismo, lineara algebra mekanismo, aŭ eĉ pli fleksebla FPGA. Kiel krei interfacon kiu igas la ilon facile uzebla kaj kaŝas kompleksecon? Ĝi ne forigos ĝin, sed prefere kaŝos ĝin de simpla programisto. 

Алексей: Kiel mi komprenas ĝin, ni ankoraŭ havas baron por kompreni abstraktaĵojn. Ni prenu la memormodelon; en nia stadio de evoluo de scienco kaj teknologio, tio estas unu el la ĉefaj abstraktaĵoj. Danke al ĝi, ĉiuj programistoj estas dividitaj en du grupojn: la pli granda parto estas tiuj, kiuj ne komprenas ĝin, kaj la pli malgranda parto estas tiuj, kiuj komprenas, aŭ opinias, ke ili komprenas. 

Mi Michaelaelo: Tio estas bona demando - ĉu iu el ni vere komprenas la memormodelon?

Vitali: Precipe en C++.

Mi Michaelaelo: Поговорите как-нибудь с Хансом Бёмом (Hans Boehm). Это один из самых умных людей, которых я знаю, ведущий эксперт по моделям памяти. Он вам сразу же скажет, что он очень многого там не понимает. Но если возвращаться к вопросу абстракций, то, на мой взгляд, самая важная мысль в области моделей памяти за последние 30 лет была высказана в диссертации Сарита Адве. (Примечание редакции: полный список публикаций есть ligilo).

Алексей: Mia demando estas: ĉu ĉi tiu baro venas de la naturo mem de la koncepto? 

Mi Michaelaelo: Нет. Сарита пришёл к выводу, что при правильном подходе можно успешно скрыть всю сложность, получить высокую производительность и дать программисту простой API. И если следовать этому API, то можно добиться последовательной согласованности. Я считаю, что это правильная модель. Пишете код без гонок данных и получаете последовательную согласованность. Конечно, для того, чтобы уменьшить вероятность гонок, нужны специальные инструменты, но это уже другой вопрос. 

Vidi: Ĉu estis tempoj en via kariero, kiam problemo, kiu ŝajnis solvita subite, fariĝis katastrofo, aŭ montriĝis, ke ĉi tiu problemo estis nesolvebla? Ekzemple, en teorio vi povas faktorigi ajnan nombron aŭ determini ĉu iu nombro estas primo. Sed praktike tio povas esti malfacile farebla; kun la nuna aparataro estas malfacile faktorigi nombrojn. Ĉu io simila okazis al vi?

Mi Michaelaelo: Mi ne tuj memoras ion tian. Estis tempoj, kiam ŝajnis al mi, ke estas nenio por fari en certa areo, sed tiam io nova kaj interesa okazis tie. Ekzemple, mi pensis, ke la areo de senlima vico jam atingis maturecon. Post pluraj plibonigoj al la MNS-vico, nenio plu okazis. Kaj tiam Morrison (Adam Morrison) kaj Afek (Yehuda Afek) inventis очередь LCRQ. Стало ясно, что возможна неограниченная многопоточная очередь, у которых большую часть времени на критическом пути была только инструкция fetch-and-increment. И это позволяло добиться на порядок лучшей производительности. Не то что бы мы не знали, что fetch-and-increment очень полезная вещь. Эрик Фрейдентал (Eric Freudenthal) писал об этом в своей работе об Ultracomputer c Аланом Готтлибом (Allan Gottlieb) в конце 1980-х, но там речь шла об ограниченных очередях. Моррисон и Афек смогли использовать fetch-and-increment в неограниченной очереди.

Novaj arkitekturoj. Ĉu la venko de transakcia memoro estas proksima?

Vidi: Ĉu vi serĉas novajn arkitekturajn solvojn, kiuj povus esti utilaj por algoritmoj? 

Mi Michaelaelo: Kompreneble, estas multaj aferoj, kiujn mi ŝatus vidi efektivigitaj. 

Vidi: Kia, ekzemple?

Mi Michaelaelo: Antaŭ ĉio, kelkaj simplaj etendaĵoj al nia aparataro-nivela transakcia memoro en Intel kaj IBM-procesoroj. Aparte, mi ŝatus, ke la ne-transakcia ŝarĝo kaj vendejo, kiuj ĵus okazis, estu tuj haveblaj ene de transakcioj. Ili tuj kondukas al bukloj en la sekvenco okazas-antaŭe, do ili povas esti malfacilaj. Sed se vi konservas tavolojn de abstraktado, estas multaj tre interesaj aferoj, kiujn vi povas fari ekster la transakcio dum ĝi okazas. Mi ne scias kiom malfacile ĉi tio estus efektivigi, sed ĝi estus tre utila. 

Alia utila afero estas ŝargi kaŝmemoron el fora memoro. Mi pensas, ke pli aŭ malpli frue ĉi tio estos farita. Ĉi tiu teknologio permesos la kreadon de sistemoj kun disigita memoro. Eblus konservi, ekzemple, 100 terabajtojn da nevolatila memoro en rako, kaj la operaciumo mem dinamike decidus kiuj sekcioj de tiu memoro devus respondi al la fizika adresspaco de la procesoroj. Ĉi tio estus ege utila por nuba komputado, ĉar ĝi permesus provizi grandajn kvantojn da memoro al la taskoj kiuj bezonas ĝin. Mi pensas, ke iu faros ĝin.

Vitali: Por fini paroli pri transakcia memoro, mi havas plian demandon pri ĉi tiu temo. Ĉu transakcia memoro eventuale anstataŭigos normajn multfadenajn datumstrukturojn?

Mi Michaelaelo: Ne. Transakcioj estas konjekta mekanismo. Je la programa nivelo ĉi tiuj estas atomseruroj, sed interne ili estas konjektoj. Tia prognozo funkcias se la plej multaj el la divenoj estas ĝustaj. Tial transakcia memoro funkcias bone kiam fadenoj apenaŭ interagas unu kun la alia, kaj vi nur bezonas certigi, ke ne ekzistas interagoj. Sed se mesaĝo komenciĝas inter fadenoj, transakcioj malmulte utilas. Mi klarigu, ni parolas pri la kazo, kiam transakcioj estas envolvitaj ĉirkaŭ la tuta atoma operacio. Ili ankoraŭ povas esti sukcese uzataj kiel komponantoj por multfadenaj datumstrukturoj. Ekzemple, se vi bezonas trivortan CAS, kaj vi devas multifadeni tri malgrandajn aferojn meze de vere multfadena algoritmo, kiu funkcias kun dudek fadenoj samtempe. Ĝenerale, transakcioj povas esti utilaj, sed ili ne forigos la bezonon ĝuste desegni multfadenajn datumstrukturojn. 

Nevolatila memoro, Optane DIMM, ultrarapidaj aparatoj.

Vitali: La lasta afero, pri kiu mi ŝatus paroli, estas la temo de via nuna esploro: nevolatila memoro. Kion ni povas atendi en ĉi tiu areo en la proksima estonteco? Eble vi scias pri iuj efikaj efektivigoj, kiuj jam ekzistas? 

Mi Michaelaelo: Mi ne estas fakulo pri aparataro, mi scias nur kion mi legas en la novaĵoj kaj kion rakontas miaj kolegoj. Ĉiuj jam aŭdis, ke Intel vendas Optane DIMM, у которых где-то в 3 раза больше задержка чтения и в 10 раз больше задержка записи, чем у динамических RAM. В скором времени они будут доступны в версиях с очень большим объемом. Забавно думать о том, что можно будет иметь ноутбук с несколькими терабайтами адресуемой в байтах RAM. Вполне вероятно, что через 10 лет мы решим использовать эту новую технологию, так как мы используем DRAM — просто наращивать объёмы. Но благодаря энергонезависимости у нас открываются совершенно новые возможности. Мы можем в корне изменить стек хранения данных, чтобы не было разделения между адресуемой в байтах рабочей памятью и блочно-структурированной персистентной памятью. Таким образом, нам не нужно будет сериализовать в блочно-структурированные файлы всё, что нужно — перенести из одного запуска программы в другой. Из этого можно вывести множество важных принципов, влияющих на операционные системы, среды выполнения и распределенные хранилища данных. В этой области очень интересно работать. Лично мне сложно предсказать, во что это всё выльется, но проблемы здесь крайне занимательные. Возможно, здесь произойдут революционные изменения, и они очень естественным образом следуют из работы над многопоточностью, поскольку восстановление после сбоя является «многопоточным» процессом рядом с обычной работой системы. 

La dua ĉefa temo, pri kiu mi nun laboras, estas administri ultrarapidajn aparatojn kaj sekurigi aliron al aparatoj de la uzantspaco kun sistema politika kontrolo. En la lastaj jaroj, estis tendenco movi aliron al la aparato al la uzantspaco. Ĉi tio estas farita ĉar la TCP-IP-kernstako ne povas funkcii aldone al retinterfaco kiu bezonas novan pakaĵeton ĉiujn 5 mikrosekundojn; ĝi simple ne daŭrigos. Tial fabrikantoj disponigas rektan aliron al aparatoj. Sed ĉi tio signifas, ke la operaciumo perdas kontrolon de la procezo kaj ĝi ne povas provizi taŭgan aliron al la aparato por konkurantaj aplikoj. Nia esplorteamo opinias, ke ĉi tiu manko povas esti evitita. Ni havos artikolon pri tio ĉe USENIX ATC ĉi-monate. Ĝi rilatas al laboro pri persisto, ĉar longdaŭra bajt-adresebla persista memoro estas, esence, aparato kun ultrarapida I/O kiu devas esti alirita en la uzantspaco. Ĉi tiu esplorado ebligas novajn alirojn al mikrokernoj, eksokernoj kaj aliaj tradiciaj provoj sekure movi funkciecon de la OS-kerno al la uzantspaco. 

Vidi: Byte-adresebla memoro estas bonega, sed estas fizika limigo - la lumrapideco. Ĉi tio signifas, ke neeviteble estos prokrasto dum interagado kun la aparato. 

Mi Michaelaelo: Tute prave.

Vidi: Хватит ли мощностей для того, чтобы справиться с новыми нагрузками?

Mi Michaelaelo: Ĉi tio estas bonega demando, sed estos malfacile por mi respondi. La ideo pri prilaborado en memoro ekzistas jam de sufiĉe da tempo, ĝi estas tre interesa, sed ankaŭ tre kompleksa. Mi ne laboris en ĉi tiu areo, sed estus bonege, se oni farus tie kelkajn malkovrojn. Mi timas, ke mi havas nenion pli por aldoni. 

Vidi: Estas unu plia problemo. Novaj, signife pli grandaj kvantoj da RAM estos neeble enigeblaj en la CPU. Tial, pro fizikaj limigoj, ĉi tiu RAM devas esti izolita. 

Mi Michaelaelo: Ĉio dependas de la nombro da difektoj en la produktado de integraj cirkvitoj. Se eblus krei duonkonduktajn oblatojn tute sen difektoj, tiam eblus fari tutan mikrocirkviton el ĝi. Sed nun ni ne scias kiel fari mikrocirkvitojn pli grandaj ol poŝtmarkoj. 

Vidi: Sed ni ankoraŭ parolas pri grandegaj grandecoj, pri centimetroj. Ĉi tio neeviteble efikas sur latencia. 

Mi Michaelaelo: Да. Со скоростью света ничего не поделаешь. 

Vidi: Bedaŭrinde. 

Следующий большой тренд. Dual data structures. Hydra.

Vitali: Laŭ mia kompreno, vi tre rapide kaptas novajn tendencojn. Vi estis unu el la unuaj, kiuj laboris en transakcia memoro, kaj unu el la unuaj, kiuj laboris en nevolatila memoro. Kio laŭ vi estos la sekva granda tendenco? Aŭ eble ĝi estas sekreto?

Mi Michaelaelo: Verdire, mi ne scias. Espereble mi povos rimarki kiam io nova aperos. Mi ne estis sufiĉe bonŝanca inventi iun novan kampon memstare, sed mi havis kelkajn bonŝancojn kaj povis eklabori sufiĉe frue en novaj kampoj kreitaj de aliaj. Mi esperas, ke mi povos fari tion estonte.

Алексей: La lasta demando en ĉi tiu intervjuo estos pri via agado ĉe Hydra kaj viaj agadoj en la lernejo. Se mi bone komprenas, la raporto en la lernejo estos pri senblokaj algoritmoj, kaj en la konferenco pri duoblaj datumstrukturoj. Ĉu vi povus diri kelkajn vortojn pri ĉi tiuj raportoj?

Mi Michaelaelo: Parte, ni jam tuŝis ĉi tiujn temojn kun vi en ĉi tiu intervjuo. Temas pri la laboro, kiun mi faris kun mia studento Bill Scherer. Li skribis tezon pri ĝi, kaj Doug Lee ankaŭ kontribuis al ĝi, kaj ĝi poste iĝis parto de la multfadenaj sinkronaj atendovicoj en la Java biblioteko. Ni supozu, ke la datumstrukturo estas legita kaj skribita sen blokado, tio estas, ĉiu operacio havas limigitan nombron da instrukcioj sur la kritika vojo. Se vi provas forigi datumojn de malplena ujo, aŭ provas forigi iujn datumojn, kiuj ne estas en ĉi tiu ujo, vi tuj informiĝas, ke tio ne povas esti farita. Sed ĉi tiu konduto eble ne estas akceptebla se la fadeno vere bezonas ĉi tiujn datumojn. Tiam la unua afero, kiu venas al la menso, estas krei buklon, kiu konstante demandos ĉu la necesaj datumoj aperis. Sed tiam estas enmiksiĝo por ĉiuj aliaj. Krome, kun ĉi tiu aliro, vi povas atendi 10 minutojn, kaj tiam venos iu alia fadeno, kaj ĝi hazarde ricevos la necesajn datumojn unue. Duoblaj datumstrukturoj ankoraŭ ne havas serurojn, sed ili permesas al fadenoj atendi ĝuste. La termino "duobla" signifas, ke la strukturo enhavas aŭ datumojn aŭ petojn por datumoj, ni nomu ilin kontraŭ-datumoj. Do se vi provas preni ion el malplena ujo, peto estos metita en la ujon anstataŭe. Nun la fadeno povas atendi peton sen ĝeni iun alian. Aldone, la datumstrukturo atribuas prioritatojn al petoj tiel ke kiam ricevite, ĝi transdonas ilin al la ĝusta persono. La rezulto estas ne-ŝlosa mekanismo, kiu ankoraŭ havas formalan specifon kaj bonan agadon en praktiko. 

Алексей: Kio estas viaj atendoj de ĉi tiu datuma strukturo? Ĉu ĝi plibonigos rendimenton en ĉiuj oftaj kazoj, aŭ ĉu ĝi pli taŭgas por certaj situacioj? 

Mi Michaelaelo: Ĝi estas utila se, unue, vi bezonas ujon sen ŝlosi, kaj, due, vi devas atendi en situacio, kie vi devas preni datumojn de la ujo, kiu ne estas en ĝi. Laŭ mia scio, nia kadro provizas optimuman konduton kiam ĉi tiuj du kondiĉoj estas plenumitaj. Tial, en ĉi tiuj kazoj mi rekomendas uzi ĝin. La ĉefa avantaĝo de senŝlosaj datumstrukturoj estas, ke ili evitas rendimentajn problemojn. Kaj atendado estas tre grava en multaj algoritmoj se datumoj estas translokigitaj de unu fadeno al alia.

Vitali: Mi klarigu: ĉu vi parolos pri la sama afero kaj en la lernejo kaj en la konferenco?

Mi Michaelaelo: Ĉe lernejo mi parolos в целом о многопоточных структурах данных, с изложением основных принципов в начале занятия. Я подразумеваю, что аудитория знает, что такое потоки, и знакома с блокировками. Ориентируясь на эти базовые знания, я буду рассказывать о структурах данных без блокировок. Я дам обзор наиболее важных проблем в этой области, затрону темы вроде управления памятью. Не думаю, что там будет что-либо сложнее очереди MS.

Алексей: Ĉu vi planas instrui pri duoblaj datumstrukturoj ĉe la fino de via klaso en la lernejo?

Mi Michaelaelo: Mi mencios ilin, sed mi ne pasigos multe da tempo pri ili. La raporto Hydra estos dediĉita al ili. Ĝi kovros la projekton kiu poste transformis ĝin en Java, same kiel laborante kun Joe Israelevich por krei duoblan varianton de la LCRQ-vico, kaj kreante preskaŭ universalan dezajnon por duoblaj datenstrukturoj.

Алексей: То есть лекцию в школе можно порекомендовать для новичков, а лекцию о двойных структурах данных на Hydra — для людей, уже имеющих какой-то опыт?

Mi Michaelaelo: Korektu min se mi eraras, sed la publiko ĉe Hydra estos sufiĉe diversa, inkluzive de multaj Java-fakuloj, kaj ĝenerale homoj, kiuj ne specife okupiĝas pri plurfadena programado. 

Vitali: Jes, estas vero.

Алексей: Almenaŭ ni esperas tion.

Mi Michaelaelo: En ĉi tiu kazo, mi alfrontos la saman problemon, kun kiu ni komencis ĉi tiun intervjuon: kiel fari raporton kaj sufiĉe riĉan je teknikaj detaloj kaj alirebla por ĉiuj aŭskultantoj.

Vitali: Ĉu vi donos raporton same kiel vi prelegas? Tio estas, paroli kun la publiko kaj adaptiĝi al la situacio?

Mi Michaelaelo: Mi timas, ke ĝi ne funkcios tiel, ĉar la raporto havos lumbildojn. Diapozitivoj estas gravaj kiam aŭskultantoj komence parolas malsamajn lingvojn. Multaj homoj malfacile komprenas min en la angla, precipe se mi parolas tro rapide. Mi elektis ĉi tiujn temojn ĉar Petro Kuznecov petis min paroli pri senŝlosaj datumstrukturoj ĉe SPTDC School; kaj tiam mi bezonis raporton por Ĝava uzantgrupa konferenco, kaj mi volis elekti ion, kio interesus specife por Ĝavaj programistoj. La plej facila maniero estis paroli pri tiuj aferoj en la Java biblioteko, kiujn mi havis manon en unu maniero aŭ alia. 

Алексей: Ni supozas, ke la publiko ĉe Hydra jam scias ion pri senŝlosa programado kaj eble havas iom da sperto en ĉi tiu areo. Sed ĉi tio estas nur supozo; la situacio fariĝos pli klara ĉe la konferenco mem. Ĉiuokaze, dankon pro via tempo. Mi certas, ke la intervjuo estos tre interesa por niaj legantoj. Multaj dankoj!

Vitali: Dankon. 

Mi Michaelaelo: Mi ĝojos renkonti vin en Peterburgo. 

Алексей: Ankaŭ ni, ni havas belan urbon. Ĉu vi iam estis ĉi tie?

Mi Michaelaelo: Ne, mi tute neniam estis en Rusio. Sed Peterburgo ĉiam estis en la listo de lokoj, kie mi ankoraŭ ne estis, sed kien mi vere volas iri, do mi tre ĝojis pri la invito. 

Алексей: Cetere, ni havos programon de ekskursoj por prelegantoj. Koran dankon pro la intervjuo, kaj havu bonan tagon!

Vi povas daŭrigi vian konversacion kun Michael ĉe la Hydra 2019-konferenco, kiu okazos la 11-12-an de julio 2019 en Sankt-Peterburgo. Li venos kun raporto "Duoblaj datumstrukturoj". Biletoj estas aĉeteblaj en la oficiala retejo.

fonto: www.habr.com

Aldoni komenton