“Hasil empiris hanya untuk publikasi, motif sebenarnya dari karya tersebut adalah estetis.” Wawancara hebat dengan Michael Scott

“Hasil empiris hanya untuk publikasi, motif sebenarnya dari karya tersebut adalah estetis.” Wawancara hebat dengan Michael Scott Michael Scott - sudah tahun 34 sebagai profesor Ilmu Komputer di Universitas Rochester, dan di rumahnya di Universitas Wisconsin–Madison dia menjadi dekan selama lima tahun. Dia meneliti dan mengajar siswa tentang pemrograman paralel dan terdistribusi serta desain bahasa.

Dunia mengenal Michael dari buku teks "Pragmatika Bahasa Pemrograman", bagaimana dengan pekerjaan? "Algoritma untuk sinkronisasi terukur pada multiprosesor memori bersama" menerima Hadiah Dijkstra sebagai salah satu yang paling terkenal di bidang komputasi terdistribusi. Anda mungkin juga mengenalnya sebagai penulis algoritma tersebut Michael-Scott.

Bersama Doug Lee, dia mengembangkan algoritme non-pemblokiran dan antrean sinkron yang mendukung perpustakaan Java. Penerapan "struktur data ganda" di JavaSE 6 meningkatkan kinerja sebanyak 10 kali lipat ThreadPoolExecutor.

Isi:

  • Awal karir, Universitas Rochester. Proyek Charlotte, bahasa Lynx;
  • Antarmuka Koheren yang Dapat Diskalakan IEEE, penguncian MCS;
  • Bertahan hidup di dunia yang terus berubah;
  • Apakah siswa menjadi lebih bodoh? Tren global, internasionalisasi;
  • Pekerjaan yang efektif dengan siswa;
  • Bagaimana mengikuti persiapan kursus dan buku baru;
  • Hubungan antara bisnis dan akademisi;
  • Implementasi praktis dari ide-ide. MCS, MS, CLH, JSR 166, bekerja dengan Doug Lee dan banyak lagi;
  • Memori transaksional;
  • Arsitektur baru. Kemenangan memori transaksional sudah dekat;
  • Memori non-volatil, Optane DIMM, perangkat ultra-cepat;
  • Tren besar berikutnya. Struktur data ganda. Ular naga.

Wawancara dilakukan oleh:

Vitaly Aksenov — saat ini menjadi postdoc di IST Austria dan anggota Departemen Teknologi Komputer di Universitas ITMO. Melakukan penelitian di bidang teori dan praktik struktur data kompetitif. Sebelum bekerja di IST, ia menerima gelar PhD dari Paris Diderot University dan ITMO University di bawah pengawasan Profesor Peter Kuznetsov.

Alexey Fedorov - Produser di JUG Ru Group, sebuah perusahaan Rusia yang menyelenggarakan konferensi untuk pengembang. Alexei berpartisipasi dalam persiapan lebih dari 50 konferensi, dan resumenya mencakup segala hal mulai dari posisi insinyur pengembangan di Oracle (JCK, Java Platform Group) hingga posisi pengembang di Odnoklassniki.

Vladimir Sitnikov - Insinyur di Netcracker. Sepuluh tahun bekerja pada kinerja dan skalabilitas NetCracker OS, perangkat lunak yang digunakan oleh operator telekomunikasi untuk mengotomatisasi proses manajemen jaringan dan peralatan jaringan. Tertarik dengan masalah kinerja Java dan Oracle Database. Penulis lebih dari selusin peningkatan kinerja pada driver resmi PostgreSQL JDBC.

Awal karir, Universitas Rochester. Proyek Charlotte, bahasa Lynx.

Alexey: Pertama-tama, saya ingin memberi tahu Anda bahwa di Rusia kita semua sangat menyukai Ilmu Komputer, Ilmu Data, dan algoritme. Itu benar-benar tidak senonoh. Kami sudah membaca semuanya buku oleh Cormen, Leiserson dan Rivest. Oleh karena itu, konferensi mendatang, sekolah dan wawancara ini sendiri harusnya menjadi sangat populer. Kami menerima banyak pertanyaan untuk wawancara ini dari mahasiswa, programmer, dan anggota komunitas, jadi kami sangat berterima kasih atas kesempatan ini. Apakah Ilmu Komputer mendapatkan popularitas yang sama di AS?

Michael: Bidang kami sangat beragam, mempunyai banyak arah, dan mempengaruhi masyarakat dalam berbagai cara sehingga sulit bagi saya untuk memberikan jawaban yang pasti. Namun faktanya, hal ini telah membawa perubahan besar dalam bisnis, industri, seni, dan masyarakat secara umum selama 30 tahun terakhir.

Vitali: Mari kita mulai dengan sesuatu yang jauh. Di banyak universitas terdapat spesialisasi pada satu bidang tertentu. Bagi Universitas Carnegie Mellon ini adalah komputasi paralel, bagi MIT adalah kriptografi, robot, dan multithreading. Apakah ada spesialisasi seperti itu di University of Rochester?

Michael: Sejujurnya, menurut saya CMU dan MIT berspesialisasi di semua bidang. Departemen kami selalu menaruh perhatian besar pada kecerdasan buatan. Setengah dari orang-orang yang bekerja untuk kami terlibat dalam AI atau interaksi manusia-komputer - jumlah ini lebih tinggi dibandingkan departemen lain, dan selalu demikian. Namun ketika saya masih di universitas, saya tidak memiliki mata kuliah AI, dan saya tidak pernah bekerja di bidang ini. Jadi departemen saya mengkhususkan diri pada masalah yang tidak ada hubungannya dengan saya. Penghiburannya adalah masalah terpenting kedua bagi departemen kami adalah pemrograman paralel dan multi-thread, yaitu spesialisasi saya.

Vitali: Anda mulai bekerja di bidang Ilmu Komputer ketika bidang pemrograman multi-thread baru saja muncul. Daftar publikasi Anda menunjukkan bahwa karya pertama Anda membahas berbagai masalah yang cukup luas: manajemen memori dalam sistem multi-thread, sistem file terdistribusi, sistem operasi. Mengapa keserbagunaan seperti itu? Pernahkah Anda mencoba menemukan tempat Anda di komunitas riset?

Michael: Sebagai seorang mahasiswa, saya berpartisipasi dalam Proyek Charlotte di Universitas Wisconsin, tempat salah satu sistem operasi terdistribusi pertama dikembangkan. Disana saya bekerja sama dengan Rafael Finkel (Raphael Finkel) dan Marvin Sulaiman (Marvin Sulaiman). Disertasi saya dikhususkan untuk pengembangan bahasa untuk perangkat lunak sistem untuk sistem terdistribusi - sekarang semua orang sudah melupakannya, dan syukurlah. Saya membuat bahasa pemrograman Lynx, yang dimaksudkan untuk memudahkan pembuatan server untuk sistem operasi terdistribusi yang digabungkan secara longgar. Karena pada saat itu saya terutama terlibat dalam sistem operasi, saya berasumsi bahwa karir saya terutama berhubungan dengan mereka. Namun Rochester adalah universitas yang sangat kecil, dan oleh karena itu, berbagai kelompok di sana berinteraksi sangat erat satu sama lain. Tidak ada selusin sistem operasi lain yang bisa saya ajak bicara, jadi semua kontak saya adalah orang-orang yang bekerja di bidang yang sangat berbeda. Saya sangat menikmatinya, menjadi pemain serba bisa adalah keuntungan besar bagi saya. Jika kita berbicara secara khusus tentang struktur data multi-utas dan algoritma sinkronisasi, maka saya mulai mengerjakannya secara tidak sengaja.

Antarmuka Koheren yang Dapat Diskalakan IEEE, penguncian MCS.

Vitali: Bisakah Anda ceritakan lebih banyak tentang ini?

