"Deneysel sonuçlar yalnızca yayın amaçlıdır, çalışmanın gerçek nedenleri estetiktir." Michael Scott'la harika röportaj

"Deneysel sonuçlar yalnızca yayın amaçlıdır, çalışmanın gerçek nedenleri estetiktir." Michael Scott'la harika röportaj Michael Scott - 34 yıldır Rochester Üniversitesi'nde Bilgisayar Bilimleri profesörü olarak ve memleketi Wisconsin-Madison Üniversitesi'nde beş yıl boyunca dekanlık yaptı. Öğrencilere paralel ve dağıtılmış programlama ve dil tasarımı hakkında araştırma yapar ve ders verir.

Dünya Michael'ı ders kitabından tanıyor "Programlama Dili Edimbilimi", peki ya iş "Paylaşımlı bellek çoklu işlemcilerinde ölçeklenebilir senkronizasyon için algoritmalar" dağıtılmış hesaplama alanında en ünlülerden biri olarak Dijkstra Ödülü'nü aldı. Onu aynı algoritmanın yazarı olarak da tanıyor olabilirsiniz. Michael-Scott.

Doug Lee ile birlikte Java kitaplıklarına güç veren engellemeyen algoritmaları ve eşzamanlı kuyrukları geliştirdi. Uygulama "ikili veri yapıları" JavaSE 6'da performans 10 kat arttı ThreadPoolExecutor.

İçindekiler:

  • Erken kariyer, Rochester Üniversitesi. Charlotte Projesi, Lynx dili;
  • IEEE Ölçeklenebilir Tutarlı Arayüz, MCS kilitleme;
  • Sürekli değişen bir dünyada hayatta kalmak;
  • Öğrenciler aptallaşıyor mu? Küresel eğilimler, uluslararasılaşma;
  • Öğrencilerle etkili çalışma;
  • Yeni ders ve kitapların hazırlanmasına nasıl ayak uydurulacağı;
  • İş dünyası ve akademi arasındaki bağlantılar;
  • Fikirlerin pratik uygulaması. MCS, MS, CLH, JSR 166, Doug Lee ve daha fazlasıyla çalışıyor;
  • İşlemsel bellek;
  • Yeni mimariler. İşlemsel hafızanın zaferi yakındır;
  • Kalıcı bellek, Optane DIMM, ultra hızlı cihazlar;
  • Bir sonraki büyük trend. İkili veri yapıları. Hidra.

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

Vitaly Aksenov — şu anda IST Avusturya'da doktora sonrası araştırma yapıyor ve ITMO Üniversitesi Bilgisayar Teknolojileri Bölümü üyesi. 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ı.

Erken kariyer, Rochester Üniversitesi. Charlotte projesi, Lynx dili.

Alex: Başlangıç ​​olarak, Rusya'da hepimizin Bilgisayar Bilimi, Veri Bilimi ve algoritmaları gerçekten sevdiğimizi söylemek istedim. Kesinlikle müstehcen. Her şeyi okuduk Cormen, Leiserson ve Rivest'in kitabı. Bu nedenle yaklaşan konferans, okul ve bu röportajın kendisi çok popüler olmalı. Bu röportaj için öğrencilerden, programcılardan ve topluluk üyelerinden çok sayıda soru aldık, dolayısıyla bu fırsat için çok minnettarız. Bilgisayar Bilimi ABD'de aynı sevgiyi görüyor mu?

Michael: Alanımız o kadar çeşitli ki, o kadar çok yönü var ve toplumu o kadar farklı şekillerde etkiliyor ki, size kesin bir cevap vermem çok zor. Ancak gerçek şu ki son 30 yılda iş dünyasında, sanayide, sanatta ve genel olarak toplumda çok büyük değişikliklere yol açtı.

Vitali: Uzak bir şeyle başlayalım. Pek çok üniversitede belirli bir alanda uzmanlaşma gibi bir şey vardır. Carnegie Mellon Üniversitesi için bu paralel hesaplamadır; MIT için ise kriptografi, robotlar ve çoklu iş parçacığı. Rochester Üniversitesi'nde böyle bir uzmanlık var mı?

Michael: Dürüst olmak gerekirse CMU ve MIT'nin her alanda uzmanlaştığını söyleyebilirim. Bölümümüz her zaman en çok yapay zekaya önem verdi. Bizim için çalışan kişilerin yarısı yapay zeka veya insan-bilgisayar etkileşimi ile ilgileniyor; bu pay diğer departmanlara göre daha yüksek ve her zaman da öyle oldu. Ancak üniversitedeyken yapay zeka ile ilgili herhangi bir dersim yoktu ve bu alanda hiç çalışmadım. Yani benim bölümüm benim hiçbir ilgimin olmadığı bir sorun üzerinde uzmanlaşıyor. Teselli ise bölümümüz için ikinci en önemli sorunun paralel ve çok iş parçacıklı programlama yani uzmanlığım olmasıdır.

Vitali: Çok iş parçacıklı programlama alanı henüz yeni ortaya çıkarken Bilgisayar Bilimleri alanında çalışmaya başladınız. Yayınlarınızın listesi, ilk çalışmalarınızın oldukça geniş bir yelpazedeki konuları ele aldığını gösteriyor: çok iş parçacıklı sistemlerde bellek yönetimi, dağıtılmış dosya sistemleri, işletim sistemleri. Neden bu kadar çok yönlülük? Araştırma topluluğundaki yerinizi bulmaya mı çalıştınız?

Michael: Öğrenci olarak katıldım Charlotte projesi İlk dağıtılmış işletim sistemlerinden birinin geliştirildiği Wisconsin Üniversitesi'nde. Orada Rafael Finkel ile birlikte çalıştım (Raphael Finkel) ve Marvin Solomon (Marvin Süleyman). Tezim, dağıtılmış sistemler için sistem yazılımına yönelik bir dilin geliştirilmesine adanmıştı - şimdi herkes bunu unuttu ve Tanrıya şükür. Gevşek bir şekilde dağıtılmış bir işletim sistemi için sunucular oluşturmayı kolaylaştırmayı amaçlayan Lynx programlama dilini oluşturdum. O zamanlar ağırlıklı olarak işletim sistemleriyle ilgilendiğim için kariyerimin ağırlıklı olarak işletim sistemleriyle bağlantılı olacağını varsayıyordum. Ancak Rochester çok küçük bir üniversiteydi ve bu nedenle oradaki farklı gruplar birbirleriyle çok yakın etkileşim içerisindeydi. Orada konuşabileceğim bir düzine işletim sistemi çalışanı yoktu, dolayısıyla tüm bağlantılarım tamamen farklı alanlarda çalışan insanlarlaydı. Gerçekten çok keyif aldım, çok yönlü olmak benim için büyük bir avantaj. Özellikle çok iş parçacıklı veri yapıları ve senkronizasyon algoritmalarından bahsedecek olursak, o zaman tamamen tesadüfen bunlar üzerinde çalışmaya başladım.

IEEE Ölçeklenebilir Tutarlı Arayüz, MCS kilitleme.

Vitali: Bana bundan biraz daha bahseder misin?

Michael: Bu herkese anlatmaktan asla bıkmadığım komik bir hikaye. Bir konferansta yaşandı ASPLOS Boston'da - bu 80'lerin sonu veya 90'ların başıydı. John Mellor-Crummey (John Mellor-Crummey), fakültemiz mezunu. Kendisini tanıyordum ama daha önce ortak araştırma yapmamıştık. Mary Vernon (Mary Vernon) Wisconsin'den, Wisconsin'de geliştirdikleri çok işlemcili bir sistem hakkında bir konuşma yaptı: Wisconsin Multicube. Bu Multicube, donanım düzeyinde Q on Sync Bit adı verilen bir senkronizasyon mekanizmasına sahipti ve daha sonra Colby peynirine benzediği için Q on Lock Bit olarak yeniden adlandırıldı ki bu bir kelime oyunuydu. Çoklu iş parçacığı mekanizmalarıyla ilgileniyorsanız, muhtemelen Colby'nin sonunda IEEE Ölçeklenebilir Tutarlı Arayüz standardı için senkronizasyon motoru haline geldiğini biliyorsunuzdur. Bu, donanım düzeyinde bir önbellekten diğerine işaretçiler oluşturan ve her kilit sahibinin sıranın kimde olduğunu bilmesini sağlayan bir kilitleme mekanizmasıydı. John ve ben bunu duyduğumuzda birbirimize baktık ve şöyle dedik: Bunu neden donanım düzeyinde yapıyoruz? Karşılaştırma ve takas kullanılarak aynı şey elde edilemez mi? Sınıfta duran defterlerden birini aldık ve üzerine karaladık. MCS engellemeMary raporuna devam ederken. Daha sonra uyguladık, denedik, fikir başarılı oldu ve makaleyi yayınladık. O zamanlar bu konu benim için sadece eğlenceli bir dikkat dağıtıcı görünüyordu ve ardından işletim sistemlerine dönmeyi planladım. Ancak daha sonra aynı doğrultuda başka bir sorun ortaya çıktı ve sonunda senkronizasyon, çoklu iş parçacığı ve veri yapıları benim uzmanlık alanım haline geldi. Gördüğünüz gibi bunların hepsi tesadüfen oldu.

