"Cevap vermek, sessiz kalmaktan daha kolaydır" - işlemsel belleğin babası Maurice Herlihy ile harika bir röportaj

Maurice Herlihy - iki kişinin sahibi Dijkstra Ödülleri. Bunlardan ilki çalışmak için "Beklemeden Senkronizasyon" (Brown Üniversitesi) ve ikincisi, daha yakın zamanda, - "İşlemsel Bellek: Kilitsiz Veri Yapıları için Mimari Destek" (Virginia Teknoloji Üniversitesi). Dijkstra Ödülü, önemi ve etkisi en az on yıldır gözle görülür olan çalışmalara veriliyor ve Maurice'in bu alandaki en ünlü uzmanlardan biri olduğu açık. Şu anda Brown Üniversitesi'nde profesör olarak çalışıyor ve bir paragraf uzunluğunda çok sayıda başarısı var. Şu anda klasik dağıtılmış hesaplama bağlamında blockchain'i araştırıyor.

Maurice daha önce SPTCC için Rusya'ya gelmişti (video kaydı) ve St. Petersburg'da JUG.ru Java geliştirici topluluğuyla mükemmel bir toplantı yaptı (video kaydı).

Bu habrapost Maurice Herlihy ile harika bir röportaj. Aşağıdaki konuları tartışmaktadır:

  • Akademi ve endüstri arasındaki etkileşim;
  • Blockchain Araştırma Vakfı;
  • Çığır açan fikirler nereden geliyor? Popülerliğin etkisi;
  • Doktora Barbara Liskov'un danışmanlığında;
  • Dünya çoklu çekirdeği bekliyor;
  • Yeni bir dünya yeni sorunları da beraberinde getiriyor. NVM, NUMA ve mimari hackleme;
  • Derleyiciler ve işlemciler, RISC ve CISC, paylaşılan bellek ve mesaj aktarımı;
  • Kırılgan, çok iş parçacıklı kod yazma sanatı;
  • Öğrencilere karmaşık, çok iş parçacıklı kod yazmayı nasıl öğretebiliriz;
  • “Çok İşlemcili Programlama Sanatı” kitabının yeni baskısı;
  • İşlemsel hafıza nasıl icat edildi;   
  • Dağıtılmış hesaplama alanında araştırma yapmaya neden değer;
  • Algoritmaların gelişimi durduruldu mu ve nasıl ilerlemeli;
  • Brown Üniversitesi'nde çalışın;
  • Üniversitede araştırma ile şirket içinde araştırma arasındaki fark;
  • Hydra ve SPTDC.

Röportaj şu kişiler tarafından gerçekleştirilmektedir:

Vitaly Aksenov — şu anda IST Avusturya'da doktora sonrası araştırmacı ve ITMO Üniversitesi Bilgisayar Teknolojileri Bölümü çalışanı. Rekabetçi veri yapılarının teori ve pratiği alanında araştırmalar yapar. IST'de çalışmaya başlamadan önce, Paris Diderot Üniversitesi ve ITMO Üniversitesi'nden Profesör Peter Kuznetsov'un danışmanlığında doktora derecesini aldı.

Alexey Fedorov - Geliştiriciler için konferanslar düzenleyen bir Rus şirketi olan JUG Ru Group'un yapımcısı. Alexey 50'den fazla konferansın hazırlanmasına katılmıştır ve özgeçmişinde Oracle'da (JCK, Java Platform Group) geliştirme mühendisi pozisyonundan Odnoklassniki'de geliştirme pozisyonuna kadar her şey yer almaktadır.

Vladimir Sitnikov - Netcracker'da mühendis. Telekom operatörleri tarafından ağ ve ağ ekipmanı yönetimi süreçlerini otomatikleştirmek için kullanılan yazılım olan NetCracker OS'nin performansı ve ölçeklenebilirliği üzerinde on yıllık çalışma. Java ve Oracle Database performans sorunlarıyla ilgileniyorum. Resmi PostgreSQL JDBC sürücüsündeki bir düzineden fazla performans iyileştirmesinin yazarı.

Akademi ve endüstri arasındaki etkileşim

Alexey: Maurice, çok uzun zamandır akademik bir ortamda çalışıyorsun ve ilk soru akademik ve endüstriyel alanlar arasındaki etkileşim. Aralarındaki etkileşimin son zamanlarda nasıl değiştiğinden bahsedebilir misiniz? 20-30 yıl önce ne oldu, şimdi ne oluyor? 

Maurice: Ticari şirketlerle her zaman yakın çalışmaya çalıştım çünkü onların ilginç sorunları var. Kural olarak, ne sonuçlarının yayınlanmasıyla ne de sorunlarının dünya toplumuna ayrıntılı açıklamalarıyla pek ilgilenmiyorlar. Sadece bu sorunları çözmekle ilgileniyorlar. Bir süre bu tür şirketlerde çalıştım. Eskiden büyük bir bilgisayar şirketi olan Digital Equipment Corporation'ın bir araştırma laboratuvarında beş yıl boyunca tam zamanlı çalıştım. Haftada bir gün Sun'da, Microsoft'ta, Oracle'da çalıştım ve Facebook'ta da biraz çalıştım. Şimdi ücretli izne çıkacağım (bir Amerikan üniversitesindeki bir profesörün yaklaşık altı yılda bir, bir yıl süreyle böyle bir izin almasına izin verilir) ve şu okulda çalışacağım: AlgorandBurası Boston'da bir kripto para şirketi. Şirketlerle yakın çalışmak her zaman bir zevk olmuştur çünkü bu şekilde yeni ve ilginç şeyler öğrenirsiniz. Hatta herkesin halihazırda üzerinde çalıştığı sorunların çözümlerini adım adım iyileştirmeye çalışmak yerine, seçilen bir konu hakkında makale yayınlayan ilk veya ikinci kişi bile olabilirsiniz.

Alexey: Bunun nasıl olduğunu bize daha ayrıntılı olarak anlatabilir misiniz?

Maurice: Elbette. Biliyorsunuz, ben Digital Equipment Corporation'da çalışırken Elliot Moss'la birlikte işlemsel hafızayı icat etmiştik. Herkesin bilişim teknolojisine ilgi duymaya başladığı çok verimli bir dönemdi. Çok çekirdekli sistemler henüz mevcut olmamasına rağmen paralellik. Sun ve Oracle günlerinde paralel veri yapıları üzerinde çok çalıştım. Facebook'ta, hakkında konuşamayacağım blockchain projesi üzerinde çalıştım ama umarım yakında halka açılır. Gelecek yıl Algorand'da akıllı sözleşmeler üzerine çalışan bir araştırma grubunda çalışacağım.

Alexey: Blockchain son birkaç yılda çok popüler bir konu haline geldi. Bu araştırmanıza yardımcı olacak mı? Belki sektörde faaliyet gösteren firmalardan hibe almayı veya kaynaklara erişim sağlamayı kolaylaştıracak?

Maurice: Ethereum Vakfı'ndan zaten küçük bir bağış aldım. Blockchain'in popülaritesi öğrencilere bu alanda çalışmaya ilham vermede çok faydalıdır. Bu konuyla çok ilgileniyorlar ve katılmaktan heyecan duyuyorlar, ancak bazen dışarıdan heyecan verici görünen araştırmanın gerçekten sıkı bir çalışma gerektirdiğinin farkına varmıyorlar. Ancak öğrencilerin ilgisini çekmek için blockchain etrafındaki tüm bu gizemi kullanacağım için gerçekten heyecanlıyım. 

Ama hepsi bu değil. Birkaç blockchain girişiminin danışma kurulundayım. Bazıları başarılı olabilir, bazıları olmayabilir ama onların fikirlerini görmek, incelemek ve insanlara tavsiyelerde bulunmak her zaman çok ilginçtir. En heyecan verici şey insanları bir şey yapmamaları konusunda uyarmanızdır. Pek çok şey ilk başta iyi bir fikir gibi görünüyor, ama gerçekten öyle mi?

Blockchain Araştırma Vakfı

Vitaly: Bazı insanlar geleceğin blockchain ve algoritmalarında olduğunu düşünüyor. Ve diğerleri bunun sadece başka bir balon olduğunu söylüyor. Bu konuyla ilgili görüşlerinizi paylaşabilir misiniz?

Maurice: Blockchain dünyasında olup bitenlerin çoğu yanlış, bazıları sadece dolandırıcılık, çoğu da abartılıyor. Ancak bu çalışmaların sağlam bilimsel temellerinin olduğunu düşünüyorum. Blockchain dünyasının ideolojik farklılıklarla dolu olması heyecanın ve bağlılığın düzeyini gösteriyor. Öte yandan bu durum bilimsel araştırmalar açısından pek de yararlı değildir. Şimdi, belirli bir algoritmanın eksikliklerinden bahseden bir makale yayınlarsanız ortaya çıkan tepki her zaman tam anlamıyla bilimsel olmaz. Çoğu zaman insanlar duygularını dışarı atarlar. Bu alandaki bu heyecanın bazılarına cazip gelebileceğini düşünüyorum ama sonuçta ele alınması gereken gerçek bilimsel ve mühendislik konuları var. Burada çok fazla Bilgisayar Bilimi var.