Michael: Ini adalah cerita lucu yang tidak pernah bosan saya ceritakan kepada semua orang. Itu terjadi di sebuah konferensi ASPLOS di Boston - saat itu terjadi pada akhir tahun 80an atau awal tahun 90an. John Mellor-Crummey (John Mellor-Crummey), lulusan fakultas kami. Saya kenal dia, tapi kami belum pernah melakukan penelitian bersama sebelumnya. Maria Vernon (Maria Vernon) dari Wisconsin memberikan ceramah tentang sistem multiprosesor yang mereka kembangkan di Wisconsin: Wisconsin Multikubus. Multicube ini memiliki mekanisme sinkronisasi pada tingkat perangkat keras yang disebut Q on Sync Bit, dan kemudian berganti nama menjadi Q on Lock Bit karena terdengar seperti keju Colby, yang merupakan pelesetan. Jika Anda tertarik dengan mekanisme multithreading, Anda mungkin tahu bahwa Colby akhirnya menjadi mesin sinkronisasi untuk standar IEEE Scalable Coherent Interface. Ini adalah mekanisme penguncian yang membuat penunjuk dari satu cache ke cache lainnya pada tingkat perangkat keras sehingga setiap pemegang kunci mengetahui giliran siapa sekarang. Ketika John dan saya mendengar tentang hal ini, kami saling memandang dan berkata: mengapa melakukan hal ini pada tingkat perangkat keras? Tidak bisakah hal yang sama dicapai dengan menggunakan perbandingan-dan-tukar? Kami mengambil salah satu buku catatan yang tergeletak di ruang kelas dan mencoret-coretnya pemblokiran MCS, sementara Mary melanjutkan laporannya. Selanjutnya kami terapkan, bereksperimen, idenya ternyata berhasil, dan kami menerbitkan artikelnya. Saat itu, bagi saya, topik ini sepertinya hanya selingan yang menyenangkan, setelah itu saya berencana untuk kembali ke sistem operasi. Namun kemudian masalah lain yang serupa muncul, dan akhirnya sinkronisasi, multithreading, dan struktur data menjadi spesialisasi saya. Seperti yang Anda lihat, ini semua terjadi secara tidak sengaja.

Vitali: Saya sudah lama mengenal pemblokiran MCS, namun sampai saat ini saya belum mengetahui bahwa itu adalah ulah Anda, dan tidak mengerti bahwa itu adalah akronim dari nama belakang Anda.

Bagaimana cara bertahan hidup di dunia yang terus berubah?

Alexey: Saya punya pertanyaan tentang topik terkait. 30 atau 40 tahun yang lalu terdapat lebih banyak kebebasan dalam berbagai spesialisasi. Jika Anda ingin memulai karir di multithreading atau sistem terdistribusi, silakan, jika Anda ingin masuk ke sistem operasi, tidak masalah. Di setiap area terdapat banyak pertanyaan terbuka dan sedikit pakar. Spesialisasi yang sempit kini telah muncul: tidak hanya ada pakar pada sistem operasi secara umum, ada juga spesialis pada sistem individual. Sama halnya dengan sistem multithreading dan terdistribusi. Namun masalahnya adalah hidup kita tidak ada habisnya; setiap orang hanya dapat menghabiskan beberapa dekade untuk melakukan penelitian. Bagaimana cara bertahan hidup di dunia baru ini?

Michael: Kami tidak istimewa dalam hal ini, hal serupa pernah terjadi di daerah lain. Saya beruntung bisa mulai bekerja di bidang Ilmu Komputer ketika bidang tersebut masih dalam masa “remaja”. Beberapa fondasi telah diletakkan, namun semuanya masih belum matang. Kesempatan ini tidak sering datang. Teknik elektro telah ada sejak lama, fisika bahkan lebih lama lagi, matematika hampir sejak permulaan zaman. Namun ini tidak berarti bahwa tidak ada lagi yang membuat penemuan menarik di bidang matematika. Masih banyak permasalahan yang belum terselesaikan, namun pada saat yang sama masih banyak yang perlu dipelajari. Anda benar jika mencatat bahwa saat ini terdapat lebih banyak spesialisasi daripada sebelumnya, namun ini hanya berarti bahwa kita berada dalam situasi yang sama dengan sebagian besar bidang aktivitas manusia lainnya.

Alexey: Saya tertarik pada aspek yang lebih praktis dari masalah ini di sini. Saya memiliki latar belakang matematika, dan selama studi saya sering menghadiri konferensi dan mengerjakan berbagai topik ilmiah. Saya menemukan bahwa tidak seorang pun di antara hadirin yang memahami laporan saya, dan dengan cara yang sama, laporan orang lain hanya dapat dimengerti oleh mereka sendiri. Hal ini tidak terjadi pada topik tingkat tinggi, tetapi begitu Anda mulai mempelajari sesuatu, audiens tidak dapat lagi mengikuti Anda. Bagaimana Anda menghadapinya?

Michael: Tidak selalu berhasil. Saya baru-baru ini menyiapkan laporan yang membahas terlalu jauh detail teknisnya. Seiring berjalannya pembicaraan, menjadi jelas bahwa sebagian besar penonton tidak memahami saya, jadi saya harus beradaptasi dengan situasi dengan cepat. Slidenya tidak bisa diubah, jadi hasilnya kurang bagus - jadi, secara umum, saya mencoba untuk tidak menggunakan slide. Secara keseluruhan, saran saya adalah mempertimbangkan audiens Anda. Anda perlu mengetahui dengan siapa Anda berbicara, apa tingkat pengetahuan mereka, dan apa yang perlu mereka dengar untuk mengapresiasi karya Anda.

Vitali: Bisakah Anda memberi kami petunjuk mengenai isi kuliah ini?

Michael: Sejujurnya, saya memilih untuk tidak memperluas topik ini agar orang-orang yang dimaksud tidak disebutkan namanya. Intinya sering kali kita terlalu mendalami seluk-beluk permasalahan yang sedang kita kerjakan, sehingga sulit bagi kita untuk menjelaskan di awal pembicaraan mengapa permasalahan tersebut menarik dan penting serta bagaimana kaitannya dengan permasalahan yang sedang kita kerjakan. penonton sudah mengetahuinya. Menurut pengamatan saya, siswa paling sulit mempelajari keterampilan ini. Dan ini juga merupakan titik lemah dari laporan terbaru saya. Laporan yang terstruktur dengan baik harus, sejak awal, menemukan kontak dengan audiens, menjelaskan kepada mereka apa sebenarnya masalahnya dan bagaimana kaitannya dengan topik yang sudah diketahui. Seberapa teknis pengenalan ini tergantung pada penontonnya. Jika beraneka ragam, maka laporannya bisa multi-tahap. Pendahuluan harus dapat diakses oleh semua orang, dan pada akhirnya artikel tersebut mungkin tidak dapat mengikuti Anda, namun orang-orang yang relatif akrab dengan bidang Anda akan dapat memahaminya.

Apakah siswa menjadi lebih bodoh? Tren global, internasionalisasi.

Alexey: Anda telah mengamati siswa selama beberapa dekade. Apakah siswa semakin bodoh atau pintar dari dekade ke dekade, atau dari tahun ke tahun? Di Rusia, para profesor terus-menerus mengeluh bahwa siswanya semakin bodoh setiap tahunnya, dan tidak jelas apa yang harus dilakukan untuk mengatasinya.

Michael: Anda benar-benar dapat mendengar banyak hal negatif dari kami, para orang tua. Secara tidak sadar, kita cenderung mengharapkan siswa menyerap seluruh 30 tahun pengalaman yang telah kita miliki. Jika pemahaman saya lebih dalam dibandingkan pada tahun 1985, mengapa para siswa tidak memilikinya? Mungkin karena mereka berumur 20 tahun, bagaimana menurut anda? Menurut saya, perubahan paling signifikan dalam beberapa dekade terakhir terjadi pada komposisi demografi: kini kita memiliki lebih banyak pelajar internasional, kecuali warga Kanada. Dulu ada banyak orang Kanada karena kami sangat dekat dengan perbatasan Kanada dan pelajar dari sana dapat pulang ke rumah pada akhir pekan. Namun sekarang terdapat banyak universitas bagus di Kanada, dan warga Kanada lebih memilih untuk belajar di sini; jauh lebih sedikit dari mereka yang datang ke AS.

Alexey: Menurut Anda, apakah ini tren lokal atau global?

Michael: Saya tidak ingat persisnya siapa, tapi ada yang bilang dunia ini datar. Bidang kami menjadi lebih internasional. Konferensi ACM Sebelumnya diadakan secara eksklusif di Amerika Serikat, kemudian diputuskan untuk diadakan setiap 4 tahun sekali di negara lain, dan sekarang diadakan di seluruh dunia. Perubahan-perubahan ini bahkan lebih berdampak IEEE, karena organisasi ini selalu menjadi organisasi yang lebih internasional daripada ACM. Dan terdapat ketua program dari Tiongkok, India, Rusia, Jerman dan banyak negara lainnya, karena banyak hal yang terjadi di mana-mana saat ini.

Alexey: Tapi mungkin ada beberapa aspek negatif dari internasionalisasi tersebut?

Michael: Menurut saya semua aspek negatif tidak berkaitan dengan teknologi, tetapi dengan politik. Pada suatu waktu, masalah utama adalah kenyataan bahwa AS mencuri orang-orang paling cerdas dan berbakat dari negara-negara di seluruh dunia. Dan sekarang masalah utamanya adalah permainan politik antara berbagai negara seputar visa dan imigrasi.

Alexey: Yaitu hambatan dan sejenisnya. Itu sudah jelas.