Vitali: MCS engellemeye uzun zamandır aşinayım ama şu ana kadar bunun sizin eseriniz olduğunu bilmiyordum ve bunun soyadlarınızın kısaltması olduğunu anlamadım.

Sürekli değişen dünyada nasıl hayatta kalınır?

Alex: İlgili bir konuyla ilgili bir sorum var. 30-40 yıl önce farklı uzmanlık alanlarında daha fazla özgürlük vardı. Çok iş parçacıklı veya dağıtılmış sistemlerde kariyere başlamak istiyorsanız hoş geldiniz, işletim sistemlerine girmek istiyorsanız sorun değil. Her alanda çok sayıda açık soru ve az sayıda uzman vardı. Artık dar uzmanlıklar ortaya çıktı: Yalnızca genel olarak işletim sistemleri konusunda uzmanlar yok, bireysel sistemler konusunda da uzmanlar var. Çok iş parçacıklı ve dağıtılmış sistemlerde de durum aynıdır. Ancak sorun şu ki hayatlarımız sonsuz değil; herkes araştırmaya yalnızca birkaç on yıl ayırabilir. Bu yeni dünyada nasıl hayatta kalınır?

Michael: Biz bu konuda özel değiliz, başka bölgelerde de aynı şey oldu. Şanslıydım ki, Bilgisayar Bilimleri alanında çalışmaya bu alan “ergenlik” yıllarındayken başladım. Bazı temeller zaten atılmıştı ama her şey henüz olgunlaşmamıştı. Bu fırsat sıklıkla karşınıza çıkmaz. Elektrik mühendisliği çok uzun zamandır var, fizik daha da uzun süredir, matematik ise neredeyse zamanın başlangıcından beri var. Ancak bu artık kimsenin matematikte ilginç keşifler yapmadığı anlamına gelmiyor. Hala çözülmemiş birçok sorun var ama aynı zamanda daha fazlasının öğrenilmesi gerekiyor. Artık daha önce olduğundan çok daha fazla uzmanlık bulunduğunu belirtmekte haklısınız, ancak bu yalnızca kendimizi insan faaliyetinin diğer birçok alanıyla aynı durumda bulduğumuz anlamına geliyor.

Alex: Ben burada konunun daha pratik tarafıyla ilgileniyorum. Matematik geçmişim var ve çalışmalarım sırasında sık sık konferanslara katıldım ve çeşitli bilimsel konular üzerinde çalıştım. Dinleyiciler arasında hiç kimsenin benim raporlarımı anlamadığını ve aynı şekilde diğer insanların raporlarının da sadece kendilerinin anlayabildiğini keşfettim. Üst düzey konularda durum böyle değil, ancak bir şeyi araştırmaya başladığınız anda izleyici artık size ayak uyduramaz. Nasıl anlaştın onunla birlikte?

Michael: Her zaman başarılı değil. Geçtiğimiz günlerde teknik detaylara çok derinlemesine indiğim bir rapor hazırladım. Konuşma ilerledikçe dinleyicilerin çoğunun beni anlamadığı ortaya çıktı, bu yüzden duruma anında uyum sağlamak zorunda kaldım. Slaytlar değiştirilemediği için pek iyi sonuçlanmadı. Bu yüzden genel olarak slayt kullanmamaya çalışıyorum. Genel olarak tavsiyem hedef kitlenizi dikkate almanızdır. Kiminle konuştuğunuzu, onların bilgi düzeyinin ne olduğunu ve çalışmanızı takdir etmek için ne duymaları gerektiğini bilmeniz gerekir.

Vitali: Bu dersin neyle ilgili olduğuna dair bize bir ipucu verebilir misiniz?

Michael: Dürüst olmak gerekirse, söz konusu kişileri isimsiz bırakmak adına bu konuyu uzatmamayı tercih ederim. Sorun şu ki, üzerinde çalıştığımız sorunun karmaşıklıklarına sıklıkla çok fazla dalıyoruz, dolayısıyla konuşmanın başında sorunun neden ilginç ve önemli olduğunu ve çözüm bekleyen konularla nasıl bağlantılı olduğunu açıklamak bizim için zorlaşıyor. izleyici zaten biliyor. Gözlemlerime göre bu beceriyi öğrenmekte en çok öğrenciler zorlanıyor. Ve bu aynı zamanda son raporumun zayıf noktasıydı. Düzgün yapılandırılmış bir rapor, en başından itibaren hedef kitleyle temas kurmalı, onlara sorunun tam olarak ne olduğunu ve zaten bilinen konularla nasıl bağlantılı olduğunu açıklamalıdır. Bu tanıtımın ne kadar teknik olacağı izleyiciye bağlıdır. Tamamen rengarenk ise rapor çok aşamalı olabilir. Giriş bölümü herkes için erişilebilir olmalıdır ve sonunda yazı size ayak uyduramayabilir, ancak alanınıza göreceli olarak aşina olan kişiler bunu anlayabileceklerdir.

Öğrenciler aptallaşıyor mu? Küresel eğilimler, uluslararasılaşma.

Alex: Onlarca yıldır öğrencileri gözlemliyorsunuz. Öğrenciler on yıldan on yıla veya yıldan yıla daha aptal mı yoksa daha akıllı mı oluyor? Rusya'da profesörler sürekli olarak öğrencilerin her geçen yıl daha da aptallaştığından şikayet ediyor ve bu konuda ne yapılacağı gerçekten de belli değil.

Michael: Biz yaşlılardan gerçekten çok fazla olumsuzluk duyabilirsiniz. Bilinçaltımızda, öğrencilerden halihazırda sahip olduğumuz 30 yıllık deneyimin tamamını özümsemesini bekleme eğilimindeyiz. Eğer benim 1985'tekinden daha derin bir anlayışım varsa neden öğrenciler buna sahip değil? Muhtemelen 20 yaşında oldukları için ne düşünüyorsunuz? Son yıllardaki en önemli değişikliklerin demografik yapıda olduğunu düşünüyorum: Kanadalılar hariç artık çok daha fazla uluslararası öğrencimiz var. Eskiden çok fazla Kanadalı vardı çünkü Kanada sınırına çok yakınız ve oradan gelen öğrenciler hafta sonları evlerine gidebiliyorlar. Ancak artık Kanada'da pek çok iyi üniversite var ve Kanadalılar burada eğitim almayı tercih ediyor; önemli ölçüde daha azı ABD'ye geliyor.

Alex: Sizce bu yerel bir trend mi yoksa global bir trend mi?

Michael: Tam olarak kim olduğunu hatırlamıyorum ama birisi dünyanın düz olduğunu söyledi. Alanımız çok daha uluslararası hale geldi. ACM Konferansları Daha önce sadece Amerika Birleşik Devletleri'nde yapılıyordu, daha sonra diğer ülkelerde her 4 yılda bir yapılmasına karar verildi ve şimdi tüm dünyada yapılıyor. Bu değişiklikler daha da etkiledi IEEEÇünkü her zaman ACM'den daha uluslararası bir organizasyon olmuştur. Ve Çin'den, Hindistan'dan, Rusya'dan, Almanya'dan ve diğer birçok ülkeden program başkanları var çünkü şu anda her yerde çok şey oluyor.

Alex: Ama muhtemelen böyle bir uluslararasılaşmanın bazı olumsuz yönleri var mı?

Michael: Bütün olumsuzlukların teknolojiyle değil siyasetle ilgili olduğunu söyleyebilirim. Bir zamanlar asıl sorun, ABD'nin dünyadaki ülkelerin en akıllı ve en yetenekli insanlarını çalmasıydı. Ve şimdi asıl sorun, farklı ülkeler arasında vize ve göçmenlik etrafında oynanan siyasi oyunlardır.

Alex: Yani engeller ve bunun gibi şeyler. Apaçık.

vladimir: Şahsen ben öğrencilere yeni bir konuyu öğretirken nasıl bir yaklaşım izlediğinizi merak ediyorum. Farklı seçenekler var: Her şeyden önce onlara yeni bir şey denemeleri için ilham vermeyi deneyebilir veya belirli bir teknolojinin nasıl çalıştığına dair ayrıntılara daha fazla dikkat edebilirsiniz. Ne tercih edersin?

Öğrencilerle etkili çalışma

Alex: Peki birinci ve ikinci arasındaki lanet dengeyi nasıl bulacağız?