Vitaly: Yani blockchain araştırmasının temelini atmaya çalışıyorsun, değil mi?

Maurice: Sağlam, bilimsel ve matematiksel açıdan sağlam bir disiplinin temelini atmaya çalışıyorum. Sorunun bir kısmı da, bazen diğer insanların aşırı sert tutumlarından bazılarıyla çelişmek ve onları görmezden gelmek zorunda kalmanızdır. Bazen insanlar neden sadece teröristlerin ve uyuşturucu kaçakçılarının ilgilendiği bir bölgede çalıştığımı soruyorlar. Böyle bir tepki, sizin sözlerinizi körü körüne tekrarlayan takipçilerin davranışları kadar anlamsızdır. Ben gerçeğin ortada bir yerde olduğunu düşünüyorum. Blockchain'in toplum ve küresel ekonomi üzerinde derin bir etkisi olacak. Ancak modern teknoloji sayesinde bu muhtemelen gerçekleşmeyecek. Modern teknolojiler gelişecek ve gelecekte blockchain olarak adlandırılacak olan şey çok önemli hale gelecektir. Modern blockchainlere bile benzemeyebilir, bu ucu açık bir soru.

İnsanlar yeni teknolojiler icat ederse buna blockchain adını vermeye devam edecekler. Yani tıpkı bugünkü Fortran'ın 1960'lardaki Fortran diliyle hiçbir alakasının olmaması ama herkesin ona Fortran demeye devam etmesi gibi. UNIX'te de aynı şey geçerli. “Blockchain” denilen şey hâlâ devrimini yapacak. Ancak bu yeni blockchain'in bugün herkesin kullanmaktan hoşlandığı şeye benzeyeceğinden şüpheliyim.

Çığır açan fikirler nereden geliyor? Popülerliğin etkisi

Alexey: Blockchain'in popülaritesi bilimsel açıdan yeni sonuçlara yol açtı mı? Daha fazla etkileşim, daha fazla öğrenci, bölgede daha fazla şirket. Popülerlikteki bu artışın halihazırda herhangi bir sonucu var mı?

Maurice: Birisi bana kısa süre önce oldukça fazla para toplayan bir şirketin resmi broşürünü verdiğinde bununla ilgilenmeye başladım. Hakkında yazdı Bizans generallerinin görevifazlasıyla aşina olduğum bir şey. Broşürde yazılanların teknik olarak açıkça yanlış olduğu açıktı. Bütün bunları yazanlar sorunun ardındaki modeli gerçekten anlamadılar... ama yine de bu şirket çok para topladı. Daha sonra şirket sessizce bu broşürü çok daha doğru bir versiyonla değiştirdi - ve bu şirketin adının ne olduğunu söylemeyeceğim. Hala ortalıktalar ve çok iyi durumdalar. Bu olay beni öncelikle blockchain'in yalnızca bir dağıtılmış bilgi işlem biçimi olduğuna ikna etti. İkincisi, giriş eşiği (en azından dört yıl önce) oldukça düşüktü. Bu alanda çalışan insanlar çok enerjik ve zekiydi ancak bilimsel makale okumuyorlardı. Bilinen şeyleri yeniden icat etmeye çalıştılar ama yanlış yaptılar. Bugün dram azaldı.

Alexey: Bu çok ilginç çünkü birkaç yıl önce farklı bir eğilimimiz vardı. Bu, tarayıcı tabanlı ön uç geliştiricilerin arka uçta zaten popüler olan tüm teknolojileri yeniden icat ettiği ön uç geliştirmeye benziyor: sistemler oluşturma, sürekli entegrasyon, bunun gibi şeyler. 

Maurice: Katılıyorum. Ancak bu şaşırtıcı değil çünkü gerçekten çığır açan fikirler her zaman yerleşik topluluğun dışından gelir. Yerleşik araştırmacıların, özellikle de yerleşik akademisyenlerin, gerçekten çığır açıcı bir şey yapması pek olası değildir. Bir sonraki konferans için geçmiş çalışmalarınızın sonuçlarını nasıl biraz iyileştirdiğinizi anlatan bir makale yazmak kolaydır. Bir konferansa gidin, arkadaşlarınızla bir araya gelin, aynı şeyleri konuşun. Ve çığır açıcı fikirlerle ortaya çıkan insanlar neredeyse her zaman dışarıdan gelir. Kuralları bilmiyorlar, dili bilmiyorlar ama yine de... Eğer yerleşik bir topluluğun içindeyseniz yeni şeylere, genel tabloya uymayan şeylere dikkat etmenizi tavsiye ederim. Bir bakıma dışsal, daha akıcı gelişmeleri halihazırda anladığımız yöntemlerle birleştirme girişiminde bulunulabilir. İlk adım olarak bilimsel bir temel oluşturmaya çalışın ve ardından bunu yeni çığır açan fikirlere uygulanabilecek şekilde değiştirin. Blockchain'in taze ve yıkıcı bir fikir olması açısından harika olduğunu düşünüyorum.

Alexey: Bunun neden olduğunu düşünüyorsun? "Dışarıdaki" insanların topluluğun doğasında olan herhangi bir özel engeli olmadığı için mi?

Maurice: Burada bir düzen var. Genel olarak resim ve sanatta empresyonistlerin tarihini okursanız, ünlü sanatçılar bir zamanlar empresyonizmi reddetmişlerdir. Bunun biraz çocukça olduğunu söylediler. Bir nesil sonra, daha önce reddedilen bu sanat formu standart haline geldi. Alanımda gördüğüm şey: Blockchain'in mucitleri güçle, yayınların ve alıntı indekslerinin arttırılmasıyla ilgilenmiyorlardı, sadece iyi bir şeyler yapmak istiyorlardı. Ve böylece oturup bunu yapmaya başladılar. Belli bir teknik derinliğe sahip değillerdi ama bu düzeltilebilir. Yeni yaratıcı fikirler bulmak, yeterince olgunlaşmamış fikirleri düzeltmek ve güçlendirmekten çok daha zordur. Bu mucitler sayesinde artık yapacak bir şeyim var!

Alexey: Bu, yeni başlayanlar ve eski projeler arasındaki farka benzer. Düşünmeyle ilgili birçok sınırlamayı, engelleri, özel gereksinimleri vb. miras alırız.

Maurice: Dağıtılmış bilgi işlem buna iyi bir benzetmedir. Blockchain'i bir startup gibi, dağıtılmış bilişimi ise büyük ve köklü bir şirket gibi düşünün. Dağıtılmış bilgi işlem, satın alınma ve blockchain ile birleştirilme sürecindedir.

Doktora Barbara Liskov'un danışmanlığında

Vitaly: Hala birçok sorumuz var! Geçmişinizi araştırıyorduk ve doktoranızla ilgili ilginç bir gerçeğe rastladık. Evet, bu uzun zaman önceydi ama önemli bir konu gibi görünüyor. Doktora derecenizi kendi rehberliğinizde aldınız Barbara Liskov! Barbara programlama dili camiasında çok iyi tanınıyor ve genel olarak da çok iyi bilinen bir kişi. Araştırmanızın programlama dilleri alanında olması mantıklı. Paralel hesaplamaya nasıl geçtiniz? Neden konuyu değiştirmeye karar verdiniz?

Maurice: O zamanlar Barbara ve grubu, çok yeni bir fikir olan dağıtılmış hesaplamaya bakıyordu. Dağıtılmış hesaplamanın saçmalık olduğunu ve bilgisayarların birbirleriyle iletişim kurmasının anlamsız olduğunu söyleyenler de vardı. Dağıtılmış bilişimi merkezi bilişimden ayıran konulardan biri de hata toleransıdır. Uzun araştırmalardan sonra, uzaktan aramanın başarılı olacağından asla emin olamayacağınız için, dağıtılmış bir bilgi işlem programlama dilinin atomik işlemlere benzer bir şeye sahip olması gerektiğine karar verdik. İşlemleriniz olduğunda eşzamanlılık yönetimi sorunu ortaya çıkar. Daha sonra oldukça paralel işlemsel veri yapılarının elde edilmesi konusunda birçok çalışma yapıldı. Daha sonra mezun olunca gittim. Carnegie Mellon'un ve üzerinde çalışılacak bir konu aramaya başladım. Bilgisayarların bireysel bilgisayarlardan bilgisayar ağlarına taşındığı aklıma geldi. Çoklu işlemciler ilerlemenin doğal bir devamı olacaktır; “çok çekirdekli” kelimesi henüz mevcut değildi. Düşündüm: Çok çekirdekli bir sistem için atomik işlemlerin eşdeğeri nedir? Kesinlikle normal işlemler değil çünkü çok büyük ve ağırlar. Ve bu fikir aklıma böyle geldi doğrusallaştırılabilirlik ve beklemesiz senkronizasyonun tamamını bu şekilde buldum. Bu, paylaşılan belleğe sahip çok işlemcili bir sistem için atomik işlemlerin analogunun ne olduğu sorusuna cevap verme girişimiydi. İlk bakışta bu çalışma bambaşka görünebilir ama aslında aynı temanın devamı niteliğindedir.