Vladimir: Secara pribadi, saya tertarik dengan pendekatan apa yang Anda ambil saat mengajarkan mata pelajaran baru kepada siswa. Ada beberapa pilihan yang berbeda: pertama-tama Anda dapat mencoba menginspirasi mereka untuk mencoba sesuatu yang baru, atau Anda dapat lebih memperhatikan detail cara kerja teknologi tertentu. Apa yang Anda sukai?

Pekerjaan yang efektif dengan siswa

Alexey: Dan bagaimana menemukan keseimbangan antara yang pertama dan kedua?

Michael: Masalahnya adalah kelas tidak selalu berjalan sesuai keinginan saya. Saya biasanya memberikan siswa bahan bacaan terlebih dahulu agar mereka mendalaminya, memahaminya dengan kemampuan terbaiknya, dan merumuskan pertanyaan tentang bagian-bagian yang belum mereka pahami. Kemudian di kelas Anda dapat fokus pada momen tersulit dan menjelajahinya bersama. Inilah cara saya paling suka mengajar kelas. Namun mengingat beban yang kini ditanggung siswa, saya tidak selalu bisa memastikan bahwa mereka mempersiapkan diri terlebih dahulu. Akibatnya, Anda harus mencurahkan lebih banyak waktu untuk menceritakan kembali materi secara umum daripada yang Anda inginkan. Meskipun demikian, saya mencoba untuk menjaga kelas kami tetap interaktif. Jika tidak, akan lebih mudah untuk merekam video satu kali agar siswa dapat menontonnya di rumah. Inti dari kelas langsung adalah interaksi manusia. Di kelas, saya lebih suka menggunakan kapur dan papan tulis daripada slide, kecuali dalam kasus tertentu ketika diagram terlalu rumit untuk digambarkan di papan tulis. Berkat ini, saya tidak harus terpaku pada rencana pembelajaran yang kaku. Karena tidak ada aturan ketat dalam memberikan materi, hal ini memungkinkan saya menyesuaikannya dengan audiens tergantung pada pertanyaan yang saya terima. Secara umum saya berusaha membuat kelas seinteraktif mungkin, sehingga materi yang saya sampaikan bergantung pada pertanyaan yang diajukan kepada saya.

Vladimir: Itu bagus. Menurut pengalaman saya, cukup sulit membuat pendengar bertanya. Bahkan jika Anda bertanya terlebih dahulu untuk mengajukan pertanyaan, tidak peduli seberapa bodoh atau pintarnya, mereka tetap diam. Bagaimana Anda menghadapinya?

Michael: Anda akan tertawa, tetapi jika Anda berdiam diri cukup lama, cepat atau lambat semua orang akan merasa tidak nyaman dan seseorang akan mengajukan pertanyaan. Atau Anda dapat mengajukan pertanyaan teknis sederhana dengan jawaban ya atau tidak untuk menentukan apakah orang memahami apa yang baru saja dikatakan. Misalnya, apakah ada data race pada contoh di atas? Siapa yang berpikir begitu? Siapa yang mengira tidak? Siapa yang tidak mengerti apa-apa, karena total hanya separuh tangan yang terangkat?

Vitali: Dan jika kamu menjawab salah, kamu dikeluarkan dari kelas :)

Michael: Jika Anda belum menjawab apa pun, Anda harus mengajukan pertanyaan. Saya perlu memahami apa sebenarnya yang perlu diketahui siswa untuk menjawab pertanyaan yang baru saja saya ajukan. Saya membutuhkan mereka untuk membantu saya membantu mereka. Saya siap beradaptasi dengan mereka agar mereka memahami masalahnya. Tetapi jika saya tidak tahu apa yang ada di kepala mereka, saya tidak bisa melakukannya. Dan jika Anda tidak memberikan ketenangan pada siswa dalam waktu yang cukup lama, terkadang pada akhirnya mereka menanyakan pertanyaan yang tepat, yaitu pertanyaan yang memungkinkan saya melihat apa sebenarnya yang ada di kepala siswa. 

Alexey: Apakah pertanyaan-pertanyaan ini terkadang memunculkan ide-ide yang belum pernah Anda pikirkan sebelumnya? Apakah itu tidak terduga? Apakah mereka memungkinkan Anda melihat suatu masalah dari sudut pandang baru?

Michael: Ada pertanyaan yang membuka cara baru dalam menyajikan materi. Seringkali ada pertanyaan yang mengarah pada masalah menarik yang tidak ingin saya bicarakan. Siswa sering mengatakan kepada saya bahwa saya cenderung keluar topik ketika hal ini terjadi. Dan, menurut mereka, sering kali inilah bagian pelajaran yang paling menarik. Sangat jarang, hanya beberapa kali, siswa mengajukan pertanyaan yang mendorong arah baru dalam penelitian dan berkembang menjadi sebuah artikel. Hal ini lebih sering terjadi dalam percakapan dengan siswa dibandingkan saat kelas berlangsung, namun kadang-kadang hal ini terjadi selama kelas. 

Alexey: Jadi para siswa mengajukan pertanyaan kepada Anda atas dasar apa artikel tersebut dapat diterbitkan?

Michael: Ya. 

Vitali: Seberapa sering Anda melakukan percakapan ini dengan siswa? Kapan mereka ingin belajar lebih dari apa yang telah dibahas selama pelajaran?

Michael: Dengan mahasiswa pascasarjana saya - sepanjang waktu. Saya punya sekitar 5 atau 6 orang, dan kami selalu mendiskusikan sesuatu dengan mereka. Dan percakapan semacam ini dengan siswa yang hanya menghadiri kelas saya bukanlah hal yang umum. Meskipun saya berharap ini terjadi lebih sering. Saya menduga mereka hanya takut datang ke fakultas pada jam kerja. Setiap semester, beberapa siswa berhasil mengatasi hambatan psikologis ini, dan selalu menarik untuk berbicara dengan mereka setelah kelas berakhir. Benar, jika semua siswa berani, saya tidak akan punya cukup waktu. Jadi mungkin semuanya berjalan sebagaimana mestinya. 

Vitali: Bagaimana Anda mengatur waktu untuk berkomunikasi dengan siswa? Sejauh yang saya tahu, di AS, para guru memiliki banyak pekerjaan - mengajukan permohonan hibah dan sejenisnya. 

Michael: Sejujurnya, bekerja dengan siswa adalah aspek pekerjaan yang paling saya nikmati. Jadi saya punya cukup motivasi untuk ini. Sebagian besar waktu yang saya habiskan di kantor dihabiskan untuk segala jenis rapat. Sekarang musim panas, jadi jadwalku tidak terlalu padat, tapi selama tahun ajaran, setiap hari dari jam 9 sampai jam 17 aku sudah mengemas semuanya. Pekerjaan penelitian, ulasan, hibah - untuk semua ini hanya ada malam hari dan akhir pekan. 

Bagaimana mengikuti persiapan kursus dan buku baru.

Alexey: Apakah saat ini Anda terus mengajar mata kuliah yang sudah lama Anda ajarkan? Sesuatu seperti pengantar Ilmu Komputer.

Michael: Hal pertama yang terlintas dalam pikiran di sini adalah kursus bahasa pemrograman. 

Alexey: Seberapa berbedakah versi kursus saat ini dengan versi 10, 20, 30 tahun yang lalu? Mungkin yang lebih menarik di sini bukanlah detail mata kuliah tertentu, melainkan tren umumnya.

Michael: Kursus bahasa pemrograman saya agak tidak biasa pada saat saya membuatnya. Saya mulai membacanya pada akhir tahun 1980an, menggantikan rekan saya, Doug Baldwin (Doug Baldwin). Topik kursus hanya berhubungan secara tangensial dengan spesialisasi saya, tetapi ketika dia keluar, saya adalah kandidat terbaik untuk mengajar kursus tersebut. Saya tidak menyukai satu pun buku teks yang ada pada saat itu, jadi saya akhirnya menulis sendiri buku teks untuk kursus ini. (Catatan Editor: kita berbicara tentang buku ini "Pragmatika Bahasa Pemrograman") Sekarang digunakan di lebih dari 200 universitas di seluruh dunia. Pendekatan saya tidak biasa karena sengaja memadukan masalah desain dan implementasi bahasa, dan memberikan perhatian besar pada interaksi antara aspek-aspek ini di semua bidang yang memungkinkan. Pendekatan dasarnya tetap tidak berubah, begitu pula banyak konsep dasar: abstraksi, namespace, modularitas, tipe. Namun rangkaian bahasa yang digunakan untuk mendemonstrasikan konsep-konsep ini telah berubah total. Ketika kursus ini pertama kali dibuat, ada banyak contoh dalam Pascal, namun saat ini banyak siswa saya yang belum pernah mendengar bahasa ini. Tapi mereka tahu Swift, Go, Rust, jadi saya harus berbicara tentang bahasa yang digunakan saat ini. Selain itu, para siswa sekarang fasih dalam bahasa skrip, namun ketika saya mulai mengajar kursus ini, semuanya tentang bahasa yang dikompilasi. Sekarang kita membutuhkan banyak materi tentang Python, Ruby dan bahkan Perl, karena kode inilah yang ditulis saat ini, dan banyak hal menarik yang terjadi dalam bahasa-bahasa tersebut, termasuk di bidang bahasa desain. 