Michael: Sorun şu ki dersler her zaman istediğim gibi gitmiyor. Genellikle öğrencilere okuma materyalini önceden veririm, böylece konuyu derinlemesine inceleyebilirler, ellerinden gelen en iyi şekilde anlayabilirler ve anlayamadıkları kısımlar hakkında sorular formüle edebilirler. Daha sonra sınıfta en zor anlara odaklanabilir ve bunları birlikte keşfedebilirsiniz. Dersleri en çok bu şekilde işlemeyi seviyorum. Ancak şu anda öğrencilerin üzerindeki yük göz önüne alındığında, onların önceden hazırlandıklarından her zaman emin olamıyorum. Sonuç olarak, malzemenin genel olarak yeniden anlatılmasına istediğinizden çok daha fazla zaman ayırmanız gerekir. Buna rağmen derslerimizi interaktif tutmaya çalışıyorum. Aksi takdirde, öğrencilerin daha sonra evde izleyebilecekleri bir video kaydetmek daha kolaydır. Canlı derslerin amacı insan etkileşimidir. Bir diyagramın tahtada tasvir edilemeyecek kadar karmaşık olduğu bazı durumlar dışında, sınıfta slayt yerine tebeşir ve kara tahta kullanmayı tercih ederim. Bu sayede katı bir ders planına bağlı kalmak zorunda kalmıyorum. Materyali verdiğimde kesin bir düzen olmadığından, aldığım sorulara göre onu dinleyicilere göre uyarlamamı sağlıyor. Genel olarak dersleri mümkün olduğunca etkileşimli hale getirmeye çalışıyorum, böylece sunduğum materyal bana sorulan sorulara bağlı olacak.

vladimir: Bu harika. Deneyimlerime göre dinleyicilerin soru sormasını sağlamak oldukça zordur. Herhangi bir soru sormak için önceden sorsanız bile, ne kadar aptal ya da akıllı olursa olsun, yine de sessizdirler. Nasıl anlaştın onunla birlikte?

Michael: Güleceksin ama yeterince uzun süre sessiz kalırsan, er ya da geç herkes rahatsız olacak ve birileri bir soru soracak. Ya da insanların az önce söylenenleri anlayıp anlamadığını belirlemek için evet veya hayır cevabı içeren basit bir teknik soru sorabilirsiniz. Mesela yukarıdaki örnekte bir veri yarışı var mı? Kim böyle düşünüyor? Kim öyle olmadığını düşünüyor? Toplamda ibrelerin sadece yarısı kalktığı için kim hiçbir şey anlamıyor?

Vitali: Ve eğer yanlış cevap verirseniz sınıftan atılırsınız :)

Michael: Hiçbir şeye cevap vermediyseniz bir soru sormalısınız. Az önce sorduğum soruyu cevaplamak için öğrencinin tam olarak neyi bilmesi gerektiğini anlamam gerekiyor. Onlara yardım etmeme yardım etmelerine ihtiyacım var. Sorunu anlamaları için onlara uyum sağlamaya hazırım. Ama onların aklından neler geçtiğini bilmiyorsam bunu yapamam. Ve eğer öğrencilere yeterince uzun süre huzur vermezseniz, bazen sonunda doğru soruları sorarlar, yani öğrencilerin kafasında tam olarak neler olup bittiğini görmemi sağlayan sorular. 

Alex: Bu sorular bazen sizin de daha önce düşünmediğiniz fikirlere yol açıyor mu? Beklenmedikler mi? Bir soruna yeni bir açıdan bakmanıza izin veriyorlar mı?

Michael: Materyali sunmanın yeni bir yolunu açan sorular var. Çoğu zaman hakkında konuşmayı planlamadığım ilginç sorunlara yol açan sorular oluyor. Öğrenciler bana sık sık böyle bir durumda konunun dışına çıkma eğilimim olduğunu söylerler. Ve onlara göre çoğu zaman dersin en ilginç kısmı budur. Çok nadiren, yalnızca birkaç kez, öğrenciler araştırmaya yeni bir yön veren ve bir makaleye dönüşen sorular sordular. Bu, derslerden ziyade öğrencilerle yapılan görüşmelerde çok daha sık oluyor, ancak ara sıra dersler sırasında da oluyor. 

Alex: Peki öğrenciler size daha sonra bir makale yayınlamanın mümkün olduğu sorular sordular mı?

Michael: Evet. 

Vitali: Öğrencilerle bu sohbetleri ne sıklıkla yapıyorsunuz? Derste anlatılanlardan daha fazlasını ne zaman öğrenmek istiyorlar?

Michael: Lisansüstü öğrencilerimle - her zaman. Bende 5-6 tane var ve onlarla sürekli bir şeyler tartışıyoruz. Ve sadece derslerime katılan öğrencilerle bu tür konuşmalar pek yaygın değil. Yine de bunun daha sık olmasını dilerdim. Mesai saatleri içerisinde fakülteye gelmekten korktuklarını düşünüyorum. Her dönem bazı öğrenciler bu psikolojik engeli aşmayı başarıyor ve onlarla dersten sonra konuşmak her zaman çok ilginç oluyor. Doğru, eğer tüm öğrenciler bu kadar cesur olsaydı, benim yeterli zamanım olmazdı. Yani belki de her şey olması gerektiği gibi çalışıyor. 

Vitali: Öğrencilerle iletişim kurmaya nasıl zaman ayırıyorsunuz? Bildiğim kadarıyla ABD'de öğretmenlerin çok işi var; hibe başvurusu ve benzeri. 

Michael: Açıkçası öğrencilerle çalışmak işimin en keyif aldığım yönü. Yani bunun için yeterli motivasyonum var. Ofisimde geçirdiğim zamanın çoğu her türlü toplantıya harcanıyor. Artık yaz geldi, dolayısıyla programım daha az yoğun ama okul yılı boyunca her gün saat 9'dan 17'ye kadar her şeyi paketliyorum. Araştırma çalışmaları, incelemeler, hibeler - tüm bunlar için sadece akşamlar ve hafta sonları var. 

Yeni ders ve kitapların hazırlanmasına nasıl ayak uydurulur?

Alex: Uzun süredir verdiğiniz dersleri şu anda vermeye devam ediyor musunuz? Bilgisayar Bilimine giriş gibi bir şey.

Michael: Burada akla gelen ilk şey programlama dilleri dersidir. 

Alex: Bu dersin bugünkü versiyonu 10, 20, 30 yıl öncesinden ne kadar farklı? Belki burada daha ilginç olan belli bir gidişatın ayrıntıları değil, genel eğilimlerdir.

Michael: Programlama dilleri dersim, onu oluşturduğum dönemde biraz alışılmadıktı. 1980'lerin sonunda meslektaşım Doug Baldwin'in yerine geçerek okumaya başladım (Doug Baldwin). Kursun konusu uzmanlık alanımla sadece yüzeysel olarak ilgiliydi ama o gittiğinde dersi öğretecek en iyi aday bendim. O zamanlar var olan ders kitaplarının hiçbirini beğenmedim, bu yüzden bu dersin ders kitabını kendim yazmaya karar verdim. (Editörün notu: kitaptan bahsediyoruz "Programlama Dili Edimbilimi") Şu anda dünya çapında 200'den fazla üniversitede kullanılmaktadır. Benim yaklaşımım, dil tasarımı ve uygulama sorunlarını kasıtlı olarak karıştırması ve olası tüm alanlarda bu yönler arasındaki etkileşime büyük önem vermesi nedeniyle alışılmadık bir yaklaşımdır. Birçok temel kavram gibi temel yaklaşım da değişmeden kaldı: soyutlamalar, ad alanları, modülerlik, türler. Ancak bu kavramların gösterildiği dil seti tamamen değişti. Ders ilk oluşturulduğunda Pascal'da pek çok örnek vardı ama bugün birçok öğrencim bu dili duymamış bile. Ama Swift, Go, Rust'ı biliyorlar o yüzden bugün kullanılan dillerden bahsetmem gerekiyor. Ayrıca, öğrenciler artık kodlama dilleri konusunda oldukça bilgili, ancak bu dersi vermeye başladığımda konu tamamen derlenmiş dillerle ilgiliydi. Artık Python, Ruby ve hatta Perl hakkında çok fazla materyale ihtiyacımız var, çünkü günümüzde kodlar bu şekilde yazılıyor ve bu dillerde, dil tasarımı alanı da dahil olmak üzere pek çok ilginç şey oluyor. 

Vitali: O zaman bir sonraki sorum bir öncekiyle bağlantılı olacak. Bu alanda nasıl ayakta kalınır? Bunun gibi bir kursu güncellemenin çok fazla çalışma gerektirdiğinden şüpheleniyorum; yeni dilleri anlamanız, ana fikirleri anlamanız gerekiyor. Bunu nasıl yapıyorsun?