Dünya çoklu çekirdeği bekliyor

Vitaly: O zamanlar çok az sayıda çok çekirdekli bilgisayarın olduğunu söylemiştin, değil mi?

Maurice: Orada değillerdi. Temel olarak aynı veri yoluna bağlı olan, simetrik çoklu işlemciler olarak adlandırılan birkaç işlemci vardı. Bu pek işe yaramadı çünkü ne zaman yeni bir şirket benzer bir şey yaratsa, Intel çoklu işlemcilerden daha üstün olan tek bir işlemci piyasaya sürüyordu.

Alexey: Bu, o eski zamanlarda bunun daha çok teorik bir çalışma olduğu anlamına gelmiyor mu?

Maurice: Bu teorik bir çalışma değildi, spekülatif bir çalışmaydı. Bütün bunlar çok sayıda teoremle çalışmak değil, o dönemde var olmayan bir mimariye dair hipotezler ortaya koymaktı. Araştırma bunun içindir! Hiçbir şirket böyle bir şey yapmazdı; bunların hepsi uzak gelecekten gelen bir şeydi. Aslında, gerçek çok çekirdekli işlemcilerin ortaya çıktığı 2004 yılına kadar durum böyleydi. İşlemciler aşırı ısındığı için işlemciyi daha da küçültebilirsiniz ama daha hızlı hale getiremezsiniz. Bu nedenle çok çekirdekli mimarilere geçiş yaşandı. Ve bu, geçmişte geliştirdiğimiz tüm kavramların aniden kullanılmaya başlandığı anlamına geliyordu.

Alexey: Neden çok çekirdekli işlemcilerin yalnızca XNUMX'li yıllarda ortaya çıktığını düşünüyorsunuz? Peki neden bu kadar geç?

Maurice: Bunun nedeni donanım sınırlamalarıdır. Intel, AMD ve diğer şirketler işlemci hızını artırma konusunda oldukça iyiler. Bir noktada işlemciler artık saat hızını artıramayacak kadar küçüldüğünde, işlemciler yanmaya başlayacaktı. Onları daha küçük hale getirebilirsiniz ancak daha hızlı yapamazsınız. Ellerinde ne var ki, çok küçük bir işlemci yerine, daha önce yalnızca birinin sığabileceği kasanın aynı hacmine sekiz, on altı veya otuz iki işlemci sığdırabiliyorlar. Artık önbellekleri paylaştıkları için aralarında çok iş parçacıklı ve hızlı bir iletişim var. Ancak onları daha hızlı koşmaya zorlayamazsınız; çok özel bir hız sınırı vardır. Yavaş yavaş gelişmeye devam ediyorlar ama artık o kadar da değil. Fizik yasaları iyileştirmelerin önünde duruyordu.

Yeni bir dünya yeni sorunları da beraberinde getiriyor. NUMA, NVM ve mimari hackleme

Alexey: Kulağa çok makul geliyor. Yeni çok çekirdekli işlemcilerle birlikte yeni sorunlar da ortaya çıktı. Siz ve meslektaşlarınız bu sorunları bekliyor muydunuz? Belki onları önceden incelediniz? Teorik çalışmalarda bu tür şeyleri tahmin etmek çoğu zaman çok kolay olmuyor. Sorunlar ortaya çıktığında sizin ve meslektaşlarınızın beklentilerini nasıl karşıladılar? Yoksa tamamen yeni miydiler ve siz ve meslektaşlarınız sorunları ortaya çıktıkça çözmek için çok zaman harcamak zorunda mıydınız?

Vitaly: Alexey'in sorusuna şunu ekleyeceğim: Teoriyi incelerken işlemci mimarisini doğru tahmin ettiniz mi?

Maurice: %100 değil. Ancak meslektaşlarım ve ben, ortak belleğe sahip çoklu çekirdekleri tahmin ederek iyi bir iş çıkardığımızı düşünüyorum. Kilitler olmadan çalışan paralel veri yapılarının geliştirilmesindeki zorlukları doğru tahmin ettiğimizi düşünüyorum. Bu tür veri yapıları çoğu uygulama için önemli olmuştur, ancak hepsi olmasa da çoğu zaman gerçekten ihtiyacınız olan şey kilitlenmeyen bir veri yapısıdır. Bunları icat ettiğimizde birçok kişi bunun saçma olduğunu, kilitlerle her şeyin yolunda gittiğini savundu. Birçok programlama problemine ve veri yapısı problemine hazır çözümlerin olacağını çok iyi tahmin etmiştik. gibi daha karmaşık sorunlar da vardı. numa – belleğe eşit olmayan erişim. Aslında çok çekirdekli işlemcilerin icadına kadar bunlar dikkate bile alınmamıştı çünkü çok spesifiktiler. Araştırma topluluğu genel olarak öngörülebilir sorular üzerinde çalışıyordu. Belirli mimarilerle ilgili bazı donanım sorunlarının, aslında bu mimarilerin görünümünün, bir kenara bırakılması gerekiyordu. Örneğin, o zamanlar GPU'lar mevcut olmadığından hiç kimse GPU'ya özgü veri yapıları üzerinde çalışmadı. Üzerinde pek çok çalışma yapılmış olmasına rağmen simd, bu algoritmalar, uygun donanım mevcut olur olmaz kullanıma hazırdı. Ancak her şeyi öngörmek mümkün değil.

Alexey: Doğru anlarsam NUMA, maliyet, performans ve diğer bazı şeyler arasında bir tür uzlaşmadır. NUMA'nın neden bu kadar geç çıktığı hakkında bir fikrin var mı?

Maurice: NUMA'nın bellek üretmek için kullanılan donanımdaki sorunlardan dolayı var olduğunu düşünüyorum: bileşenler ne kadar uzaktaysa onlara erişim de o kadar yavaş oluyor. Öte yandan bu soyutlamanın ikinci değeri hafıza tekdüzeliğidir. Dolayısıyla paralel hesaplamanın özelliklerinden biri de tüm soyutlamaların biraz bozuk olmasıdır. Erişim tamamen tekdüze olsaydı, tüm bellek eşit uzaklıkta olurdu, ancak bu ekonomik ve hatta belki de fiziksel olarak imkansızdır. Bu nedenle bu çatışma ortaya çıkıyor. Programınızı sanki bellek tekdüzeymiş gibi yazarsanız, büyük olasılıkla doğru olacaktır. Yanlış cevaplar vermeyecek olması açısından. Ancak performansı gökyüzündeki yıldızları da yakalayamayacak. Aynı şekilde yazarsanız döner kilitler Önbellek hiyerarşisini anlamadan engellemenin kendisi doğru olacaktır, ancak performansı unutabilirsiniz. Bir bakıma, çok basit bir soyutlamanın üzerinde yaşayan programlar yazmalısınız, ancak size bu soyutlamayı veren insanları zekanızla alt etmelisiniz: soyutlamanın altında bir tür hafıza hiyerarşisi olduğunu bilmelisiniz. sizinle bu anı arasında bir otobüs vb. Dolayısıyla bireysel olarak yararlı soyutlamalar arasında bazı çelişkiler vardır ve bu da bizi çok somut ve pragmatik sorunlara götürür.

Vitaly: Peki ya gelecek? Bundan sonra işlemcilerin nasıl gelişeceğini tahmin edebiliyor musunuz? Cevaplardan birinin işlemsel hafıza olduğuna dair bir fikir var. Muhtemelen stokta başka bir şey vardır.

Maurice: Önümüzde birkaç büyük zorluk var. Birincisi, tutarlı hafızanın harika bir soyutlama olduğu, ancak özel durumlarda bozulmaya başladığıdır. Yani örneğin NUMA, tek tip hafızanın var olduğunu iddia etmeye devam edebileceğiniz bir şeyin canlı bir örneğidir. Aslında hayır, üretkenlik sizi ağlatır. Bir noktada mimarlar tek bellekli mimari fikrinden vazgeçmek zorunda kalacak; bunu sonsuza kadar sürdüremezsiniz. Kullanımı kolay ve temeldeki donanımı verimli hale getirecek kadar güçlü yeni programlama modellerine ihtiyaç duyulacak. Bu çok zor bir uzlaşmadır, çünkü programcılara donanımda gerçekte kullanılan mimariyi gösterirseniz delireceklerdir. Çok karmaşık ve taşınabilir değil. Çok basit bir arayüz sunarsanız performans düşük olacaktır. Bu nedenle, gerçekten büyük çok çekirdekli işlemcilere uygulanabilecek kullanışlı programlama modelleri sağlamak için pek çok zor ödünleşimin yapılması gerekecektir. Uzman dışında kimsenin 2000 çekirdekli bir bilgisayarda programlama yapabilecek kapasitede olduğundan emin değilim. Ve çok uzmanlaşmış veya bilimsel hesaplama veya kriptografi veya buna benzer bir şey yapmıyorsanız, bunun nasıl doğru şekilde yapılacağı hala tam olarak belli değil. 