Vitali: Maka pertanyaan saya selanjutnya akan berhubungan dengan pertanyaan sebelumnya. Bagaimana cara mengikuti bidang ini? Saya menduga memperbarui kursus semacam itu membutuhkan banyak usaha - Anda perlu memahami bahasa baru, memahami ide-ide utama. Bagaimana kamu melakukan ini?

Michael: Saya tidak bisa menyombongkan diri bahwa saya selalu berhasil 100%. Namun seringkali saya hanya melakukan apa yang dilakukan orang lain - membaca Internet. Jika saya ingin memahami Rust, saya Google, buka halaman Mozilla dan baca manual yang diposting di sana. Ini adalah bagian dari hal-hal yang terjadi dalam pembangunan komersial. Jika kita berbicara tentang sains, maka Anda perlu mengikuti laporan di konferensi-konferensi utama. 

Hubungan antara bisnis dan akademisi

Vitali: Mari kita bicara tentang hubungan antara bisnis dan penelitian ilmiah. Dalam daftar karya saya, saya menemukan beberapa artikel tentang koherensi cache. Saya memahami bahwa algoritme konsistensi cache tidak stabil pada saat dipublikasikan? Atau tidak cukup luas. Seberapa umum ide-ide Anda dalam praktiknya?

Michael: Saya tidak yakin publikasi mana yang Anda bicarakan. Saya telah melakukan cukup banyak pekerjaan dengan murid-murid saya Bill Bolosky (William Bolosky) dan Leonidas Kontotanassis (Leonidas Kontothanassis) pada awal tahun 1990an tentang manajemen memori mesin Neumann. Pada saat itu, bisnis belum memiliki pemahaman tentang cara membuat sistem multiprosesor dengan benar: apakah layak membuat dukungan untuk mengakses memori jarak jauh di tingkat perangkat keras, apakah layak membuat memori didistribusikan, apakah mungkin memuat cache dari memori jarak jauh, atau perlu memindahkan halaman di sistem ruang operasi? Bill dan Leonidas sama-sama bekerja di bidang ini dan mengeksplorasi pendekatan tanpa pemuatan cache jarak jauh. Hal ini tidak terkait langsung dengan koherensi cache, namun masih berfungsi pada manajemen memori NUMA, dan kemudian pendekatan modern terhadap penempatan halaman di sistem operasi modern berkembang dari hal ini. Secara keseluruhan, Bill dan Leonidas melakukan pekerjaan penting, meskipun bukan yang paling berpengaruh di bidang ini - ada banyak orang lain yang mengerjakan hal yang sama pada saat itu. Kemudian, saya mengerjakan topik yang berkaitan dengan koherensi cache dalam konteks memori transaksional perangkat keras. Kelompok tempat saya bekerja dalam masalah ini akhirnya menerima beberapa paten. Ada beberapa ide yang cukup menarik di baliknya, tetapi menurut saya ide tersebut tidak akan diterapkan dalam praktik. Dengan satu atau lain cara, sulit bagi saya untuk menilai profitabilitas mereka. 

Alexey: Dalam hal ini, pertanyaan yang lebih pribadi: seberapa pentingkah gagasan Anda dipraktikkan bagi Anda? Atau tidakkah Anda memikirkannya?

Michael: Saya suka menanyakan pertanyaan ini dalam wawancara dengan orang lain, pelamar atau kandidat yang ingin bergabung dengan fakultas. Saya rasa tidak ada jawaban yang benar untuk pertanyaan ini. Orang yang melakukan hal-hal keren bisa mempunyai motivasi yang sangat berbeda. Saya tertarik pada masalah karena menurut saya pribadi itu menarik, bukan karena manfaat praktisnya. Namun di sisi lain, ketika ada hal menarik yang masih dapat diterapkan, saya sangat menyukainya. Jadi tidak mudah di sini. Namun di awal pekerjaan saya, saya masih tidak didorong oleh gagasan tentang penggunaan akhir di dunia, tetapi oleh keselarasan gagasan dan keinginan untuk mengeksplorasinya dan melihat apa hasilnya. Jika pada akhirnya memberikan hasil praktis, bagus. 

Alexey: Karena pendidikan dan pengalaman Anda, Anda lebih mampu menilai nilai ide orang lain dibandingkan kebanyakan orang. Anda dapat membandingkannya dan menentukan mana yang lebih cocok digunakan. Saya yakin Anda memiliki pendapat tentang hal-hal yang saat ini digunakan dalam praktik oleh produsen besar seperti Intel. Dari sudut pandang Anda, seberapa benarkah kebijakan yang diambil oleh perusahaan-perusahaan ini?

Michael: Latihan selalu berkisar pada apa yang bisa sukses secara komersial, yaitu menghasilkan keuntungan, dan sebaiknya Anda bertanya kepada orang lain tentang hal itu. Pekerjaan saya sebagian besar menghasilkan publikasi, dan di bidang sistem operasi mereka dievaluasi berdasarkan indikator kinerja: kecepatan, konsumsi energi, ukuran kode. Namun bagi saya, hasil empiris ini selalu terlihat ditambahkan ke dalam artikel hanya agar dapat dipublikasikan, dan motif sebenarnya orang dalam berkarya adalah estetis. Para peneliti mengevaluasi solusi dari perspektif artistik, mereka peduli dengan betapa elegannya ide-ide tersebut, dan mereka mencoba menciptakan sesuatu yang lebih baik daripada pendekatan yang ada. Peneliti didorong oleh motif pribadi, subjektif, dan estetis. Tapi Anda tidak bisa menulis tentang ini di artikel itu sendiri, hal ini bukan argumen untuk panitia program. Untungnya, solusi elegan seringkali juga cepat dan murah. Saya dan selusin kolega membahas topik ini sekitar 15 tahun yang lalu dan akhirnya menulis artikel tentangnya. Saya rasa Anda masih dapat menemukannya sekarang, itulah namanya "Bagaimana mengevaluasi penelitian sistem" atau semacamnya, ia memiliki lebih dari selusin penulis. Ini adalah satu-satunya artikel di mana saya adalah penulisnya Sasha Fedorova, jadi jika Anda mencari namanya di daftar publikasi saya, Anda akan menemukan apa yang Anda butuhkan. Ini berbicara tentang mengevaluasi penelitian sistem dan betapa pentingnya keanggunan. 

Alexey: Jadi ada perbedaan antara standar apa yang dianggap baik dalam ilmu pengetahuan dan dalam bisnis. Sains mengevaluasi kinerja, konsumsi daya, TDP, kemudahan implementasi, dan banyak lagi. Apakah Anda mempunyai kesempatan untuk melakukan penelitian semacam ini di universitas? Apakah Anda memiliki laboratorium dengan mesin berbeda dan arsitektur berbeda tempat Anda dapat melakukan eksperimen?

Michael: Ya, departemen kami memiliki banyak mesin menarik yang berbeda. Seringkali ukurannya kecil, kami memiliki cluster kecil dan banyak sistem multiprosesor dengan akselerator berbeda. Selain itu, kampus ini memiliki pusat komputasi besar yang melayani para ilmuwan dari berbagai disiplin ilmu. Ia memiliki sekitar seribu node dan dua puluh ribu core, semuanya di Linux. Jika diperlukan, Anda selalu dapat membeli beberapa AWS. Jadi kami tidak memiliki batasan signifikan terkait perangkat keras. 

Alexey: Bagaimana rasanya tiga puluh tahun yang lalu? Apakah ada masalah saat itu?

Michael: Itu sedikit berbeda saat itu. Pada pertengahan hingga akhir 1980-an, sains dianggap kekurangan sumber daya komputasi. Untuk memperbaiki situasi ini, National Science Foundation (Yayasan Sains Nasional) membuat program penelitian eksperimental terkoordinasi (Coordinated Experimental Research, CER). Misi program ini adalah menyediakan infrastruktur komputasi untuk departemen Ilmu Komputer, dan telah mencapai perubahan yang signifikan. Dengan uang yang dia berikan, kami di Universitas Rochester membeli BBN Butterfly 1984 knot pada tahun 128, setahun sebelum saya tiba di sana. Pada saat itu, ini adalah sistem multiprosesor dengan memori bersama terbesar di dunia. Itu memiliki 128 prosesor, masing-masing pada motherboard terpisah, dan menempati empat rak. Setiap prosesor memiliki memori sebesar megabyte, 128 megabyte RAM adalah jumlah yang tidak terbayangkan pada saat itu. Pada mesin ini kami menerapkan penguncian MCS untuk pertama kalinya. 