Michael: Her zaman %100 başarılı olduğum için övünemem. Ama çoğu zaman herkesin yaptığını yapıyorum: İnternet'i okuyorum. Rust'u anlamak istersem Google'da ararım, Mozilla sayfasına giderim ve orada yayınlanan kılavuzu okurum. Bu, ticari gelişimde meydana gelen şeylerin bir parçasıdır. Bilimden bahsediyorsak o zaman ana konferanslardaki raporları takip etmeniz gerekiyor. 

İş dünyası ve akademi arasındaki bağlantı

Vitali: İşletme ve bilimsel araştırma arasındaki bağlantıdan bahsedelim. Çalışma listenizde önbellek tutarlılığıyla ilgili birkaç makale buldum. Önbellek tutarlılığı algoritmalarının yayınlandıkları sırada kararsız olduğunu anlıyorum. Ya da yeterince yaygın değil. Fikirleriniz pratikte ne kadar yaygındı?

Michael: Hangi yayınlardan bahsettiğinizden tam olarak emin değilim. Öğrencilerim Bill Bolosky ile epeyce çalışma yaptım (William Bolosky) ve Leonidas Kontotanassis (Leonidas Kontothanassis) 1990'ların başında Neumann makinelerinin bellek yönetimi üzerine. O zamanlar, iş dünyası çok işlemcili bir sistemin nasıl düzgün bir şekilde oluşturulacağına dair henüz bir anlayışa sahip değildi: uzak belleğe donanım düzeyinde erişim için destek oluşturmaya değer mi, belleği dağıtmaya değer mi, önbelleği uzak hafızaya mı yoksa ameliyathane sisteminde sayfaları taşımak mı gerekiyor? Bill ve Leonidas bu alanda çalıştılar ve uzaktan önbellek yüklemesi olmayan yaklaşımları araştırdılar. Bu doğrudan önbellek tutarlılığıyla ilgili değildi, ancak yine de NUMA bellek yönetimi üzerinde çalışıyordu ve daha sonra modern işletim sistemlerinde sayfa yerleştirmeye yönelik modern yaklaşımlar bundan doğdu. Genel olarak Bill ve Leonidas, bu alanda en etkili olmasalar da önemli işler yaptılar; o zamanlar aynı şey üzerinde çalışan birçok kişi daha vardı. Daha sonra donanımsal işlem belleği bağlamında önbellek tutarlılığı ile ilgili bir konu üzerinde çalıştım. Bu sorun üzerinde birlikte çalıştığım grup birçok patent aldı. Bunların arkasında oldukça ilginç fikirler var ama bunların pratikte uygulanacağını düşünmüyorum. Öyle ya da böyle, karlılıklarını yargılamak benim için zor. 

Alex: Bu bağlamda daha kişisel bir soru: Fikirlerinizin hayata geçirilmesi sizin için ne kadar önemli? Yoksa düşünmüyor musun?

Michael: Fakülteye katılmak isteyen diğer kişilerle, adaylarla veya adaylarla yaptığım röportajlarda bu soruyu sormayı seviyorum. Bu sorunun doğru bir cevabı olduğunu düşünmüyorum. Harika şeyler yapan insanların çok farklı motivasyonları olabilir. Sorunlar ilgimi çekiyor çünkü onları kişisel olarak ilginç buluyorum, pratik faydalarından dolayı değil. Ama öte yandan, ilginç bir şey hala uygulama bulduğunda, bundan gerçekten hoşlanıyorum. Yani burada işler kolay değil. Ancak işimin başında hâlâ dünyadaki nihai kullanım fikrinden değil, fikrin uyumundan ve onu keşfetme ve ondan ne çıkacağını görme arzusundan etkileniyorum. Sonunda pratik sonuçlar verirse harika. 

Alex: Eğitiminiz ve deneyiminiz nedeniyle, diğer insanların fikirlerinin değerini çoğu kişiden daha iyi değerlendirebilirsiniz. Bunları karşılaştırabilir ve hangisinin hangisiyle daha iyi çalıştığını belirleyebilirsiniz. Eminim şu anda Intel gibi büyük üreticiler tarafından pratikte kullanılan şeyler hakkında bir fikriniz vardır. Sizce bu şirketlerin izlediği yol ne kadar doğru?

Michael: Uygulama her zaman ticari olarak başarılı olabilecek, yani kâr yaratabilecek şeyler etrafında döner ve bunu başka birine sorsanız iyi olur. Çalışmalarım çoğunlukla yayınlarla sonuçlanıyor ve işletim sistemleri alanında bunlar hız, enerji tüketimi, kod boyutu gibi performans göstergelerine göre değerlendiriliyor. Ancak bana her zaman bu ampirik sonuçların makalelere yalnızca yayınlanabilsinler diye eklendiği ve insanların gerçek çalışma motivasyonlarının estetik olduğu gibi geldi. Araştırmacılar çözümleri sanatsal bir bakış açısıyla değerlendirir, fikirlerin ne kadar zarif olduğuna önem verir ve mevcut yaklaşımlardan daha iyi bir şey yaratmaya çalışırlar. Araştırmacılar kişisel, öznel ve estetik güdülerle hareket ediyor. Ancak bunu makalenin kendisinde yazamazsınız, bunlar program komitesinin argümanları değildir. Neyse ki zarif çözümler çoğu zaman hızlı ve ucuzdur. Ben ve bir düzine meslektaşım yaklaşık 15 yıl önce bu konuyu tartıştık ve sonunda bu konu hakkında bir makale yazdık. Sanırım şimdi hala bulabilirsin, buna denir "Sistem araştırması nasıl değerlendirilmelidir?" ya da buna benzer bir şeyin, bir düzineden fazla yazarı var. Bu, benim de yazarı olduğum tek makaledir. Sasha Fedorovayani yayın listemde adını aratırsanız ihtiyacınız olanı bulacaksınız. Sistem araştırmalarının değerlendirilmesinden ve zarafetin ne kadar önemli olduğundan bahsediyor. 

Alex: Yani bilimde ve iş dünyasında neyin iyi kabul edildiğine dair standartlar arasında bir fark var. Bilim performansı, güç tüketimini, TDP'yi, uygulama kolaylığını ve çok daha fazlasını değerlendirir. Üniversitede bu tür araştırma yapma imkanınız var mı? Deneyler yapabileceğiniz, farklı makinelere ve farklı mimarilere sahip bir laboratuvarınız var mı?

Michael: Evet, bölümümüzde birbirinden ilginç birçok makine var. Çoğunlukla küçüktürler, küçük bir kümemiz ve farklı hızlandırıcılara sahip birçok çok işlemcili sistemimiz vardır. Buna ek olarak kampüste, onlarca farklı disiplinden bilim insanına hizmet veren devasa bir bilgi işlem merkezi bulunmaktadır. Yaklaşık bin düğümü ve yirmi bin çekirdeği var ve tamamı Linux'ta. İhtiyaç duyulması halinde her zaman AWS satın alabilirsiniz. Dolayısıyla donanım konusunda önemli bir kısıtlamamız yok. 

Alex: Otuz yıl önce nasıldı? O zaman sorunlar mı vardı?

Michael: O zamanlar biraz farklıydı. 1980'lerin ortalarından sonuna kadar bilimin bilgi işlem kaynakları açısından yetersiz olduğu düşünülüyordu. Bu durumu düzeltmek için Ulusal Bilim Vakfı (Ulusal Bilim Vakfı) koordineli bir deneysel araştırma programı oluşturdu (Koordineli Deneysel Araştırma, CER). Programın misyonu Bilgisayar Bilimleri bölümlerine bilgi işlem altyapısı sağlamaktı ve önemli bir değişime imza attı. Onun sağladığı parayla biz Rochester Üniversitesi'nde 1984 yılında 128 knot'luk bir BBN Butterfly satın aldık, bu benim oraya gelmemden bir yıl önceydi. O zamanlar dünyanın en büyük paylaşımlı belleğe sahip çok işlemcili sistemiydi. Her biri ayrı bir anakartta bulunan 128 işlemciye sahipti ve dört rafı kaplıyordu. Her işlemcinin bir megabayt belleği vardı, 128 megabayt RAM o zamanlar hayal bile edilemeyecek bir miktardı. Bu makinede ilk kez MCS kilitlemeyi uyguladık. 

Alex: Peki, eğer sizi doğru anladıysam şu anda donanımdaki sorun çözüldü mü? 