Bir diğer benzer alan ise özel mimarilerdir. Grafik hızlandırıcılar uzun zamandır ortalıkta dolaşıyor, ancak özel bir bilgi işlem türünü nasıl alıp özel bir çip üzerinde çalıştırabileceğinizin klasik bir örneği haline geldiler. Bu da kendi zorluklarını ekliyor: Böyle bir cihazla nasıl iletişim kuracaksınız, onu nasıl programlayacaksınız. Son zamanlarda bölgedeki sorunlar üzerinde çalışıyorum yakın bellek hesaplama. Küçük bir işlemci alırsınız ve onu büyük bir bellek yığınına yapıştırırsınız, böylece bellek L1 önbellek hızında çalışır ve ardından aşağıdaki gibi bir cihazla iletişim kurar: TPU – işlemci, bellek çekirdeğinize yeni görevler yüklemekle meşgul. Bu tür şeyler için veri yapılarının ve iletişim protokollerinin tasarlanması bir başka ilginç örnektir. Dolayısıyla özel işlemciler ve donanımlarda bir süre daha iyileştirmeler görülmeye devam edecek.

Alexey: Peki ya kalıcı hafıza (kalıcı bellek)?

Maurice: Ah, bu da harika bir örnek! NVM, veri yapıları gibi şeylere bakış açımızı büyük ölçüde değiştirecek. Kalıcı bellek bir bakıma işleri gerçekten hızlandırmayı vaat ediyor. Ancak çoğu işlemci, önbellek ve yazmaç hala geçici olduğundan bu hayatı kolaylaştırmayacak. Bir kaza sonrasında yola çıktığınızda, durumunuz ve hafızanızın durumu, kaza öncesi ile tam olarak aynı olmayacaktır. NVM üzerinde çalışan insanlara çok minnettarım; araştırmacıların doğruluk koşullarını bulmaya çalışırken uzun süre yapacakları çok şey olacak. Hesaplamalar, önbellek ve kayıtların içeriğinin kaybolduğu ancak ana belleğin bozulmadan kaldığı bir çökmeden sağ çıkabiliyorsa doğrudur.

Derleyiciler ve işlemciler, RISC ve CISC, paylaşılan bellek ve mesaj aktarımı

Vladimir: Talimat kümesi açısından "derleyiciler ve işlemciler" ikilemi hakkında ne düşünüyorsunuz? Bilmeyenler için açıklayayım: Çarpık belleğe veya benzeri bir şeye gidersek, çok basit bir komut seti kullanabilir ve derleyiciden yeni avantajlardan yararlanabilecek karmaşık kod üretmesini isteyebiliriz. Veya diğer tarafa gidebiliriz: karmaşık talimatları uygulayabilir ve işlemciden talimatları yeniden sıralamasını ve onlarla başka manipülasyonlar yapmasını isteyebiliriz. Bu konu hakkında ne düşünüyorsun?

Maurice: Bu soruya gerçekten bir cevabım yok. Bu tartışma kırk yıldır sürüyor. Arasında bir zaman vardı kısaltılmış bir dizi komut ve karmaşık iç savaşlar bir dizi komutanlık tarafından yürütülüyordu. Bir süreliğine RISC çalışanları kazandı, ancak daha sonra Intel motorlarını yeniden inşa etti, böylece dahili olarak azaltılmış bir talimat seti kullanıldı ve tüm set dışarıya ihraç edildi. Bu muhtemelen her yeni neslin kendi uzlaşmasını bulması ve kendi kararlarını vermesi gereken bir konudur. Bunlardan hangisinin daha iyi olacağını tahmin etmek çok zor. Yani yaptığım herhangi bir tahmin belirli bir süre doğru olacak, sonra bir süreliğine yanlış ve sonra tekrar doğru olacaktır.

Alexey: Bazı fikirlerin birkaç on yıl boyunca kazanıp sonraki yıllarda kaybetmesi sektörde ne kadar yaygın? Bu tür periyodik değişikliklerin başka örnekleri var mı?

Maurice: Dağıtılmış hesaplama konusuna inanan insanlar var paylaşılan hafıza ve buna inanan insanlar mesajlaşma. Başlangıçta, dağıtılmış hesaplamada paralel hesaplama, mesajın iletilmesi anlamına gelir. Sonra birisi, paylaşılan hafızayla programlamanın çok daha kolay olduğunu keşfetti. Karşı taraf, paylaşılan hafızanın çok karmaşık olduğunu, çünkü kilitler ve benzeri şeyler gerektirdiğini, bu nedenle mesaj aktarımından başka hiçbir şeyin var olmadığı dillere geçmeye değer olduğunu söyledi. Birisi bundan çıkan sonuca baktı ve şöyle dedi: "Vay canına, bu mesajlaşma uygulaması paylaşılan belleğe çok benziyor, çünkü bu küçük modüllerden çok sayıda yaratıyorsunuz, birbirlerine mesaj gönderiyorlar ve hepsi kilitleme“Daha iyi bir paylaşılan hafıza veritabanı oluşturalım!” Bütün bunlar defalarca tekrarlanıyor ve taraflardan birinin kesinlikle haklı olduğunu söylemek mümkün değil. Taraflardan biri her zaman üstün gelecektir çünkü taraflardan biri neredeyse kazanır kazanmaz, insanlar tekrar tekrar diğerini iyileştirmenin yollarını bulurlar.

Kırılgan, Çok İş parçacıklı Kod Yazma Sanatı

Alexey: Bu çok ilginç. Örneğin, hangi programlama dili olursa olsun kod yazarken genellikle okunabilen ve yazılabilen hücreler gibi soyutlamalar oluşturmamız gerekir. Ancak aslında bazı fiziksel düzeyde bu, farklı bilgisayarlar ve diğer cihazlar arasında donanım veri yolu üzerinden mesaj göndermeye benzeyebilir. İşin her iki soyutlama düzeyinde de aynı anda gerçekleştiği ortaya çıktı.

Maurice: Paylaşılan hafızanın mesaj aktarımı (otobüsler, önbellekler vb.) üzerine kurulduğu kesinlikle doğru. Ancak mesaj aktarımını kullanarak program yazmak zordur, bu nedenle donanım, bir tür tekdüze belleğe sahipmişsiniz gibi davranarak kasıtlı olarak yalan söyler. Bu, performans bozulmaya başlamadan önce basit, doğru programlar yazmanızı kolaylaştıracaktır. O zaman şunu diyeceksiniz: Görünüşe göre önbellekle arkadaş olmanın zamanı geldi. Ve sonra önbelleğin konumu konusunda endişelenmeye başlarsınız ve olay oradan devam eder. Bir bakıma soyutlamayı kırıyorsunuz: Bunun sadece düz, tek tip bellek olmadığını biliyorsunuz ve bu bilgiyi önbellek dostu programlar yazmak için kullanacaksınız. Gerçek problemlerde yapmanız gereken şey budur. Size verilen tatlı, basit, hoş soyutlama ile temeldeki donanımın korkunç derecede karmaşık uygulaması arasındaki bu çatışma, herkesin kendi uzlaşmasını yapacağı yerdir. Çoklu işlemciler ve senkronizasyon hakkında bir kitabım var ve bir ara veri yapıları üzerine bir bölüm yazacaktım. java.util.concurrent. Onlara bakarsanız, şöyle şeyler eksikleri olan listeler Bunlar muhteşem sanat eserleri. (Editörün notu: Java diline aşina olanlar en azından uygulamaya bir göz atmalı EşzamanlıAtlamaListesiHaritası, linklerdeki linklere bakabilirsin API и kaynak kodu). Ancak benim bakış açıma göre, bunları öğrencilere göstermek sorumsuzluk olur çünkü böyle bir veri yapısı, sirkteki bir adamın ayı çukurunun üzerinde ip üzerinde koşmasına benzer. En ufak bir ayrıntıyı bile değiştirirseniz tüm yapı çöker. Bu kod mükemmel yazıldığı için çok hızlı ve zariftir ancak en ufak bir değişiklik tamamen başarısızlığa yol açacaktır. Bu kodu öğrencilere örnek olarak versem hemen şöyle derler: Ben de bunu yapabilirim! Ve sonra bir uçak düşecek ya da bir nükleer reaktör patlayacak ve ben de onlara yanlış zamanda çok fazla bilgi verdiğim için suçlu olacağım.

Alexey: Biraz daha gençken birçok kez Doug Lee'nin kaynak kodunu incelemeye çalıştım, örneğin, java.util.concurrent, açık kaynak olduğundan, orada olup bitenleri bulmak ve anlamaya çalışmak çok kolaydır. Pek iyi sonuçlanmadı: Çoğu zaman, herkes farklı bir şekilde yaparken Doug'ın bir şeyi neden bu şekilde yapmaya karar verdiği tamamen belirsizdir. Bunları öğrencilerinize nasıl açıklıyorsunuz? Örneğin, zorlu bir algoritmanın belirli ayrıntılarını tanımlamanın belirli bir doğru yolu var mı? Bunu nasıl yapıyorsun?