Alexey: Jadi, jika saya memahami Anda dengan benar, maka saat ini masalah perangkat keras telah teratasi? 

Michael: Secara umum, ya. Ada beberapa peringatan: pertama, jika Anda mengerjakan arsitektur komputer pada tingkat chip, hal ini sulit dilakukan di lingkungan akademis karena ada alat yang jauh lebih baik untuk melakukannya dalam bisnis. Jika Anda membutuhkan sesuatu yang lebih kecil dari 10 nanometer, Anda harus memesannya dari orang lain. Di bidang ini, menjadi peneliti di Intel jauh lebih mudah. Jika Anda mengerjakan komunikasi optik pada chip atau memori solid-state, Anda akan menemukan teknologi dalam bisnis yang belum ada dalam sains, jadi Anda harus membuat aliansi. Misalnya, Stephen Swanson (Steven Swanson) dibuat kemitraan seperti itu untuk teknologi memori baru. Bentuk ini tidak selalu berhasil, namun dalam beberapa kasus bisa cukup berhasil. Selain itu, dalam sains, pengembangan sistem komputasi yang paling kuat lebih sulit dilakukan. Proyek superkomputer terbesar saat ini di AS, Jepang, dan Tiongkok semuanya berfokus pada bisnis. 

Implementasi praktis dari ide-ide. MCS, MS, CLH, JSR 166, bekerja dengan Doug Lee dan banyak lagi.

Vitali: Anda telah membicarakan tentang bagaimana Anda mulai mengerjakan algoritma sinkronisasi. Anda memiliki dua artikel yang sangat terkenal tentang pemblokiran MCS и Antrian Michael-Scott (MS), yang dalam arti tertentu diterapkan di Jawa. (Catatan Editor: semua publikasi dapat dilihat по ссылке). Di sana pemblokiran ini diterapkan dengan beberapa perubahan dan ternyata kunci CLH, dan antrian diterapkan sebagaimana dimaksud. Namun bertahun-tahun telah berlalu antara penerbitan artikel Anda dan penerapan praktisnya. 

Alexey: Sepertinya sekitar 10 tahun dalam kasus antrian.

Michael: Sebelum fitur ini muncul di perpustakaan standar Java?

Vitali: Ya. Apa yang Anda lakukan untuk mewujudkan hal ini? Atau apakah mereka tidak melakukan apa pun?

Michael: Saya dapat memberi tahu Anda bagaimana MS Queue masuk ke Java 5. Beberapa tahun sebelum dirilis, saya bekerja dengan kelompok Mark Moyers di Sun Microsystems di lab mereka dekat Boston. Dia mengadakan lokakarya untuk orang-orang yang dia kenal yang sedang mengerjakan masalah menarik dalam multithreading karena dia ingin menemukan topik yang bisa dia jual ke perusahaan mereka. Di situlah saya pertama kali bertemu Doug Lea. Saya dan Doug serta sekitar 25 orang lainnya dari Sun bersama-sama mendiskusikan presentasi Doug JSR 166, yang kemudian menjadi java.util.concurrent. Dalam perjalanannya, Doug mengatakan bahwa dia ingin menggunakan antrian MS, tetapi untuk ini dia memerlukan penghitung jumlah elemen dalam antrian untuk antarmuka. Artinya, hal ini seharusnya dilakukan dengan metode tersendiri, atomik, akurat dan cepat. Saya menyarankan untuk menambahkan nomor seri ke node, mengambil nomor node pertama dan terakhir dan mengurangi satu dari yang lain. Doug menggaruk kepalanya, berkata “mengapa tidak,” dan akhirnya melakukan hal itu. Kami mendiskusikan penerapan pendekatan ini di perpustakaan, namun Doug melakukan sebagian besar pekerjaannya sendiri. Hasilnya, ia berhasil membangun dukungan multithreading yang sangat baik di Java. 

Alexey: Jadi, jika saya memahaminya dengan benar, metode .size() seharusnya menjadi bagian dari antarmuka antrian standar, dan seharusnya memiliki kompleksitas algoritmik O(1)?

Michael: Ya, dan selain itu, diperlukan loket terpisah.

Alexey: Karena jika memanggil metode .size() di Java, diharapkan hasilnya akan langsung tersedia dan bukan berdasarkan ukuran koleksi sebenarnya. Begitu, terima kasih.

Michael: Beberapa tahun kemudian saya mengerjakan struktur data ganda dengan murid saya Bill Scherer - sebenarnya, inilah yang akan saya bicarakan laporan tentang Hydra. Doug mendatangi kami dan berkata bahwa dia bisa menggunakannya di Java Executor Framework. Bersama Bill, mereka menciptakan dua implementasi, yang disebut antrian adil dan tidak adil. Saya menasihati mereka tentang proyek ini, meskipun saya tidak berpartisipasi dalam penulisan kode sebenarnya. Hasilnya, kecepatan eksekutor meningkat secara signifikan. 

Vladimir: Pernahkah Anda menemukan penerapan algoritme yang salah atau permintaan untuk menambahkan fitur baru? Secara umum, praktik harus sejalan dengan teori, tetapi sering kali keduanya berbeda. Misalkan Anda menulis sebuah algoritma, dan di atas kertas itu berfungsi, namun orang-orang yang terlibat dalam implementasi mulai meminta Anda untuk lebih banyak fitur atau semacam penyesuaian pada algoritma tersebut. Pernahkah Anda mengalami situasi seperti itu?

Michael: Satu-satunya contoh di mana seseorang mendatangi saya dan bertanya “bagaimana menerapkannya” adalah pertanyaan Doug, yang sudah saya bicarakan. Namun ada beberapa kasus di mana perubahan menarik telah dilakukan untuk memenuhi kebutuhan praktis. Misalnya, tim K42 di IBM mengubah kunci MCS dan menjadikannya antarmuka standar sehingga tidak perlu meneruskan node antrian bolak-balik ke rutinitas perolehan dan rilis. Berkat antarmuka standar ini, ide yang indah secara teori mulai diterapkan dalam praktik. Mengejutkan bahwa mereka tidak pernah menerbitkan artikel tentang hal itu, dan meskipun mereka menerima paten, mereka kemudian meninggalkannya. Idenya luar biasa, dan saya mencoba membicarakannya bila memungkinkan. 

Ada kasus lain di mana orang telah melakukan perbaikan pada algoritma yang saya publikasikan. Misalnya, antrian MS memiliki mekanisme instalasi dua langkah, yang berarti ada dua CAS di jalur kritis antrian. Pada mobil tua, harga CAS cukup mahal. Intel dan pabrikan lain telah mengoptimalkannya dengan cukup baik akhir-akhir ini, namun dahulu kala instruksi ini merupakan instruksi 30 siklus, jadi memiliki lebih dari satu di jalur kritis adalah hal yang tidak diinginkan. Akibatnya, antrian berbeda dikembangkan yang mirip dengan antrian MS, tetapi hanya memiliki satu operasi atom pada jalur kritis. Hal ini dicapai karena fakta bahwa selama periode waktu tertentu operasi dapat memakan waktu O(n), bukan O(1). Itu tidak mungkin terjadi, tapi mungkin saja terjadi. Hal ini terjadi karena pada saat-saat tertentu algoritma melintasi antrian dari awal hingga posisi saat ini dalam antrian tersebut. Secara umum, algoritma ini ternyata sangat berhasil. Sejauh yang saya tahu, ini tidak banyak digunakan, sebagian karena operasi atom memerlukan sumber daya yang jauh lebih sedikit dibandingkan sebelumnya. Tapi idenya bagus. Saya juga sangat menyukai karya Dave Dice dari Oracle. Semua yang dia lakukan sangat praktis dan dia menggunakan besi dengan sangat cerdik. Dia memiliki andil dalam sebagian besar algoritme sinkronisasi yang mendukung NUMA dan struktur data multi-utas. 

Vladimir: Saat Anda menulis algoritma atau mengajar siswa, hasil pekerjaan Anda tidak langsung terlihat. Komunitas memerlukan waktu untuk mengenal, misalnya, artikel baru. Algoritme baru tidak serta merta menemukan penerapannya. 