Michael: Genel olarak evet. Birkaç uyarımız var: Birincisi, bilgisayar mimarisini çip düzeyinde yapıyorsanız bunu akademik ortamda yapmak zordur çünkü iş dünyasında bunu yapmak için çok daha iyi araçlar vardır. 10 nanometreden küçük bir şeye ihtiyacınız varsa onu başkasından sipariş etmeniz gerekecek. Bu alanda Intel'de araştırmacı olmak çok daha kolay. Çipler veya katı hal bellek üzerinde optik iletişim üzerinde çalışıyorsanız, iş dünyasında henüz bilimde yer almayan teknolojiler bulacaksınız, bu nedenle ittifaklar oluşturmanız gerekir. Örneğin Stephen Swanson (Steven Kuğu) oluşturuldu böyle bir ortaklık yeni bellek teknolojileri için. Bu form her zaman işe yaramıyor ancak bazı durumlarda oldukça başarılı olabiliyor. Ayrıca bilimde en güçlü bilgi işlem sistemlerinin geliştirilmesi daha zordur. Şu anda ABD, Japonya ve Çin'deki en büyük süper bilgisayar projelerinin tümü iş odaklıdır. 

Fikirlerin pratik uygulaması. MCS, MS, CLH, JSR 166, Doug Lee ve daha fazlasıyla çalışıyor.

Vitali: Senkronizasyon algoritmaları üzerinde çalışmaya nasıl başladığınızdan zaten bahsetmiştiniz. Hakkında çok ünlü iki makaleniz var MCS engelleme и Michael-Scott kuyruğu (MS)bir anlamda Java'da uygulandı. (Editörün notu: tüm yayınlar izlenebilir по ссылке). Orada bu engelleme bazı değişikliklerle uygulandı ve ortaya çıktı CLH kilidive sıra amaçlandığı gibi uygulandı. Ancak makalelerinizin yayınlanması ile pratikte uygulanması arasında uzun yıllar geçti. 

Alex: Sıra durumunda yaklaşık 10 yıl gibi görünüyor.

Michael: Bu özellikler Java standart kütüphanesinde görünmeden önce mi?

Vitali: Evet. Bunu gerçekleştirmek için ne yaptınız? Yoksa hiçbir şey yapmadılar mı?

Michael: Size MS Queue'nun Java 5'e nasıl girdiğini anlatabilirim. Ortaya çıkmadan birkaç yıl önce, Mark Moyers'ın grubuyla Sun Microsystems'in Boston yakınlarındaki laboratuvarlarında çalıştım. Şirketlerine satabileceği konuları bulmak istediği için çoklu iş parçacıklı kullanımda ilginç sorunlar üzerinde çalışan tanıdığı kişiler için bir atölye çalışması düzenledi. Doug Lea ile ilk orada tanıştım. Doug, ben ve Sun'dan yaklaşık 25 kişi birlikte Doug'ın sunumunu tartışıyorduk. 166, daha sonra Java.util.concurrent haline geldi. Yol boyunca Doug, MS kuyruğunu kullanmak istediğini ancak bunun için arayüz için kuyrukta bulunan öğelerin sayısı için bir sayaca ihtiyacı olduğunu söyledi. Yani bunun ayrı bir yöntemle, atomik, doğru ve hızlı yapılması gerekiyordu. Düğümlere basitçe seri numaraları eklemeyi, ilk ve son düğümün numarasını alıp birini diğerinden çıkarmayı önerdim. Doug başını kaşıdı, "neden olmasın" dedi ve sonunda bunu yaptı. Bu yaklaşımı kütüphanede uygulamayı tartıştık ama Doug işin çoğunu kendisi yaptı. Sonuç olarak Java'da mükemmel çoklu iş parçacığı desteği sağlamayı başardı. 

Alex: Yani, eğer doğru anladıysam, .size() yönteminin standart kuyruk arayüzünün bir parçası olması ve algoritmik karmaşıklığının O(1) olması gerekirdi.

Michael: Evet ve buna ek olarak ayrı bir sayaç gerekmektedir.

Alex: Çünkü Java'da .size() yöntemini çağırırsanız, sonucun koleksiyonun gerçek boyutuna bağlı değil, hemen kullanılabilir olması beklenir. Anladım, teşekkür ederim.

Michael: Birkaç yıl sonra öğrencim Bill Scherer ile ikili veri yapıları üzerinde çalışıyordum - aslında bundan bahsedeceğim. Hydra hakkında rapor. Doug bize geldi ve bunları Java Executor Framework'te kullanabileceğini söyledi. Bill ile birlikte adil ve adil olmayan kuyruklar olarak adlandırılan iki uygulama oluşturdular. Gerçek kodun yazılmasına katılmasam da onlara bu proje hakkında tavsiyelerde bulundum. Sonuç olarak, uygulayıcıların hızı önemli ölçüde arttı. 

vladimir: Algoritmalarınızın yanlış uygulamalarıyla veya yeni özellikler ekleme talepleriyle karşılaştınız mı? Genel olarak uygulama teoriyle örtüşmelidir, ancak çoğu zaman farklılık gösterirler. Diyelim ki bir algoritma yazdınız ve kağıt üzerinde çalışıyor, ancak uygulamada yer alan kişiler sizden daha fazla özellik veya algoritmada bir tür değişiklik yapmanızı istemeye başladı. Hiç böyle durumlar yaşadınız mı?

Michael: Birisinin bana gelip “nasıl uygulayacağımı” sorduğu tek örnek, daha önce de bahsettiğim Doug'ın sorusuydu. Ancak pratik ihtiyaçlara uyacak şekilde ilginç değişikliklerin yapıldığı birkaç durum da olmuştur. Örneğin, IBM'deki K42 ekibi MCS kilidini dönüştürdü ve onu standart bir arayüz haline getirdi; böylece kuyruk düğümünü alma ve bırakma rutinleri için ileri geri geçirmeye gerek kalmadı. Bu standart arayüz sayesinde teoride güzel olan bir fikir pratikte çalışmaya başladı. Bu konuda hiçbir makale yayınlamamaları ve patent almalarına rağmen daha sonra bundan vazgeçmeleri şaşırtıcı. Fikir harikaydı ve mümkün olduğunca bunun hakkında konuşmaya çalışıyorum. 

İnsanların yayınladığım algoritmalarda iyileştirmeler yaptığı başka durumlar da oldu. Örneğin, MS kuyruğunun iki adımlı bir kurulum mekanizması vardır; bu, kuyruğun kritik yolunda iki CAS'ın olduğu anlamına gelir. Eski arabalarda CAS oldukça pahalıydı. Intel ve diğer üreticiler yakın zamanda bunları oldukça iyi bir şekilde optimize ettiler, ancak bir zamanlar bunlar 30 döngülük talimatlardı, bu nedenle kritik yolda birden fazla talimat olması istenmeyen bir durumdu. Sonuç olarak, MS kuyruğuna benzeyen ancak kritik yolda yalnızca bir atomik işlemi olan farklı bir kuyruk geliştirildi. Bu, belirli bir süre boyunca operasyonun O(1) yerine O(n) zaman alabileceği gerçeği nedeniyle başarıldı. Pek olası değildi ama mümkündü. Bunun nedeni, belirli anlarda algoritmanın kuyruğu baştan itibaren bu kuyruktaki mevcut konuma geçmesiydi. Genel olarak algoritmanın çok başarılı olduğu ortaya çıktı. Bildiğim kadarıyla çok yaygın olarak kullanılmıyor, bunun nedeni kısmen atomik operasyonların eskisinden önemli ölçüde daha az kaynak gerektirmesi. Ama fikir harikaydı. Ayrıca Oracle'dan Dave Dice'ın çalışmalarını da gerçekten seviyorum. Yaptığı her şey çok pratik ve demiri çok akıllıca kullanıyor. NUMA uyumlu senkronizasyon algoritmalarının ve çok iş parçacıklı veri yapılarının çoğunda parmağı vardı. 

vladimir: Algoritma yazarken veya öğrencilere ders verirken çalışmanızın sonucu hemen görülmez. Topluluğun, örneğin yeni bir makaleye alışması için biraz zamana ihtiyacı var. Yeni algoritma hemen uygulama bulmuyor. 

Michael: Makalenin önemli olup olmayacağı hemen belli değil. Konferanslarda ödül kazanan makaleler üzerine bir çalışma yapmanın ilginç olacağını düşünüyorum. Yani, program komitelerindeki kişilerin bir zamanlar en iyi olduğunu düşündüğü makalelere bakın. Bağlantı sayısına ve iş dünyası üzerindeki etkisine göre bu makalelerin 10, 20, 25 yıl içinde gerçekten ne kadar etkili olduğunu hesaplamaya çalışmalısınız. İkisi arasında güçlü bir korelasyon olacağından şüpheliyim. Sıfır olmayacak ama büyük olasılıkla istediğimizden çok daha zayıf olacak. Pek çok fikir yaygınlaşmadan önce uzun süre sahiplenilmeden kalır. Örneğin işlem hafızasını ele alalım. Orijinal makalenin yayınlandığı tarihten, insanların gerçekten onunla makineler yapmaya başlamasına kadar 10 yıldan fazla zaman geçti. Ve bu hafızanın ticari ürünlerde ortaya çıkmasından önce - ve hepsi 20. Çok uzun bir süre boyunca kimse makaleye dikkat etmedi ve ardından ona olan bağlantıların sayısı keskin bir şekilde arttı. Bunu önceden tahmin etmek zor olacaktır. Öte yandan bazen fikirler hemen uygulamaya konur. Birkaç yıl önce, DISC için Joe Izraelevitz ile birlikte, kalıcı veri yapılarını çalıştıran bilgisayar çöktükten sonra kullanılabilecek yeni bir resmi geçerlilik tanımı öneren bir makale yazdım. Makaleyi başından beri beğendim ama beklediğimden çok daha popüler olduğu ortaya çıktı. Birkaç farklı grup tarafından kullanıldı ve sonunda kalıcılık yapılarının standart tanımı haline geldi. Bu elbette güzel.