Maurice: Çizim öğretmenlerinin ilk hatırladıkları bir klişe vardır: Picasso gibi çizmek istiyorsanız, önce basit, gerçekçi resimlerin nasıl çizileceğini öğrenmeniz gerekir ve ancak kuralları bildiğiniz zaman onları çiğnemeye başlayabilirsiniz. Eğer hemen kuralları çiğneyerek başlarsanız, ortalığı karıştırırsınız. Öncelikle öğrencilere performans kaygısı taşımadan basit, doğru kod yazmayı öğretiyorum. Demek istediğim, burada gizlenen karmaşık zamanlama sorunları var, bu yüzden önbellekler hakkında endişelenmeyin, bellek modelleri hakkında endişelenmeyin, sadece her şeyin doğru çalıştığından emin olun. Bu zaten yeterince zor: Modern programlama, özellikle yeni öğrenciler için kendi içinde kolay değil. Ve doğru programların nasıl yazılacağına dair bir sezgiye sahip olduklarında şunu söylüyorum: şu iki spinlock uygulamasına bakın: biri çok yavaş, ikincisi de çok değil ama daha iyi. Ancak matematiksel olarak iki algoritma aynıdır. Aslında bunlardan biri önbellek konumunu kullanıyor. Bunlardan biri yerel olarak önbelleğe alınmış veriler üzerinde çalışır, diğeri ise veri yolu üzerinde sürekli olarak işlemler gerçekleştirir. Ne olduğunu anlamazsanız, soyutlamayı nasıl kıracağınızı ve altta yatan yapıya nasıl bakacağınızı bilmiyorsanız, etkili kod yazamazsınız. Ancak bunu hemen yapmaya başlayamazsınız. Bunu hemen yapmaya başlayıp kendi dehasına inanan insanlar var, genellikle prensipleri anlamadıkları için sonu kötü oluyor. Kimse Picasso gibi resim yapamaz ya da Doug Lee gibi üniversiteden yeni mezun olmuş, ilk haftasında programlar yazamaz. Bu bilgi seviyesine ulaşmak yıllar alır.

Alexey: Sorunu iki bölüme ayırdığınız ortaya çıktı: birincisi doğruluk, ikincisi performans mı?

Maurice: Kesinlikle. Ve tam olarak bu sırayla. Sorunun bir kısmı, yeni öğrencilerin doğruluğa ulaşmanın zor olduğunu anlamamalarıdır. İlk bakışta şunu söylüyorlar: Bu kesinlikle doğru, geriye sadece hızlandırmak kalıyor. Bu yüzden bazen onlara başlangıçta yanlış olan bir algoritmayı sanki doğruymuş gibi anlatıyorum.

Öğrencilere karmaşık çok iş parçacıklı kod yazmayı nasıl öğretirim?

Alexey: Sadece yakalamayı hissedip hissedemeyeceklerini görmek için mi?

Maurice: Bazen yanlış algoritmalar önereceğim konusunda her zaman önceden uyarıyorum. İnsanları aldatmamalısınız. Bilgiye ihtiyatla yaklaşmalarını öneririm. Bir şey söylersem ve "bak, bu kesinlikle doğru" dersem, bu bir yerlerde seni kandırmaya çalıştıklarının ve soru sormaya başlaman gerektiğinin bir işaretidir. Daha sonra öğrencileri soru sormaya teşvik etmeye çalışıyorum ve ardından şunu öneriyorum: "Her şeyi olduğu gibi bırakırsak ne olur?" Ve hatayı hemen görüyorlar. Ancak öğrencileri doğruluk konusunda endişelenmeleri gerektiğine ikna etmek ilk bakışta göründüğünden çok daha zordur. Bu öğrencilerin çoğu lisede programlama deneyimiyle geliyor, bazıları iş bulmuş ve orada programlama yapmış ve hepsi özgüvenle dolup taşıyor. Bu orduya benzer bir şeydir: Onları ortaya çıkan sorunları çözmeye sabırla yaklaşmaya ikna etmek için önce ruh hallerini değiştirmeniz gerekir. Ya da belki Budist rahipler gibidir: Önce doğruluk hakkında akıl yürütmeyi öğrenirler ve doğruluk hakkında akıl yürütmenin yollarını anladıklarında, bir sonraki seviyeye geçmelerine ve performans konusunda endişelenmeye başlamalarına izin verilir.

Alexey: Yani bazen öğrencilere işe yaramayan örnekler gösterirsiniz, bu sayede sorunun özünü anlayıp anlamadıklarını, yanlış kodu ve yanlış sonucu bulup bulamayacaklarını gösteren geri bildirim alırsınız. Peki öğrenciler sizi genellikle mutlu mu yoksa üzüyor mu?

Maurice: Öğrenciler neredeyse her zaman hatayı eninde sonunda bulurlar. Çok yavaş ararlarsa yönlendirici sorular sorarım ve burada şunu anlamak önemlidir: Onları asla aldatmazsanız, sözlerinizi akılsızca nihai gerçek olarak algılamaya başlayacaklardır. Daha sonra ders sırasında dizüstü bilgisayarlarında Facebook okurken sıkılacaklar ve uykuya dalmaya başlayacaklar. Ancak onlara kandırılacaklarını ve bir hileyi hissetmezlerse aptal gibi görüneceklerini önceden söylediğinizde çok daha tetikte olurlar. Bu farklı şekillerde iyidir. Öğrencilerin sadece konuya ilişkin anlayışlarını sorgulamalarını değil, aynı zamanda öğretmenin otoritesini de sorgulamalarını isterim. Buradaki fikir, bir öğrencinin istediği zaman elini kaldırıp şunu söyleyebilmesidir: Sanırım az önce söylediğiniz şey yanlış. Önemli bir öğrenme aracıdır. Hiçbir öğrencinin oturup sessizce kendi kendine düşünmesini istemiyorum: tüm bunlar tamamen saçmalık gibi görünüyor, ancak elinizi kaldırmak çok korkutucu ve zaten o bir profesör, yani söylediği her şey gerçek. Bu nedenle, eğer onlara anlatılan her şeyin mutlaka doğru olmadığı konusunda önceden uyarılırlarsa, materyale daha fazla dikkat etme yönünde teşvike sahip olurlar. Elinizi kaldırıp soru sormanızın sorun olmayacağını açıkça belirtiyorum. Sorunuz aptalca veya naif gelebilir, ancak genellikle en iyi sorular bu şekilde ortaya çıkar.

Alexey: Çok ilginç. Genellikle insanların bir profesöre soru sormalarına izin vermeyen bir tür psikolojik engelleri vardır. Özellikle odada çok fazla insan varsa ve herkes sizin aptal sorunuzu tartışmanın tüm bu insanların zamanını alacağından korkuyorsa. Bununla başa çıkmak için herhangi bir hile var mı?

Maurice: Sık sık durup klasik sorular soruyorum. Bir ifadenin doğru olup olmayacağı veya tartışılan sorunu nasıl çözecekleri. Bu, özellikle de insanların en küçük bir şeyi bile söylemekten utandıkları bir dersin başında önemli bir eylemdir. Öğrencilere bir soru soruyorsunuz ve başka bir şey söylemiyorsunuz. Bir sessizlik oluyor, herkes biraz geriliyor, gerginlik artıyor, sonra birden biri dayanamayıp yıkılıyor ve cevabı söylüyor. Durumu böyle tersine çevirirsiniz: Susmayı sürdürmek, cevap vermekten daha zor ve sakıncalı hale gelir! Bu standart bir pedagojik hiledir. Dünyadaki her öğretmen bunun nasıl yapılacağını bilmeli.

Alexey: Artık bu röportaj için mükemmel bir başlığımız var: "Cevap vermek sessiz kalmaktan daha kolaydır."

Vitaly: Tekrar sorayım. Topolojik kanıtlar üzerinde çalışıyorsunuz. Buna nasıl dahil oldunuz, çünkü dağıtılmış hesaplama ve topoloji tamamen farklı şeyler!