Michael: Masih belum jelas apakah artikel tersebut akan signifikan atau tidak. Saya pikir akan menarik untuk melakukan studi terhadap makalah yang telah memenangkan penghargaan di konferensi. Artinya, lihatlah artikel-artikel yang pernah dianggap terbaik oleh orang-orang di komite program. Anda perlu mencoba menghitung berdasarkan jumlah tautan dan dampaknya terhadap bisnis, seberapa besar pengaruh artikel-artikel ini dalam 10, 20, 25 tahun. Saya ragu akan ada korelasi yang kuat antara keduanya. Ini tidak akan menjadi nol, tetapi kemungkinan besar akan jauh lebih lemah dari yang kita inginkan. Banyak ide yang tidak diklaim dalam waktu lama sebelum tersebar luas. Misalnya, mari kita ambil memori transaksional. Lebih dari 10 tahun telah berlalu sejak artikel asli diterbitkan hingga orang-orang mulai membuat mesin dengan artikel tersebut. Dan sebelum munculnya memori ini di produk komersial - dan semuanya ada 20. Untuk waktu yang sangat lama tidak ada yang memperhatikan artikel tersebut, dan kemudian jumlah tautan ke artikel tersebut meningkat tajam. Akan sulit untuk memprediksi hal ini sebelumnya. Di sisi lain, terkadang ide langsung diimplementasikan. Beberapa tahun yang lalu, saya menulis makalah dengan Joe Izraelevitz untuk DISC yang mengusulkan definisi formal baru tentang validitas untuk struktur data persisten yang dapat digunakan setelah komputer yang menjalankannya rusak. Saya menyukai artikel itu sejak awal, tetapi ternyata artikel itu jauh lebih populer dari yang saya harapkan. Ini digunakan oleh beberapa kelompok berbeda dan akhirnya menjadi definisi standar struktur persistensi. Yang tentu saja bagus.

Vladimir: Apakah ada teknik yang Anda gunakan untuk penilaian? Apakah Anda bahkan mencoba mengevaluasi artikel Anda dan siswa Anda? Dalam hal apakah orang yang Anda ajar menuju ke arah yang benar.

Michael: Seperti orang lain, saya lebih memperhatikan apa yang saya lakukan saat ini. Sekali lagi, seperti orang lain, saya sesekali memeriksa Google Cendekia untuk melihat apakah makalah saya yang lalu dikutip, tapi itu lebih karena rasa ingin tahu. Kebanyakan saya asyik dengan apa yang dilakukan murid-murid saya sekarang. Dalam menilai suatu karya saat ini, sebagiannya adalah pertimbangan estetika, mana yang elegan dan mana yang tidak. Dan dalam kehidupan sehari-hari, pertanyaan terbuka memainkan peran besar. Misalnya, seorang siswa datang kepada saya dengan grafik beberapa hasil, dan kami mencoba memahami dari mana perilaku aneh grafik tersebut berasal. Secara umum, dalam pekerjaan kami, kami terus-menerus berusaha memahami hal-hal yang belum kami pahami. 

Memori transaksional

Vitali: Mungkin kita bisa bicara sedikit tentang memori transaksional?

Michael: Saya pikir ada baiknya untuk mengatakan setidaknya sedikit karena saya telah berusaha keras untuk melakukannya. Ini adalah topik yang publikasinya paling banyak saya miliki dibandingkan topik lainnya. Namun pada saat yang sama, anehnya, saya selalu skeptis terhadap memori transaksional. Menurut pendapat saya, artikel oleh Herlihy dan Moss (M. Herlihy, J.E.B. Moss) diterbitkan lebih dulu. Pada awal tahun 1990-an, mereka menyarankan bahwa memori transaksional dapat membantu pemrogram berbakat bekerja pada struktur data multi-thread, sehingga struktur ini kemudian dapat digunakan sebagai perpustakaan oleh pemrogram biasa. Artinya, ini akan membantu Doug Lee dalam mengerjakan JSR 166 miliknya. Namun memori transaksional tidak dimaksudkan untuk membuat pemrograman multi-thread menjadi mudah. Namun hal ini mulai dirasakan pada awal tahun 2000an, ketika hal ini menyebar luas. Itu diiklankan sebagai cara untuk memecahkan masalah pemrograman paralel. Pendekatan ini selalu tampak sia-sia bagi saya. Memori transaksional hanya dapat mempermudah penulisan struktur data paralel. Menurut saya, inilah yang dia capai. 

Tentang sulitnya menulis kode multi-thread

Alexey: Sangat menarik. Tampaknya ada penghalang tertentu antara programmer biasa dan mereka yang bisa menulis kode multi-thread. Tahun lalu, saya berbicara beberapa kali dengan orang-orang yang menerapkan kerangka algoritmik. Misalnya, dengan Martin Thomson, serta dengan pemrogram yang mengerjakan perpustakaan multi-utas. (Catatan Editor: Martin Thompson adalah pengembang yang sangat terkenal, tulisnya Pengacau и Aeron. Dan dia juga punya laporan di konferensi Joker 2015 kami, rekaman video tersedia di YouTube. Dia sama dibuka konferensi ini rekaman keynote juga tersedia). Tantangan utamanya, kata mereka, adalah membuat algoritme menjadi cepat dan mudah digunakan. Artinya, mereka berusaha mengatasi hambatan ini dan menarik sebanyak mungkin orang ke kawasan ini. Apa yang kamu pikirkan tentang itu?

Michael: Ini adalah masalah utama multithreading: bagaimana mencapai kinerja tinggi tanpa menambah kompleksitas sistem. 

Alexey: Karena ketika mereka mencoba menghindari kompleksitas, algoritmanya menjadi kurang universal.

Michael: Kuncinya di sini adalah abstraksi yang dirancang dengan benar. Bagi saya, ini umumnya merupakan hal utama untuk sistem komputer sebagai suatu bidang. Butler Lampson suka menggunakan istilah ini, dan dia menyebut kita “pedagang abstraksi.” Teknologi sederhana tidak ada saat ini. Prosesor yang kami gunakan memiliki 10 miliar transistor—kesederhanaan tidak diragukan lagi. Pada saat yang sama, ISA jauh lebih sederhana daripada prosesor, karena kami bekerja sangat lama untuk menyediakannya dengan kinerja tinggi dan antarmuka yang relatif sederhana. Tapi tidak semuanya berjalan lancar dengannya. Masalah yang sama juga terjadi pada akselerator yang kini bermunculan di pasaran. Timbul pertanyaan - bagaimana membuat antarmuka yang tepat untuk GPU, mekanisme enkripsi, kompresi, mekanisme transcoding, mekanisme aljabar linier, atau bahkan FPGA yang lebih fleksibel. Bagaimana cara membuat antarmuka yang membuat alat ini mudah digunakan dan menyembunyikan kerumitan? Itu tidak akan menghilangkannya, melainkan menyembunyikannya dari programmer sederhana. 

Alexey: Sejauh yang saya pahami, kita masih memiliki kendala dalam memahami abstraksi. Mari kita ambil model memori; pada tahap perkembangan ilmu pengetahuan dan teknologi, ini adalah salah satu abstraksi utama. Berkat itu, semua programmer dibagi menjadi dua kelompok: sebagian besar adalah mereka yang tidak memahaminya, dan sebagian kecil adalah mereka yang memahami, atau berpikir bahwa mereka memahaminya. 

Michael: Itu pertanyaan bagus - apakah ada di antara kita yang benar-benar memahami model memori?

Vitali: Khususnya di C++.

Michael: Bicaralah dengan Hans Boehm kapan-kapan. Dia adalah salah satu orang terpintar yang saya kenal, pakar terkemuka dalam model memori. Dia akan segera memberi tahu Anda bahwa ada banyak hal yang tidak dia mengerti. Namun jika kita kembali ke masalah abstraksi, maka menurut saya, ide terpenting di bidang model memori selama 30 tahun terakhir telah diungkapkan. dalam disertasi Sarita Adv. (Catatan Editor: daftar lengkap publikasi tersedia по ссылке).

Alexey: Pertanyaan saya adalah: apakah hambatan ini berasal dari sifat konsepnya? 

Michael: TIDAK. Sarita sampai pada kesimpulan bahwa dengan pendekatan yang tepat, Anda berhasil menyembunyikan semua kerumitan, mendapatkan kinerja tinggi, dan memberikan API sederhana kepada pemrogram. Dan jika Anda mengikuti API ini, Anda dapat mencapai konsistensi yang konsisten. Saya pikir ini adalah model yang tepat. Tulis kode tanpa data race dan dapatkan konsistensi berurutan. Tentu saja untuk mengurangi kemungkinan terjadinya balapan diperlukan alat khusus, tapi itu soal lain. 

Vladimir: Pernahkah dalam karir Anda ketika suatu masalah yang tampaknya sudah terselesaikan tiba-tiba berubah menjadi bencana, atau ternyata masalah tersebut tidak dapat diselesaikan? Misalnya, secara teori, Anda dapat memfaktorkan suatu bilangan atau menentukan apakah suatu bilangan merupakan bilangan prima. Namun dalam praktiknya hal ini sulit dilakukan; dengan perangkat keras yang ada saat ini, sulit untuk memfaktorkan angka. Pernahkah hal serupa terjadi pada Anda?