vladimir: Değerlendirmede kullandığınız teknikler var mı? Makalelerinizi ve öğrencilerinizi değerlendirmeye çalışıyor musunuz? Öğrettiğiniz kişinin doğru yöne gidip gitmediği açısından.

Michael: Herkes gibi ben de şu anda yaptığım işe daha çok dikkat ediyorum. Yine herkes gibi ben de ara sıra Google Akademik'e geçmiş makalelerimden alıntı yapılıp yapılmadığını kontrol ediyorum ama bu daha çok meraktan kaynaklanıyor. Çoğunlukla öğrencilerimin şu anda yaptıklarıyla ilgileniyorum. Mevcut çalışmaların değerlendirilmesi söz konusu olduğunda, bunun bir kısmı estetik kaygılar, neyin zarif olduğu ve neyin olmadığıdır. Ve günlük düzeyde açık sorular büyük bir rol oynamaktadır. Örneğin bir öğrenci bana bazı sonuçların grafiğiyle geliyor ve biz grafiğin bazı tuhaf davranışlarının nereden geldiğini anlamaya çalışıyoruz. Genel olarak çalışmalarımızda henüz anlamadığımız şeyleri sürekli anlamaya çalışıyoruz. 

İşlemsel bellek

Vitali: Belki biraz işlemsel hafızadan bahsedebiliriz?

Michael: En azından biraz söylemeye değer olduğunu düşünüyorum çünkü buna çok emek verdim. Bu, diğerlerinden daha fazla yayınım olan bir konudur. Ancak aynı zamanda, tuhaf bir şekilde, işlemsel hafıza konusunda her zaman çok şüpheciydim. Bence, Herlihy ve Moss'un makalesi (M. Herlihy, J. E. B. Moss) zamanından önce yayımlandı. 1990'ların başlarında, işlemsel belleğin yetenekli programcıların çok iş parçacıklı veri yapıları üzerinde çalışmasına yardımcı olabileceğini, böylece bu yapıların daha sonra sıradan programcılar tarafından kütüphane olarak kullanılabileceğini öne sürdüler. Yani, Doug Lee'nin JSR 166'sını yapmasına yardımcı olacaktı. Ancak işlemsel belleğin amacı çok iş parçacıklı programlamayı kolaylaştırmak değildi. Ancak 2000’li yılların başında yaygınlaşmaya başlayınca tam olarak bu şekilde algılanmaya başlandı. Paralel programlama sorununu çözmenin bir yolu olarak ilan edildi. Bu yaklaşım bana her zaman umutsuz gelmiştir. İşlemsel bellek yalnızca paralel veri yapılarının yazılmasını kolaylaştırabilir. Bana öyle geliyor ki, başardığı şey bu. 

Çok iş parçacıklı kod yazmanın zorluğu hakkında

Alex: Çok ilginç. Sıradan programcılarla çok iş parçacıklı kod yazabilenler arasında belli bir engel var gibi görünüyor. Geçen yıl, bazı algoritmik çerçeveleri uygulayan insanlarla birkaç kez konuştum. Örneğin, Martin Thomson'un yanı sıra çok iş parçacıklı kütüphaneler üzerinde çalışan programcılarla. (Editörün notu: Martin Thompson çok ünlü bir geliştiricidir, diye yazdı Disruptor и Aeron. Ve o da var rapor Joker 2015 konferansımızda video kaydı YouTube'da mevcut. O aynı açıldı bu konferans açılış konuşması kaydı Ayrıca mevcut). Onlara göre asıl zorluk, algoritmaları hem hızlı hem de kullanımı kolay hale getirmek. Yani bu engeli aşmaya ve mümkün olduğu kadar çok insanı bu alana çekmeye çalışıyorlar. Bunun hakkında ne düşünüyorsun?

Michael: Çoklu iş parçacığının temel sorunu budur: sistemin karmaşıklığını arttırmadan yüksek performansa nasıl ulaşılacağı. 

Alex: Çünkü karmaşıklıktan kaçınmaya çalıştıklarında algoritma daha az evrensel hale geliyor.

Michael: Buradaki anahtar, uygun şekilde tasarlanmış soyutlamalardır. Bana öyle geliyor ki, bir alan olarak bilgisayar sistemleri için genellikle ana şey budur. Butler Lampson bu terimi kullanmayı seviyor ve bizi "soyutlama tüccarları" olarak adlandırıyor. Günümüzde basit teknolojiler mevcut değil. Kullandığımız işlemcilerde 10 milyar transistör var; basitlik söz konusu bile olamaz. Aynı zamanda ISA, işlemciden çok daha basittir, çünkü ona yüksek performans ve nispeten basit bir arayüz sağlamak için çok uzun süre çalıştık. Ama onda da her şey yolunda değil. Aynı sorun şu anda piyasada görünen hızlandırıcılarda da yaşanıyor. GPU, şifreleme mekanizması, sıkıştırma, kod dönüştürme mekanizması, doğrusal cebir mekanizması ve hatta daha esnek bir FPGA için doğru arayüzün nasıl oluşturulacağı gibi sorular ortaya çıkıyor. Aracın kullanımını kolaylaştıran ve karmaşıklığı gizleyen bir arayüz nasıl oluşturulur? Ondan kurtulmaz, bunun yerine onu basit bir programcıdan gizler. 

Alex: Anladığım kadarıyla soyutlamaları anlama konusunda hala bir engelimiz var. Bellek modelini ele alalım; bilim ve teknolojinin gelişme aşamasına geldiğimizde temel soyutlamalardan biri de budur. Bu sayede tüm programcılar iki gruba ayrılır: büyük kısım bunu anlamayanlar ve daha küçük kısım ise anlayanlar veya anladığını düşünenlerdir. 

Michael: Bu iyi bir soru; herhangi birimiz hafıza modelini gerçekten anlıyor mu?

Vitali: Özellikle C++'da.

Michael: Bir ara Hans Boehm'la konuşun. Tanıdığım en zeki insanlardan biri, hafıza modelleri konusunda önde gelen bir uzman. Anlamadığı çok şey olduğunu size hemen söyleyecektir. Ancak soyutlamalar konusuna dönersek, bence son 30 yılda hafıza modelleri alanında en önemli fikir dile getirildi. Sarita Adve'nin tezinde. (Editörün notu: yayınların tam listesi mevcuttur по ссылке).

Alex: Sorum şu: Bu engel kavramın doğasından mı kaynaklanıyor? 

Michael: HAYIR. Sarita, doğru yaklaşımla tüm karmaşıklığı başarılı bir şekilde gizleyebileceğiniz, yüksek performans elde edebileceğiniz ve programcıya basit bir API verebileceğiniz sonucuna vardı. Ve bu API'yi takip ederseniz tutarlı bir tutarlılık elde edebilirsiniz. Bunun doğru model olduğunu düşünüyorum. Veri yarışları olmadan kod yazın ve sıralı tutarlılık elde edin. Elbette yarışma olasılığını azaltmak için özel aletlere ihtiyaç var ama bu başka bir konu. 

vladimir: Kariyerinizde çözülmüş gibi görünen bir sorunun bir anda felakete dönüştüğü ya da bu sorunun çözülemez hale geldiği zamanlar oldu mu? Örneğin, teoride herhangi bir sayıyı çarpanlara ayırabilir veya herhangi bir sayının asal olup olmadığını belirleyebilirsiniz. Ancak pratikte bunu yapmak zor olabilir; mevcut donanımla sayıları çarpanlarına ayırmak zordur. Sizin başınıza da benzer bir şey geldi mi?