Maurice: Burada gizli bir bağlantı var. Matematik okuyan bir öğrenciyken saf matematik okudum. Eğitimim bitene kadar bilgisayarlara karşı gerçek bir ilgim yoktu ve kendimi acil bir iş arama ihtiyacıyla karşı karşıya buldum. Öğrenciyken cebirsel topoloji çalıştım. Yıllar sonra bir problem üzerinde çalışırken "k-Set Anlaşma Sorunu"Sorunu modellemek için grafikler kullandım ve o zamanlar göründüğü gibi bir çözüm bulmuştum. Sadece oturup sayımın etrafında dolaşmak zorundaydınız. Bu grafikte uygun bir cevap bulmaya çalışın. Ancak algoritmam işe yaramadı: Sonsuza kadar daireler çizerek koşacağı ortaya çıktı. Ne yazık ki, tüm bunlar, tüm bilgisayar bilimcilerinin bildiği grafik teorisinin resmi diliyle açıklanamadı. Ve sonra yıllar önce topoloji derslerinde bu kavramı kullandığımızı hatırladım. "basit kompleks"grafiklerin daha yüksek boyutlara genelleştirilmesidir. Sonra kendime şunu sordum: Sorunu basit kompleksler cinsinden yeniden formüle edersek ne olur? Bu anahtar an oldu. Daha güçlü bir biçimcilik kullanıldığında sorun birdenbire çok daha basit hale gelir. İnsanlar buna karşı uzun süre grafikler kullanarak mücadele etti ama hiçbir şey yapamadılar. Ve şimdi bile yapamıyorlar - doğru cevabın bir algoritma değil, sorunu çözmenin imkansızlığının bir kanıtı olduğu ortaya çıktı. Yani böyle bir algoritma mevcut değil. Ancak imkansızlığın her kanıtı ya basit komplekslere ya da insanların basit kompleksleri dikkate almıyormuş gibi davrandıkları şeylere dayanıyor. Bir şeye yeni bir isim verdiğiniz için o şey özünü kaybetmez.

Vitaly: Görünüşe göre şanslıydın?

Maurice: Şansın yanı sıra, aynı zamanda готовность. Bu, daha önce öğrendiğiniz “yararsız” şeyleri unutmamanız gerektiği anlamına gelir. Ne kadar işe yaramaz şey öğrenirseniz, yeni bir problemle karşılaştığınızda o kadar çok fikir edinebilirsiniz. Bu tür sezgisel kalıp eşleştirme önemli çünkü... Hadi şunu yapalım, bu bir zincir: İlk başta grafiklerin hiç çalışmadığını veya hiç çalışmadığını keşfettim, bana sekizinci olaylardan bir şeyi hatırlattı. yıllar önce ve öğrencilik yıllarımda, tüm bu basit kompleksleri incelediğimizde. Bu da eski topoloji ders kitabımı bulmamı ve onu tekrar kafama yüklememi sağladı. Ancak eğer bu eski bilgi olmasaydı, orijinal problemin çözümünde hiçbir zaman ilerleme kaydedemezdim.

“Çok İşlemcili Programlama Sanatı” kitabının yeni baskısı

Alexey: Kitabınız hakkında birkaç söz söylediniz. Çoklu iş parçacığı üzerine dünyanın en ünlü kitabını yazmış olmanız muhtemelen en kötü sır değildir. "Çok İşlemcili Programlama Sanatı". Zaten yaklaşık 11 yaşında ve o zamandan beri sadece piyasaya sürüldü  gözden geçirilmiş yeniden basım. İkinci baskısı olacak mı?

Maurice: Sorduğun iyi oldu! Çok yakında, üç ay sonra olacak. İki yazar daha var, çok daha fazla materyal ekledik, fork/join paralellik bölümünü geliştirdik, MapReduce hakkında bir bölüm yazdık, birçok yeni şey ekledik ve gereksiz şeyleri attık - bu yazının yazıldığı sırada çok ilginç olan bir şeydi İlk baskısı, ancak bugün artık orada değil. Sonuç, çok ciddi şekilde revize edilmiş bir kitaptı.

Alexey: Her şey zaten yapıldı, geriye kalan tek şey onu serbest bırakmak mı?

Maurice: Birkaç bölümde hâlâ biraz çalışmaya ihtiyaç var. Yayıncımız (zaten bizden nefret ettiğini düşünüyorum) hâlâ daha hızlı çalışmamız gerektiği mesajını vermeye çalışıyor. Programın çok gerisindeyiz. Teorik olarak bu kitabı birkaç yıl önce hazırlayabilirdik.

Alexey: Noel'den önce kitabın yeni bir versiyonunu alma şansınız var mı?

Maurice: Amacımız bu! Ama zaferi o kadar çok kez tahmin ettim ki artık kimse bana inanmıyor. Muhtemelen bu konuda da bana fazla güvenmemelisin.

Alexey: Her halükarda bu harika bir haber. Kitabın ilk baskısını gerçekten çok beğendim. Hayranı olduğumu söyleyebilirsin.

Maurice: Umarım yeni baskı hararetli heyecanınıza layık olur, teşekkürler!

İşlemsel Bellek Nasıl İcat Edildi?

Vitaly: Bir sonraki soru işlemsel hafızayla ilgili. Anladığım kadarıyla siz bu alanda öncüsünüz, kimsenin böyle şeyleri düşünmediği bir dönemde icat ettiniz. Neden bu alana yönelmeye karar verdiniz? İşlemler sizin için neden önemli göründü? Bir gün bunların donanıma uygulanacağını düşündünüz mü?

Maurice: Lisansüstü araştırma günlerimden beri işlemler hakkında bilgi sahibiyim.

Vitaly: Evet ama bunlar farklı işlemler!

Maurice: Engellenmeyen çöp toplama konusunda Elliott Moss ile çalıştım. Bizim sorunumuz şuydu; hafızadaki birkaç kelimeyi atomik olarak değiştirmek istedik ve böylece algoritmalar çok basitleşecek ve en azından bazıları daha verimli hale gelecekti. Kullanma karşılaştırma ve takas için load-link/store-koşulluParalel mimarinin sağladığı bir şey yapmak mümkündür, ancak bu çok verimsiz ve çirkindir çünkü dolaylı katmanlarla uğraşmak zorunda kalırsınız. Bellek sözcüklerini değiştirmek istiyorum ve yalnızca bir işaretçiyi değiştirebildiğim için değiştirmem gerekiyor, bu nedenle bunların bir tür dizin benzeri yapıya işaret etmesi gerekiyor. Eş zamanlı kayıt yapabilecek şekilde donanımını değiştirirsek ne kadar harika olacağını konuştuk. Elliott şunu fark etmiş görünüyor: Önbellek tutarlılığı protokollerine bakarsanız, gerekli işlevlerin çoğunu zaten sağlıyorlar. İyimser bir işlemde, önbellek tutarlılığı protokolü bir zamanlama çakışması olduğunu fark edecek ve önbellek şu şekilde olacaktır: hükümsüz. Önbelleğinizde spekülatif olarak bir işlem çalıştırırsanız ve çakışmaları tespit etmek için tutarlılık protokolü mekanizmalarını kullanırsanız ne olur? Spekülatif donanım mimarisinin tasarlanması kolaydı. Biz de bunu yazdık ilk yayın işlemsel hafıza hakkında. Aynı zamanda, çalıştığım şirket olan Digital Equipment Corporation, Alpha adında yeni bir 64 bit işlemci yaratıyordu. Ben de gidip Alpha geliştirme grubuna harika işlemsel hafızamız hakkında bir sunum yaptım ve onlar şunu sordular: Tüm bunları doğrudan işlemciye eklersek şirketimiz ne kadar ek gelir elde eder? Buna kesinlikle verecek bir cevabım yoktu çünkü ben bir teknoloji uzmanıyım, bir pazarlama uzmanı değilim. Aslında cevaplayacak hiçbir şeyim yoktu. Hiçbir şey bilmediğimden pek etkilenmediler.

Vitaly: Milyarlarca! Sadece milyarlarca deyin!

Maurice: Evet, bunu söylemem gerekirdi. Artık startuplar ve her şey çağında, nasıl iş planı yazılacağını biliyorum. Potansiyel kârınızın büyüklüğü hakkında biraz yalan söyleyebilmeniz. Ama o günlerde bu bana saflık gibi geliyordu, o yüzden sadece "Bilmiyorum" dedim. İşlemsel bellekle ilgili yayının geçmişine bakarsanız, bir yıl sonra ona birkaç atıf yapıldığını ve yaklaşık on yıl boyunca hiç kimsenin bu makaleden alıntı yapmadığını fark edeceksiniz. Alıntılar, gerçek çoklu çekirdeklerin ortaya çıktığı 2004 yılı civarında ortaya çıktı. İnsanlar paralel kod yazmanın para kazandırabileceğini keşfettiğinde yeni araştırmalar başladı. Ravi Rajwar bir makale yazdıBu, bir şekilde işlemsel bellek kavramını ana akıma tanıttı. (Editörün notu: Bu makalenin 2010 yılında yayınlanmış ve ücretsiz olarak erişilebilen ikinci bir versiyonu bulunmaktadır. PDF olarak). Aniden insanlar tüm bunların nasıl kullanılabileceğini, kilitli geleneksel algoritmaların nasıl hızlandırılabileceğini tam olarak anladılar. Geçmişte sadece ilginç bir akademik problem gibi görünen bir şeye güzel bir örnek. Ve evet, o zamanlar bana tüm bunların gelecekte önemli olacağını düşünüp düşünmediğimi sorsaydın, şöyle derdim: elbette, ama tam olarak ne zaman belli değil. Belki 50 yıl sonra? Uygulamada bunun yalnızca on yıl olduğu ortaya çıktı. Bir şey yaptığınızda ve sadece on yıl sonra insanların bunu fark etmesi çok güzel.