Michael: Saya tidak langsung ingat hal seperti itu. Ada kalanya saya merasa tidak ada lagi yang bisa dilakukan di suatu area, namun kemudian sesuatu yang baru dan menarik terjadi di sana. Misalnya, saya mengira area antrian yang tidak terbatas sudah mencapai kematangan. Setelah beberapa kali perbaikan pada antrian MNS, tidak banyak yang terjadi lagi. Dan kemudian Morrison (Adam Morrison) dan Afek (Yehuda Afek) ditemukan antrian LCRQ. Menjadi jelas bahwa antrian multi-utas yang tidak terbatas dimungkinkan, di mana sebagian besar waktu hanya ada instruksi pengambilan dan kenaikan pada jalur kritis. Dan ini memungkinkan untuk mencapai kinerja yang jauh lebih baik. Bukan berarti kita tidak mengetahui bahwa Fetch-and-Inkrement merupakan hal yang sangat berguna. Eric Freudenthal menulis tentang hal ini dalam karyanya tentang Ultrakomputer bersama Allan Gottlieb pada akhir 1980-an, namun ini tentang antrian yang terbatas. Morrison dan Afek dapat menggunakan pengambilan dan penambahan pada antrean tak terbatas.

Arsitektur baru. Apakah kemenangan memori transaksional sudah dekat?

Vladimir: Apakah Anda mencari solusi arsitektur baru yang dapat berguna untuk algoritma? 

Michael: Tentu saja, ada banyak hal yang ingin saya wujudkan. 

Vladimir: Jenis apa, misalnya?

Michael: Pertama-tama, beberapa ekstensi sederhana ke memori transaksional tingkat perangkat keras kami di prosesor Intel dan IBM. Secara khusus, saya ingin pemuatan dan penyimpanan non-transaksional yang baru saja terjadi segera tersedia dalam transaksi. Mereka segera mengarah ke loop dalam urutan terjadi-sebelum, sehingga bisa jadi sulit. Namun jika Anda mempertahankan lapisan abstraksi, ada banyak hal menarik yang dapat Anda lakukan di luar transaksi saat transaksi sedang berlangsung. Saya tidak tahu betapa sulitnya menerapkan hal ini, tetapi ini akan sangat berguna. 

Hal berguna lainnya adalah memuat cache dari memori jarak jauh. Saya pikir cepat atau lambat hal ini akan terlaksana. Teknologi ini akan memungkinkan terciptanya sistem dengan memori terpilah. Kita dapat menyimpan, katakanlah, 100 terabyte memori non-volatile dalam sebuah rak, dan sistem operasi itu sendiri akan secara dinamis memutuskan bagian mana dari memori tersebut yang harus sesuai dengan ruang alamat fisik prosesor. Ini akan sangat berguna untuk komputasi awan karena memungkinkan sejumlah besar memori disediakan untuk tugas-tugas yang memerlukannya. Saya pikir seseorang akan melakukannya.

Vitali: Untuk menyelesaikan pembicaraan tentang memori transaksional, saya punya satu pertanyaan lagi tentang topik ini. Akankah memori transaksional pada akhirnya menggantikan struktur data multi-thread standar?

Michael: TIDAK. Transaksi adalah mekanisme spekulatif. Pada tingkat pemrograman, ini adalah kunci atom, tetapi di dalamnya terdapat spekulasi. Peramalan seperti itu berhasil jika sebagian besar tebakannya benar. Oleh karena itu, memori transaksional berfungsi dengan baik ketika thread hampir tidak berinteraksi satu sama lain, dan Anda hanya perlu memastikan bahwa tidak ada interaksi. Tetapi jika pesan dimulai antar thread, transaksi tidak banyak gunanya. Izinkan saya menjelaskannya, kita berbicara tentang kasus ketika transaksi dibungkus di seluruh operasi atom. Mereka masih dapat berhasil digunakan sebagai komponen untuk struktur data multi-thread. Misalnya, jika Anda memerlukan CAS tiga kata, dan Anda perlu melakukan multithread pada tiga hal kecil di tengah algoritma multithread yang benar-benar bekerja dengan dua puluh thread pada saat yang bersamaan. Secara umum, transaksi dapat bermanfaat, namun tidak menghilangkan kebutuhan untuk merancang struktur data multi-thread dengan benar. 

Memori non-volatil, Optane DIMM, perangkat ultra-cepat.

Vitali: Hal terakhir yang ingin saya bicarakan adalah topik penelitian Anda saat ini: memori non-volatil. Apa yang bisa kita harapkan di bidang ini dalam waktu dekat? Mungkin Anda mengetahui implementasi efektif yang sudah ada? 

Michael: Saya bukan ahli perangkat keras, saya hanya tahu apa yang saya baca di berita dan apa yang dikatakan rekan-rekan saya. Semua orang telah mendengar bahwa Intel menjual DIMM Optan, yang memiliki latensi baca sekitar 3 kali lipat dan latensi tulis 10 kali lipat dibandingkan RAM dinamis. Mereka akan segera tersedia dalam versi volume yang sangat besar. Lucu sekali membayangkan Anda bisa memiliki laptop dengan RAM beralamat byte beberapa terabyte. Kemungkinan besar dalam 10 tahun kami akan memutuskan untuk menggunakan teknologi baru ini, karena kami menggunakan DRAM - cukup tingkatkan volumenya. Namun berkat kemandirian energi, peluang baru terbuka bagi kita. Kita dapat mengubah tumpukan penyimpanan secara mendasar sehingga tidak ada pemisahan antara memori kerja beralamat byte dan memori persisten berstruktur blok. Dengan demikian, kita tidak perlu membuat serialisasi segala sesuatu yang perlu ditransfer dari satu program yang dijalankan ke program lainnya ke dalam file berstruktur blok. Dari sini kita dapat memperoleh banyak prinsip penting yang mempengaruhi sistem operasi, lingkungan runtime, dan penyimpanan data terdistribusi. Bidang ini sangat menarik untuk digarap. Secara pribadi, sulit bagi saya untuk memprediksi apa yang akan terjadi, tetapi masalah di sini sangat menghibur. Mungkin ada perubahan revolusioner di sini, dan perubahan tersebut mengikuti secara alami dari pengerjaan multithreading, karena pemulihan kegagalan adalah proses "multithreading" di samping pengoperasian normal sistem. 

Topik utama kedua yang sedang saya kerjakan adalah mengelola perangkat ultra-cepat dan mengamankan akses ke perangkat dari ruang pengguna dengan kontrol kebijakan sistemik. Dalam beberapa tahun terakhir, ada tren untuk memindahkan akses perangkat ke ruang pengguna. Hal ini dilakukan karena tumpukan kernel TCP-IP tidak dapat berfungsi di atas antarmuka jaringan yang memerlukan paket baru setiap 5 mikrodetik; hal ini tidak dapat mengimbangi. Oleh karena itu, produsen menyediakan akses langsung ke perangkat. Namun ini berarti sistem operasi kehilangan kendali atas proses dan tidak dapat memberikan akses yang tepat ke perangkat untuk aplikasi pesaing. Tim peneliti kami yakin bahwa kekurangan ini dapat dihindari. Kami akan memiliki artikel tentang ini di USENIX ATC bulan ini. Hal ini terkait dengan pengerjaan persistensi, karena memori persisten beralamat byte yang berumur panjang, pada dasarnya, adalah perangkat dengan I/O ultra-cepat yang perlu diakses di ruang pengguna. Penelitian ini memungkinkan pendekatan baru terhadap mikrokernel, eksokernel, dan upaya tradisional lainnya untuk memindahkan fungsionalitas dengan aman dari kernel OS ke ruang pengguna. 

Vladimir: Memori beralamat byte sangat bagus, tetapi ada batasan fisik - kecepatan cahaya. Artinya pasti akan ada penundaan saat berinteraksi dengan perangkat. 

Michael: Benar-benar tepat.

Vladimir: Apakah akan ada kapasitas yang cukup untuk menampung beban baru?

Michael: Ini adalah pertanyaan yang sangat bagus, tetapi akan sulit bagi saya untuk menjawabnya. Ide pemrosesan dalam memori telah ada sejak lama, sangat menarik, tetapi juga sangat kompleks. Saya belum pernah bekerja di bidang ini, tetapi alangkah baiknya jika ada penemuan yang dibuat di sana. Saya khawatir tidak ada lagi yang perlu saya tambahkan. 

Vladimir: Ada satu masalah lagi. RAM baru yang jumlahnya jauh lebih besar tidak mungkin bisa dimasukkan ke dalam CPU. Oleh karena itu, karena keterbatasan fisik, RAM ini harus diisolasi. 