Michael: Öyle bir şeyi hemen hatırlamıyorum. Bana belli bir alanda yapacak hiçbir şey kalmamış gibi göründüğü zamanlar oldu ama sonra orada yeni ve ilginç bir şey oldu. Mesela sınırsız kuyruk alanının artık olgunluğa ulaştığını düşünüyordum. MNS kuyruğunda yapılan birkaç iyileştirmeden sonra artık pek bir şey olmadı. Ve sonra Morrison (Adam Morrison) ve Afek (Yehuda Afek) icat etti LCRQ kuyruğu. Sınırsız çok iş parçacıklı bir kuyruğun mümkün olduğu ve çoğu zaman kritik yolda yalnızca getir ve artır komutunun bulunduğu açık hale geldi. Ve bu, çok daha iyi bir performansa ulaşmayı mümkün kıldı. Getir ve artırmanın çok yararlı bir şey olduğunu bilmediğimizden değil. Eric Freudenthal, 1980'lerin sonlarında Allan Gottlieb ile birlikte Ultrabilgisayar üzerine yaptıkları çalışmada bundan bahsetmişti, ancak konu sınırlı kuyruklarla ilgiliydi. Morrison ve Afek, sınırsız bir kuyrukta getir ve artır özelliğini kullanabildiler.

Yeni mimariler. İşlemsel hafızanın zaferi yakın mı?

vladimir: Algoritmalara faydalı olabilecek yeni mimari çözümler mi arıyorsunuz? 

Michael: Elbette hayata geçirilmesini istediğim birçok şey var. 

vladimir: Mesela ne tür?

Michael: Öncelikle Intel ve IBM işlemcilerindeki donanım düzeyindeki işlemsel belleğimize birkaç basit uzantı. Özellikle, yeni oluşan işlemsel olmayan yükün ve mağazanın işlemler içinde hemen kullanılabilir olmasını istiyorum. Bunlar hemen önce olur dizisinde döngülere yol açar, dolayısıyla zor olabilirler. Ancak soyutlama katmanlarını korursanız, işlem gerçekleşirken dışında yapabileceğiniz çok sayıda ilginç şey vardır. Bunun uygulanmasının ne kadar zor olacağını bilmiyorum ama çok faydalı olacaktır. 

Bir başka yararlı şey de uzak bellekten önbellek yüklemektir. Er ya da geç bunun gerçekleşeceğini düşünüyorum. Bu teknoloji, ayrıştırılmış belleğe sahip sistemlerin oluşturulmasına olanak sağlayacaktır. Örneğin 100 terabaytlık kalıcı belleği bir rafta tutmak mümkün olabilir ve işletim sisteminin kendisi, bu belleğin hangi bölümlerinin işlemcilerin fiziksel adres alanına karşılık gelmesi gerektiğine dinamik olarak karar verecektir. Bu, bulut bilişim için son derece yararlı olacaktır çünkü ihtiyaç duyulan görevlere büyük miktarlarda bellek sağlanmasına olanak sağlayacaktır. Birisinin bunu yapacağını düşünüyorum.

Vitali: İşlemsel bellek konusunu bitirirken bu konuyla ilgili bir sorum daha olacak. İşlemsel bellek sonunda standart çok iş parçacıklı veri yapılarının yerini alacak mı?

Michael: HAYIR. İşlemler spekülatif bir mekanizmadır. Programlama düzeyinde bunlar atomik kilitlerdir, ancak içeride spekülasyonlardır. Bu tür tahminler, tahminlerin çoğunun doğru olması durumunda işe yarar. Bu nedenle, işlem belleği, iş parçacıkları birbirleriyle neredeyse hiç etkileşime girmediğinde iyi çalışır ve yalnızca hiçbir etkileşim olmadığından emin olmanız gerekir. Ancak bir mesaj diziler arasında başlarsa işlemlerin pek faydası olmaz. Açıklayayım, işlemlerin atomik operasyonun tamamına sarıldığı durumdan bahsediyoruz. Çok iş parçacıklı veri yapılarının bileşenleri olarak hala başarıyla kullanılabilirler. Örneğin, üç kelimelik bir CAS'a ihtiyacınız varsa ve aynı anda yirmi iş parçacığıyla çalışan gerçek anlamda çok iş parçacıklı bir algoritmanın ortasında üç küçük şeyi birden çok iş parçacığına dönüştürmeniz gerekiyorsa. Genel olarak işlemler faydalı olabilir ancak çok iş parçacıklı veri yapılarının düzgün şekilde tasarlanması ihtiyacını ortadan kaldırmaz. 

Kalıcı bellek, Optane DIMM, ultra hızlı cihazlar.

Vitali: Bahsetmek istediğim son konu şu anki araştırmanızın konusu: kalıcı hafıza. Yakın gelecekte bu alanda neler bekleyebiliriz? Belki halihazırda var olan etkili uygulamaları biliyorsunuzdur? 

Michael: Donanım uzmanı değilim, sadece haberlerde okuduklarımdan ve meslektaşlarımın bana anlattıklarından biliyorum. Herkes Intel'in sattığını zaten duydu Optan DIMMDinamik RAM'e göre yaklaşık 3 kat daha fazla okuma gecikmesine ve 10 kat daha fazla yazma gecikmesine sahiptir. Yakında çok büyük hacimli versiyonları mevcut olacak. Birkaç terabayt bayt adreslenebilir RAM'e sahip bir dizüstü bilgisayarınıza sahip olabileceğinizi düşünmek komik. DRAM kullandığımız için muhtemelen 10 yıl içinde bu yeni teknolojiyi kullanmaya karar vereceğiz - sadece ses seviyesini artırın. Ancak enerji bağımsızlığı sayesinde önümüze tamamen yeni fırsatlar açılıyor. Bayt adreslenebilir çalışma belleği ile blok yapılı kalıcı bellek arasında hiçbir ayrım olmayacak şekilde depolama yığınını temelden değiştirebiliriz. Böylece, bir program çalıştırmasından diğerine aktarılması gereken her şeyi blok yapılı dosyalar halinde serileştirmemize gerek kalmayacak. Buradan işletim sistemlerini, çalışma zamanı ortamlarını ve dağıtılmış veri depolarını etkileyen birçok önemli ilkeyi çıkarabiliriz. Bu alanda çalışmak çok ilginç. Kişisel olarak tüm bunların neye yol açacağını tahmin etmek benim için zor ama buradaki sorunlar son derece eğlenceli. Burada devrim niteliğinde değişiklikler olabilir ve bunlar çok iş parçacıklı çalışmadan çok doğal olarak kaynaklanır, çünkü arıza giderme, sistemin normal işleyişinin yanında bir "çok iş parçacığı" işlemidir. 

Şu anda üzerinde çalıştığım ikinci ana konu, ultra hızlı cihazları yönetmek ve sistemsel politika kontrolü ile kullanıcı alanından cihazlara güvenli erişimi sağlamaktır. Son yıllarda cihaza erişimi kullanıcı alanına taşıma yönünde bir eğilim ortaya çıktı. Bunun nedeni, TCP-IP çekirdek yığınının, her 5 mikrosaniyede bir yeni pakete ihtiyaç duyan bir ağ arayüzü üzerinde çalışamaması; basitçe buna ayak uyduramamasıdır. Bu nedenle üreticiler cihazlara doğrudan erişim sağlar. Ancak bu, işletim sisteminin sürecin kontrolünü kaybettiği ve rakip uygulamalar için cihaza uygun erişimi sağlayamadığı anlamına gelir. Araştırma ekibimiz bu eksikliğin önlenebileceğine inanıyor. Bu ay USENIX ATC'de bununla ilgili bir makalemiz olacak. Uzun ömürlü bayt adreslenebilir kalıcı bellek, özünde, kullanıcı alanında erişilmesi gereken, ultra hızlı G/Ç'ye sahip bir cihaz olduğundan, kalıcılık üzerinde çalışmakla ilgilidir. Bu araştırma, mikro çekirdeklere, ekzo çekirdeklere ve işlevselliği işletim sistemi çekirdeğinden kullanıcı alanına güvenli bir şekilde taşımaya yönelik diğer geleneksel girişimlere yönelik yeni yaklaşımları mümkün kılmaktadır. 

vladimir: Bayt adreslenebilir bellek harikadır, ancak fiziksel bir sınırlama vardır: ışık hızı. Bu, cihazla etkileşimde kaçınılmaz olarak bir gecikme olacağı anlamına gelir. 

Michael: Kesinlikle doğru.

vladimir: Yeni yükleri karşılayacak yeterli kapasite olacak mı?

Michael: Bu mükemmel bir soru ama cevaplamak benim için zor olacak. Bellekte işlem yapma fikri bir süredir ortalıkta dolaşıyor, çok ilginç ama aynı zamanda da çok karmaşık. Bu alanda çalışmadım ama orada bazı keşifler yapılsaydı harika olurdu. Korkarım ekleyecek başka bir şeyim yok. 

vladimir: Bir sorun daha var. Yeni, önemli ölçüde daha büyük miktarda RAM'in CPU'ya sığması imkansız olacaktır. Bu nedenle fiziksel sınırlamalar nedeniyle bu RAM'in izole edilmesi gerekir. 