Dağıtılmış hesaplama alanında araştırma yapmaya neden değer?

Vitaly: Yeni araştırmalardan bahsedersek, okuyuculara ne tavsiye edersiniz? Dağıtılmış hesaplama mı yoksa çok çekirdekli mi ve neden? 

Maurice: Bugünlerde çok çekirdekli bir işlemciye sahip olmak kolay ama gerçek bir dağıtılmış sistem kurmak daha zor. Doktora tezimden farklı bir şey yapmak istediğim için üzerinde çalışmaya başladım. Yeni öğrencilere her zaman verdiğim tavsiye budur: Tezinizin devamını yazmayın, yeni bir yöne gitmeyi deneyin. Ayrıca çoklu iş parçacığı kullanımı kolaydır. Yataktan çıkmadan dizüstü bilgisayarımda kendi çatalımın çalışmasını deneyebilirim. Ancak birdenbire gerçek bir dağıtılmış sistem yaratmak istersem, çok fazla iş yapmam, öğrencileri çekmem vb. gerekirdi. Ben tembel bir insanım ve çok çekirdekli çalışmayı tercih ederim. Çok çekirdekli sistemler üzerinde deney yapmak, dağıtılmış sistemler üzerinde deney yapmaktan da daha kolaydır çünkü aptalca dağıtılmış bir sistemde bile kontrol edilmesi gereken çok fazla faktör vardır.

Vitaly: Şu anda ne yapıyorsun, blockchain mi araştırıyorsun? İlk önce hangi makalelere dikkat etmelisiniz?

Maurice: Yakın zamanda ortaya çıktı çok iyi makaleöğrencim Vikram Saraf'la birlikte özellikle bir konuşma için yazdım. Tokenomcs konferansı Üç hafta önce Paris'te. Bu, Ethereum'u çok iş parçacıklı hale getirmeyi önerdiğimiz pratik dağıtılmış sistemler hakkında bir makaledir. Şu anda akıllı sözleşmeler (blok zincirinde çalışan kod) sırayla yürütülmektedir. Daha önce süreci hızlandırmak için spekülatif işlemleri kullanmanın bir yolundan bahseden bir makale yazmıştık. Yazılımın işlemsel belleğinden birçok fikir aldık ve bu fikirleri Etherium sanal makinesinin bir parçası haline getirirseniz her şeyin daha hızlı çalışacağını söyledik. Ancak bunun için sözleşmelerde veri çakışmasının olmaması gerekiyor. Ve sonra gerçek hayatta gerçekten böyle çatışmaların olmadığını varsaydık. Ama bunu öğrenmemizin hiçbir yolu yoktu. Sonra elimizde neredeyse on yıllık gerçek bir sözleşme geçmişi olduğu aklıma geldi, bu yüzden Ethereum blok zincirini bir kenara bıraktık ve kendimize şu soruyu sorduk: Bu tarihsel kayıtlar paralel olarak yürütülürse ne olurdu? Hızda ciddi bir artış tespit ettik. Ethereum'un ilk günlerinde hız çok arttı, ancak bugün her şey biraz daha karmaşık çünkü daha az sözleşme var ve serileştirme gerektiren veriler üzerinde çakışma olasılığı daha yüksek hale geldi. Ancak bunların hepsi gerçek tarihsel verilerle yapılan deneysel çalışmalardır. Blockchain'in güzel yanı her şeyi sonsuza kadar hatırlamasıdır, böylece zamanda geriye gidebilir ve kodu çalıştırmak için farklı algoritmalar kullanmış olsaydık ne olacağını inceleyebiliriz. Geçmişteki insanlar yeni fikrimizi nasıl beğenirdi? Bu tür araştırmaları yapmak çok daha kolay ve zevkli çünkü her şeyi izleyen, her şeyi kaydeden bir şey var. Bu zaten algoritmaların geliştirilmesinden çok sosyolojiye benzer bir şey.

Algoritmaların gelişimi durdu mu ve nasıl ilerlemeli?

Vitaly: Son teorik soruya geçme zamanı! Rekabetçi veri yapılarındaki ilerlemenin her yıl azaldığını mı düşünüyorsunuz? Veri yapılarını anlama konusunda bir düzlüğe ulaştığımızı mı düşünüyorsunuz yoksa bazı önemli gelişmeler olacak mı? Belki her şeyi tamamen değiştirebilecek bazı akıllı fikirler vardır?

Maurice: Geleneksel mimarilere ilişkin veri yapılarında bir düzlüğe ulaşmış olabiliriz. Ancak yeni mimarilere yönelik veri yapıları hâlâ oldukça umut verici bir alan. Örneğin donanım hızlandırıcılar için veri yapıları oluşturmak istiyorsanız, GPU'nun veri yapıları CPU'nun veri yapılarından çok farklıdır. Blok zincirleri için veri yapıları geliştirdiğinizde, veri parçalarını hashlemeniz ve ardından bunları aşağıdaki gibi bir şeye yerleştirmeniz gerekir: Merkle ağacı, sahteciliği önlemek için. Son zamanlarda bu alanda bir faaliyet artışı yaşanıyor ve birçoğu çok iyi işler yapıyor. Ancak yeni mimarilerin ve yeni uygulamaların yeni veri yapılarına yol açacağını düşünüyorum. Eski uygulamalar ve geleneksel mimari; artık keşfedilecek fazla yer kalmamış olabilir. Ancak alışılmışın dışına çıkıp sınırların ötesine bakarsanız, ana akımın ciddiye almadığı çılgınca şeyler görürsünüz; tüm heyecan verici şeyler aslında burada gerçekleşir.

Vitaly: Bu nedenle çok ünlü bir araştırmacı olabilmek için kendi mimarimi icat etmem gerekiyordu :)

Maurice: Başka birinin yeni mimarisini "çalabilirsin"; bu çok daha kolay görünüyor!

Brown University'de çalışıyor

Vitaly: Bize daha fazla bilgi verebilir misiniz? Kahverengi Üniversitesinerede çalışıyorsun? Bilgi teknolojisi bağlamında onun hakkında pek bir şey bilinmiyor. Örneğin MIT'den daha az.

Maurice: Brown Üniversitesi Amerika Birleşik Devletleri'ndeki en eski üniversitelerden biridir. Sadece Harvard'ın biraz daha yaşlı olduğunu düşünüyorum. Brown sözde bir parçası Sarmaşık Birliği, en eski sekiz üniversitenin bir koleksiyonudur. Harvard, Brown, Cornell, Yale, Columbia, Dartmouth, Pensilvanya, Princeton. Biraz eski, küçük ve biraz da aristokrat bir üniversite. Ana odak noktası liberal sanatlar eğitimidir. MIT gibi olmaya çalışmıyor, MIT çok uzmanlaşmış ve teknik. Brown, Rus Edebiyatı veya Klasik Yunanca ve tabii ki Bilgisayar Bilimi okumak için harika bir yerdir. Kapsamlı eğitime odaklanır. Öğrencilerimizin çoğu Facebook'a, Apple'a, Google'a gidiyor; dolayısıyla öğrencilerimizin sektörde iş bulma konusunda herhangi bir sorun yaşamadıklarını düşünüyorum. Brown'da çalışmaya gittim çünkü daha önce Boston'daki Digital Equipment Corporation'da çalışmıştım. Bu, birçok ilginç şey icat eden ancak kişisel bilgisayarların önemini inkar eden bir şirketti. Kurucuları bir zamanlar genç devrimciler olan, kaderi zor olan bir şirket, hiçbir şey öğrenmediler ve hiçbir şeyi unutmadılar ve böylece yaklaşık bir düzine yıl içinde devrimcilerden gericilere dönüştüler. Kişisel bilgisayarların garaja, tabii ki terk edilmiş bir garaja ait olduğu konusunda şaka yapmayı seviyorlardı. Daha esnek şirketler tarafından yok edildikleri çok açık. Şirketin başının dertte olduğu anlaşılınca, Boston'un yaklaşık bir saat dışında bulunan Brown'daki bir arkadaşımı aradım. O zamanlar Boston'dan ayrılmak istemiyordum çünkü diğer üniversitelerde çok fazla açık kontenjan yoktu. Bu, Bilgisayar Bilimleri alanında şu anda olduğu kadar çok işin olmadığı bir dönemdi. Ve Brown'da bir fırsat vardı, evimi taşımak zorunda değildim, ailemi taşımak zorunda değildim ve Boston'da yaşamayı gerçekten seviyorum! Brown'a gitmeye bu şekilde karar verdim. Beğendim. Öğrenciler harika, bu yüzden başka bir yere gitmeyi hiç denemedim. İzinli iznim sırasında bir yıl Microsoft'ta çalıştım, bir yıl Hayfa'daki Technion'a gittim ve şimdi Algorand'da olacağım. Her yerde birçok meslektaşım var ve bu nedenle sınıflarımızın fiziksel konumu o kadar da önemli değil. Ama en önemlisi öğrenciler, onlar buranın en iyileri. Hiçbir zaman başka bir yere gitmeyi denemedim çünkü burada çok mutluyum.