Michael: Itu semua tergantung pada jumlah cacat dalam produksi sirkuit terpadu. Jika dimungkinkan untuk membuat wafer semikonduktor seluruhnya tanpa cacat, maka dimungkinkan untuk membuat seluruh rangkaian mikro darinya. Tapi sekarang kita tidak tahu cara membuat sirkuit mikro lebih besar dari prangko. 

Vladimir: Tapi kita masih berbicara tentang ukuran besar, tentang sentimeter. Hal ini pasti berdampak pada latensi. 

Michael: Ya. Tidak ada yang dapat Anda lakukan terhadap kecepatan cahaya. 

Vladimir: Sayangnya. 

Tren besar berikutnya. Struktur data ganda. Ular naga.

Vitali: Sejauh yang saya pahami, Anda menangkap tren baru dengan sangat cepat. Anda adalah orang pertama yang bekerja di memori transaksional, dan salah satu orang pertama yang bekerja di memori non-volatile. Menurut Anda apa yang akan menjadi tren besar berikutnya? Atau mungkin itu rahasia?

Michael: Sejujurnya, saya tidak tahu. Mudah-mudahan saya bisa memperhatikan ketika sesuatu yang baru muncul. Saya belum cukup beruntung untuk menemukan bidang baru apa pun sendirian, namun saya mempunyai sedikit keberuntungan dan dapat mulai bekerja cukup awal di bidang baru yang diciptakan oleh orang lain. Saya harap saya bisa melakukan ini di masa depan.

Alexey: Pertanyaan terakhir dalam wawancara ini adalah tentang penampilanmu di Hydra dan aktivitasmu di sekolah. Jika saya memahaminya dengan benar, laporan di sekolah akan membahas tentang algoritma bebas pemblokiran, dan di konferensi tentang struktur data ganda. Bisakah Anda menjelaskan sedikit tentang laporan ini?

Michael: Sebagian, kami telah membahas topik ini dengan Anda dalam wawancara ini. Ini tentang pekerjaan yang saya lakukan dengan murid saya Bill Scherer. Dia menulis tesis tentangnya, dan Doug Lee juga berkontribusi padanya, dan akhirnya menjadi bagian dari antrian sinkron multi-thread di perpustakaan Java. Mari kita asumsikan bahwa struktur data dibaca dan ditulis tanpa pemblokiran, yaitu setiap operasi memiliki sejumlah instruksi pada jalur kritis. Jika Anda mencoba menghapus data dari wadah kosong, atau mencoba menghapus data tertentu yang tidak ada dalam wadah ini, Anda akan segera diberitahu bahwa hal ini tidak dapat dilakukan. Namun perilaku ini mungkin tidak dapat diterima jika thread benar-benar membutuhkan data ini. Maka hal pertama yang terlintas dalam pikiran adalah membuat loop yang akan terus menanyakan apakah data yang diperlukan telah muncul. Tapi kemudian ada campur tangan untuk semua orang. Selain itu, dengan pendekatan ini, Anda dapat menunggu 10 menit, dan kemudian thread lain akan datang, dan secara tidak sengaja akan menerima data yang diperlukan terlebih dahulu. Struktur data ganda masih belum memiliki kunci, namun memungkinkan thread menunggu dengan benar. Istilah "ganda" berarti bahwa struktur tersebut berisi data atau permintaan data, sebut saja anti-data. Jadi jika Anda mencoba mengambil sesuatu dari wadah kosong, permintaan akan dimasukkan ke dalam wadah tersebut. Kini thread dapat menunggu permintaan tanpa mengganggu orang lain. Selain itu, struktur data menetapkan prioritas pada permintaan sehingga ketika diterima, permintaan tersebut diteruskan ke orang yang tepat. Hasilnya adalah mekanisme non-locking yang tetap memiliki spesifikasi formal dan kinerja yang baik dalam praktiknya. 

Alexey: Apa harapan Anda dari struktur data ini? Apakah ini akan meningkatkan kinerja dalam semua kasus umum, atau lebih cocok untuk situasi tertentu? 

Michael: Berguna jika, pertama, Anda memerlukan container tanpa mengunci, dan kedua, Anda harus menunggu dalam situasi di mana Anda perlu mengambil data dari container yang tidak ada di dalamnya. Sejauh pengetahuan saya, kerangka kerja kami memberikan perilaku optimal ketika kedua kondisi ini terpenuhi. Oleh karena itu, dalam kasus ini saya sarankan untuk menggunakannya. Keuntungan utama dari struktur data tanpa kunci adalah menghindari masalah kinerja. Dan menunggu sangat penting dalam banyak algoritma jika data ditransfer dari satu thread ke thread lainnya.

Vitali: Izinkan saya menjelaskan: apakah Anda akan membicarakan hal yang sama baik di sekolah maupun di konferensi?

Michael: Di sekolah aku akan bicara secara umum tentang struktur data multi-utas, dengan prinsip dasar yang diuraikan di awal pelajaran. Saya berasumsi penonton mengetahui apa itu thread dan familiar dengan kunci. Berdasarkan pengetahuan dasar ini, saya akan berbicara tentang struktur data bebas kunci. Saya akan memberikan gambaran umum tentang masalah paling penting di bidang ini, menyentuh topik seperti manajemen memori. Saya rasa tidak akan ada yang lebih rumit dari antrian MS.

Alexey: Apakah Anda berencana untuk mengajarkan tentang struktur data ganda di akhir kelas Anda di sekolah?

Michael: Saya akan menyebutkannya, tetapi saya tidak akan menghabiskan banyak waktu membahasnya. Laporan Hydra akan didedikasikan untuk mereka. Ini akan mencakup proyek yang akhirnya berhasil masuk ke Java, serta bekerja dengan Joe Israelevich untuk membuat varian ganda dari antrean LCRQ, dan menciptakan desain yang hampir universal untuk struktur data ganda.

Alexey: Jadi kuliah di sekolah bisa direkomendasikan untuk pemula, dan kuliah tentang struktur data ganda di Hydra - untuk orang yang sudah punya pengalaman?

Michael: Koreksi saya jika saya salah, namun audiens di Hydra akan cukup beragam, termasuk banyak pakar Java, dan secara umum orang-orang yang tidak secara khusus terlibat dalam pemrograman multi-thread. 

Vitali: Ya itu benar.

Alexey: Setidaknya kami berharap demikian.

Michael: Dalam hal ini, saya akan dihadapkan pada masalah yang sama dengan saat kita memulai wawancara ini: bagaimana membuat laporan yang cukup kaya akan rincian teknis dan dapat diakses oleh semua pendengar.

Vitali: Apakah Anda akan memberikan laporan seperti halnya Anda memberikan ceramah? Artinya, berbicara dengan penonton dan beradaptasi dengan situasi?

Michael: Saya khawatir hasilnya tidak akan seperti itu, karena laporannya akan memiliki slide. Slide penting ketika pendengar awalnya berbicara dalam bahasa yang berbeda. Banyak orang akan kesulitan memahami saya dalam bahasa Inggris, apalagi jika saya berbicara terlalu cepat. Saya memilih topik ini karena Pyotr Kuznetsov meminta saya untuk berbicara tentang struktur data bebas kunci di Sekolah SPTDC; dan kemudian saya memerlukan laporan untuk konferensi kelompok pengguna Java, dan saya ingin memilih sesuatu yang menarik secara khusus bagi pemrogram Java. Cara termudah adalah membicarakan hal-hal tersebut di perpustakaan Java yang saya miliki dalam satu atau lain cara. 

Alexey: Kami berasumsi bahwa pemirsa Hydra sudah mengetahui sesuatu tentang pemrograman bebas kunci dan mungkin memiliki pengalaman di bidang ini. Tapi ini hanya asumsi; situasinya akan menjadi lebih jelas pada konferensi itu sendiri. Bagaimanapun, terima kasih atas waktu Anda. Saya yakin wawancara ini akan sangat menarik bagi pembaca kami. Terima kasih banyak!

Vitali: Terima kasih. 

Michael: Saya akan senang bertemu Anda di St. Petersburg. 

Alexey: Kami juga, kami memiliki kota yang indah. Pernahkah kamu ke sini?

Michael: Tidak, saya belum pernah ke Rusia sama sekali. Namun Sankt Peterburg selalu masuk dalam daftar tempat yang belum pernah saya kunjungi, namun sangat ingin saya kunjungi, jadi saya sangat senang dengan undangan tersebut. 

Alexey: Ngomong-ngomong, kami akan mengadakan program tamasya untuk para pembicara. Terima kasih banyak atas wawancaranya, dan semoga harimu menyenangkan!

Anda dapat melanjutkan percakapan Anda dengan Michael di konferensi Hydra 2019 yang akan diadakan pada 11-12 Juli 2019 di St. Dia akan datang membawa laporan "Struktur data ganda". Tiket dapat dibeli di situs web resmi.

Sumber: www.habr.com

Tambah komentar