Michael: Her şey entegre devrelerin üretimindeki kusurların sayısına bağlıdır. Tamamen hatasız yarı iletken levhalar oluşturmak mümkün olsaydı, o zaman ondan bütün bir mikro devre yapmak mümkün olurdu. Ancak artık mikro devrelerin posta pullarından daha büyük nasıl yapılacağını bilmiyoruz. 

vladimir: Ama yine de çok büyük boyutlardan, yaklaşık santimetreden bahsediyoruz. Bunun kaçınılmaz olarak gecikme üzerinde etkisi vardır. 

Michael: Evet. Işık hızı konusunda yapabileceğiniz hiçbir şey yok. 

vladimir: Maalesef. 

Bir sonraki büyük trend. İkili veri yapıları. Hidra.

Vitali: Anladığım kadarıyla yeni trendleri çok çabuk yakalıyorsunuz. İşlemsel bellekte ilk çalışanlardan biriydiniz ve kalıcı bellekte ilk çalışanlardan biriydiniz. Bir sonraki büyük trendin ne olacağını düşünüyorsunuz? Ya da belki bu bir sırdır?

Michael: Dürüst olmak gerekirse bilmiyorum. Umarım yeni bir şey ortaya çıktığında fark edebilirim. Kendi başıma yeni bir alan icat edecek kadar şanslı olmadım ama biraz şansım oldu ve başkalarının yarattığı yeni alanlarda oldukça erken çalışmaya başlayabildim. Umarım gelecekte bunu başarabilirim.

Alex: Bu röportajın son sorusu Hydra'daki performansınız ve okuldaki faaliyetlerinizle ilgili olacak. Eğer doğru anladıysam okuldaki rapor engellemesiz algoritmalar hakkında, konferanstaki rapor ise çift veri yapıları hakkında olacak. Bu raporlar hakkında birkaç söz söyleyebilir misiniz?

Michael: Bu röportajımızda sizlerle kısmen bu konulara değinmiştik. Öğrencim Bill Scherer ile yaptığım çalışmayla ilgili. Bunun üzerine bir tez yazdı ve Doug Lee de buna katkıda bulundu ve sonunda Java kütüphanesindeki çok iş parçacıklı eşzamanlı kuyrukların bir parçası haline geldi. Veri yapısının engelleme olmadan okunup yazıldığını, yani her işlemin kritik yol üzerinde sınırlı sayıda talimata sahip olduğunu varsayalım. Boş bir kapsayıcıdan veri kaldırmaya çalışırsanız veya bu kapsayıcıda olmayan belirli verileri kaldırmaya çalışırsanız, bunun yapılamayacağı konusunda anında bilgilendirilirsiniz. Ancak iş parçacığının gerçekten bu verilere ihtiyacı varsa bu davranış kabul edilebilir olmayabilir. O zaman akla gelen ilk şey, sürekli olarak gerekli verilerin görünüp görünmediğini soracak bir döngü oluşturmaktır. Ama sonra diğer herkese müdahale var. Ek olarak, bu yaklaşımla 10 dakika bekleyebilirsiniz, ardından başka bir iş parçacığı gelecek ve önce yanlışlıkla gerekli verileri alacaktır. İkili veri yapılarının hala kilitleri yoktur ancak iş parçacıklarının düzgün şekilde beklemesine izin verirler. "Çift" terimi, yapının ya verileri ya da veri isteklerini içerdiği anlamına gelir; bunlara anti-veri diyelim. Yani boş bir kaptan bir şey almaya çalışırsanız bunun yerine konteynere bir istek konulacaktır. Artık iş parçacığı başka kimseyi rahatsız etmeden bir isteği bekleyebilir. Ek olarak veri yapısı, taleplere öncelik vererek bunları alındığında doğru kişiye iletir. Sonuç, hala resmi bir spesifikasyona sahip olan ve pratikte iyi bir performansa sahip, kilitlenmeyen bir mekanizmadır. 

Alex: Bu veri yapısından beklentileriniz neler? Tüm yaygın durumlarda performansı artıracak mı, yoksa belirli durumlar için daha mı uygun? 

Michael: Öncelikle kilitlemesiz bir konteynere ihtiyacınız varsa ve ikinci olarak, içinde olmayan konteynerden veri almanız gereken bir durumda beklemeniz gerekiyorsa kullanışlıdır. Bildiğim kadarıyla çerçevemiz bu iki koşul karşılandığında en uygun davranışı sağlar. Bu nedenle bu durumlarda kullanmanızı tavsiye ederim. Kilitsiz veri yapılarının temel avantajı performans sorunlarını önlemesidir. Ve eğer veriler bir iş parçacığından diğerine aktarılıyorsa, birçok algoritmada beklemek çok önemlidir.

Vitali: Açıklayayım: Hem okulda hem de konferansta aynı şeyden mi bahsedeceksiniz?

Michael: Okulda konuşacağım Genel olarak çok iş parçacıklı veri yapıları hakkında, temel ilkeler dersin başında özetlenmiştir. Seyircinin ipliklerin ne olduğunu bildiğini ve kilitlere aşina olduğunu varsayıyorum. Bu temel bilgiden yola çıkarak kilitsiz veri yapılarından bahsedeceğim. Bellek yönetimi gibi konulara değinerek bu alandaki en önemli sorunlara genel bir bakış sunacağım. MS kuyruğundan daha karmaşık bir şeyin olacağını düşünmüyorum.

Alex: Okuldaki dersinizin sonunda ikili veri yapılarını öğretmeyi planlıyor musunuz?

Michael: Bunlardan bahsedeceğim ama fazla zaman ayırmayacağım. Hydra raporu onlara ithaf edilecek. Sonunda Java'ya giren projenin yanı sıra LCRQ kuyruğunun ikili bir varyantını oluşturmak ve ikili veri yapıları için neredeyse evrensel bir tasarım oluşturmak için Joe Israelevich ile çalışmayı da kapsayacak.

Alex: Yani okuldaki ders yeni başlayanlar için önerilebilir ve Hydra'daki çift veri yapıları üzerine ders zaten deneyimi olan kişiler için önerilebilir mi?

Michael: Yanılıyorsam düzeltin, ancak Hydra'nın izleyici kitlesi oldukça çeşitli olacaktır; buna birçok Java uzmanı ve genel olarak çok iş parçacıklı programlamayla özel olarak ilgilenmeyen kişiler de dahildir. 

Vitali: Evet bu doğrudur.

Alex: En azından öyle umuyoruz.

Michael: Bu durumda, bu röportaja başlarken karşılaştığımız sorunla karşı karşıya kalacağım: hem teknik ayrıntılar açısından yeterince zengin hem de tüm dinleyiciler için erişilebilir bir raporun nasıl yapılacağı.

Vitali: Ders verdiğiniz gibi rapor mu vereceksiniz? Yani seyirciyle konuşup duruma uyum sağlamak mı istiyorsunuz?

Michael: Korkarım bu böyle gitmeyecek çünkü raporun slaytları olacak. Dinleyiciler başlangıçta farklı diller konuştuğunda slaytlar önemlidir. Pek çok insan, özellikle de çok hızlı konuşursam, beni İngilizce olarak anlamakta zorluk çekecektir. Bu konuları seçtim çünkü Peter Kuznetsov benden SPTDC Okulu'ndaki kilitsiz veri yapıları hakkında konuşmamı istedi; ve sonra bir Java kullanıcı grubu konferansı için bir rapora ihtiyacım vardı ve özellikle Java programcılarının ilgisini çekecek bir şey seçmek istedim. En kolay yol, Java kütüphanesinde şu ya da bu şekilde parmağımın olduğu şeyler hakkında konuşmaktı. 

Alex: Hydra'daki izleyicinin kilitsiz programlama hakkında zaten bir şeyler bildiğini ve belki de bu alanda biraz deneyimi olduğunu varsayıyoruz. Ancak bu sadece bir varsayım; durum konferansta netleşecek. Neyse, zaman ayırdığınız için teşekkürler. Röportajın okuyucularımız için oldukça ilgi çekici olacağına eminim. Çok teşekkürler!

Vitali: Teşekkürler 

Michael: Sizinle St. Petersburg'da tanıştığıma memnun olacağım. 

Alex: Bizim de güzel bir şehrimiz var. Hiç burada bulundun mu?

Michael: Hayır, Rusya'ya hiç gitmedim. Ama St. Petersburg her zaman henüz gitmediğim ama gerçekten gitmek istediğim yerler listesindeydi, bu yüzden davetten çok mutlu oldum. 

Alex: Bu arada konuşmacılara yönelik bir gezi programımız olacak. Röportaj için çok teşekkür eder, iyi günler dileriz!

Michael ile sohbetinize 2019-11 Temmuz 12 tarihlerinde St. Petersburg'da düzenlenecek olan Hydra 2019 konferansında devam edebilirsiniz. Raporla gelecek "İkili veri yapıları". Biletler satın alınabilir resmi web sitesinde.

Kaynak: habr.com

Yorum ekle