Brown'ın Amerika Birleşik Devletleri'ndeki şöhretine rağmen şaşırtıcı bir şekilde yurt dışında tanınmıyor. Gördüğünüz gibi şu anda bu durumu düzeltmek için mümkün olan her şeyi yapıyorum.

Üniversitedeki araştırma ile şirket içindeki araştırma arasındaki fark

Vitaly: Tamam, bir sonraki soru Dijital Ekipmanla ilgili. Araştırmacı olarak oradaydınız. Büyük bir firmanın Ar-Ge departmanında çalışmakla üniversitede çalışmak arasındaki fark nedir? avantajları ve dezavantajları nelerdir?

Maurice: Yirmi yıl boyunca Microsoft'ta çalıştım; Sun Microsystems, Oracle, Facebook ve şimdi de Algorand çalışanlarıyla yakın işbirliği içinde çalıştım. Tüm bunlardan yola çıkarak hem şirketlerde hem de üniversitelerde birinci sınıf araştırma yapmanın mümkün olduğunu söylemek istiyorum. Önemli fark, bir şirkette meslektaşlarınızla birlikte çalışıyor olmanızdır. Aniden henüz var olmayan bir proje için aklıma bir fikir gelirse meslektaşlarımı bunun iyi bir fikir olduğuna ikna etmeliyim. Eğer Brown'daysam öğrencilerime şunu söyleyebilirim: hadi yerçekimine karşı çalışalım! Ya başka birine gidecekler ya da bir proje üstlenecekler. Evet, fon bulmam gerekecek, hibe başvurusu yazmam gerekecek, vb. Her halükarda her zaman çok sayıda öğrenci olacak ve tek taraflı kararlar alabileceksiniz. Ancak üniversitede büyük olasılıkla sizin seviyenizdeki insanlarla çalışmayacaksınız. Endüstriyel araştırma dünyasında öncelikle herkesi projenizin üstlenmeye değer olduğuna ikna etmeniz gerekir. Kimseye bir şey sipariş edemem. Ve bu iki çalışma şekli de değerlidir, çünkü gerçekten çılgınca bir şey üzerinde çalışıyorsanız ve meslektaşlarınızı ikna etmek zorsa, lisansüstü öğrencileri ikna etmek daha kolaydır; özellikle de onlara para ödüyorsanız. Çok fazla deneyim ve derin uzmanlık gerektiren bir şey üzerinde çalışıyorsanız, o zaman “hayır, ben bu alanda anlıyorum ve fikriniz kötü, işe yaramaz” diyebilecek meslektaşlarınıza ihtiyacınız var. Bu zaman kaybı açısından oldukça faydalıdır. Ayrıca endüstriyel laboratuvarlarda rapor yazmak için çok zaman harcıyorsanız, üniversitede bu zamanı para bulmaya harcıyorsunuz demektir. Eğer öğrencilerin bir yere gidebilmesini istiyorsam bunun için gerekli parayı başka bir yerden bulmam gerekiyor. Üniversitedeki konumunuz ne kadar önemliyse, para toplamak için o kadar çok zaman harcamanız gerekir. Artık ne için çalıştığımı biliyorsun; profesyonel bir dilenci! Elinde adak tabağıyla dolaşan keşişlerden biri gibi. Genel olarak bu iki aktivite birbirini tamamlamaktadır. Bu yüzden her iki dünyada da yaşamaya ve ayaklarımı yere basmaya çalışıyorum.

Vitaly: Öyle görünüyor ki bir şirketi ikna etmek diğer bilim adamlarını ikna etmekten daha zor.

Maurice: Daha zor ve çok daha fazlası. Üstelik farklı alanlarda durum farklıdır: Bazıları tam ölçekli araştırma yürütürken, diğerleri kendi konularına odaklanır. Microsoft'a veya Facebook'a gidip şöyle dersem: hadi anti-yerçekimi yapalım, bunu pek takdir etmezler. Ama aynı şeyi lisansüstü öğrencilerime de söyleseydim, büyük olasılıkla anında işe koyulurlardı, ancak şimdi sorunlarım olacak - sonuçta bunun için para bulmam gerekiyor. Ancak şirketin hedeflerine uygun bir şey yapmak istediğiniz sürece, o şirket araştırma yapmak için çok iyi bir yer olabilir.

Hydra ve SPTDC

Vitaly: Sorularım sona eriyor, o yüzden biraz yaklaşan Rusya gezisinden bahsedelim.

Maurice: Evet, St. Petersburg'a dönmeyi sabırsızlıkla bekliyorum.

Alexey: Bu yıl seni aramızda görmekten onur duyuyorum. Bu St. Petersburg'a ikinci gelişiniz, değil mi?

Maurice: Zaten üçüncü!

Alexey: Anlıyorum ama SPTDC – kesinlikle ikincisi. En son okul çağrıldığında SPTCCBu yıl özellikle dağıtılmış bilgi işlemle ilgili daha fazla alan olduğunu vurgulamak için artık bir harfi (C'den D'ye, Eşzamanlı'dan Dağıtılmış'a) değiştirdik. Okuldaki raporlarınız hakkında birkaç söz söyleyebilir misiniz? Hydra konferansı?

Maurice: Okulda blockchain'in temelleri ve onunla neler yapabileceğiniz hakkında konuşmak istiyorum. Blockchainlerin aşina olduğumuz çok iş parçacıklı programlamaya çok benzediğini, ancak kendi nüansları olduğunu ve bu farklılıkların anlaşılmasının önemli olduğunu göstermek isterim. Normal bir web uygulamasında hata yaparsanız, bu sadece sinir bozucu olur. Bir finansal uygulamada hatalı kod yazarsanız birisi kesinlikle tüm paranızı çalacaktır. Bunlar tamamen farklı sorumluluk düzeyleri ve sonuçlardır. Biraz iş kanıtından, akıllı sözleşmelerden, farklı blockchainler arasındaki işlemlerden bahsedeceğim.

Yanımda çalışacak ve blockchain hakkında söyleyecekleri olan başka konuşmacılar da olacak ve hikayelerimizin birbirine iyi uyması için birbirimizle koordineli çalışma konusunda anlaştık. Ancak mühendislik raporu için geniş bir kitleye, neden blockchain'ler hakkında duyduğunuz her şeye inanmamanız gerektiği, blockchain'in neden harika bir alan olduğu, bilinen diğer fikirlerle nasıl uyum sağladığı ve neden cesurca bakmamız gerektiği konusunda anlaşılır bir açıklama yapmak istiyorum. geleceğe.

Alexey: Ayrıca bunun iki yıl önceki gibi bir buluşma veya kullanıcı grubu formatında gerçekleşmeyeceğini de söylemek istiyorum. Okulun yakınında küçük bir konferans düzenlemeye karar verdik. Sebebi ise Peter Kuznetsov ile görüştükten sonra okulun yüz, belki 120 kişiyle sınırlı olduğunu fark ettik. Aynı zamanda sizinle iletişim kurmak isteyen, sunumlara katılmak isteyen, genel olarak konuyla ilgilenen çok sayıda mühendis var. Bu nedenle yeni bir konferans oluşturduk Hydra denir. Bu arada, neden Hydra'ya dair bir fikriniz var mı?

Maurice: Yedi konuşmacı olacağı için mi? Peki kafaları kesilebilir ve yerlerine yeni konuşmacılar mı çıkacak?

Alexey: Yeni konuşmacılar yetiştirmek için harika bir fikir. Ama aslında burada bir hikaye var. arasında yelken açmak zorunda kaldığı Odysseus efsanesini hatırlayın. Scylla ve Charybdis? Hydra, Charybdis'e benzer bir şeydir. Hikaye şu ki, bir keresinde bir konferansta konuşmuştum ve çoklu iş parçacıklarından bahsetmiştim. Bu konferansta sadece iki parça vardı. Raporun başında salondaki izleyicilere artık Scylla ve Charybdis arasında seçim yapabileceklerini söylemiştim. Benim ruh hayvanım Charybdis çünkü Charybdis'in birçok kafası var ve benim temam çok iş parçacıklı. Konferans isimleri bu şekilde görünür.

Her durumda, sorularımız ve zamanımız tükendi. Bu harika röportaj için teşekkürler arkadaşlar, SPTDC Okulu ve Hydra 2019'da görüşürüz!

Maurice ile sohbetinize 2019-11 Temmuz 12 tarihlerinde St. Petersburg'da düzenlenecek olan Hydra 2019 konferansında devam edebilirsiniz. Raporla gelecek "Blockchain'ler ve dağıtılmış hesaplamanın geleceği". Biletler satın alınabilir resmi web sitesinde.

Kaynak: habr.com

Yorum ekle