CS 6120: İleri Derleyiciler için Kendi Temponuzda Çevrimiçi Ders
(cs.cornell.edu)- Cornell CS'nin doktora düzeyindeki CS 6120 dersi için çevrimiçi olarak takip edilebilecek, ders videolarını, notları, makale okumalarını ve uygulama ödevlerini bir araya getiren kendi temponuzda ilerlenen bir müfredat
- Ara gösterimler, veri akışı ve klasik optimizasyonlar gibi derleyicilerin temel konularından paralelleştirme, JIT derleme ve çöp toplama konularına kadar uzanıyor
- Uygulamalarda LLVM ve eğitim amaçlı IR olan Bril kullanılıyor; soyut kavramları doğrudan hayata geçirmeyi sağlayan açık kaynak hackleme ödevleriyle devam ediyor
- Kendi temposunda sürümde son teslim tarihleri göz ardı edilebilse de gerçek dersin Zulip tartışmalarına ve dönem sonu projesine katılım mümkün değil
- Materyaller GitHub'da açık kaynak olarak yayımlanıyor; sorun bildirebilir ve dersi tamamladıktan sonra geri bildirim formunu doldurabilirsiniz
Dersin işlenişi ve kapsadığı alanlar
- CS 6120, Cornell CS bünyesinde Adrian Sampson tarafından hazırlanan bir programlama dilleri gerçekleştirim dersidir
- Ders kapsamı, derleyici gerçekleştirimine yönelik ortak temelleri ve araştırma odaklı konuları birlikte içerir
- Ara gösterimler
- Veri akışı
- “Klasik” optimizasyonlar
- Paralelleştirme
- JIT derleme
- Çöp toplama
- Öğrenme süreci makale okumaları ve açık kaynak hackleme ödevleri üzerinden ilerler
- Kendi temponuzda ilerlenen müfredat, “hayali bir üniversitede” 4 kredilik, not verilmeyen bir ders alıyormuşsunuz gibi düzenlenmiştir
- Dersler doğrusal bir sırayla dizilmiştir
- Her derste video ve yazılı notlar bulunur
- Bazı derslerde uygulama ödevleri yer alır
- Video izleme ile makale okumayı harmanlayacak önerilen bir sıra sunulur
Gerçek dersten farkları
- Kendi temposunda öğrenenler ödev son teslim tarihlerini dikkate almayabilir
- Gerçek dersteki Zulip tartışmalarına katılamaz
- Gerçek CS 6120 dersinde bir dönem sonu projesi bulunur
- Kendi temposundaki sürümün dönem sonu ödevi, “derleyici büyüsüyle dünyayı değiştirmek”tir
- Özellikle ilk derslerde üretim kalitesi düşük olabilir
- CS 6120 materyalleri GitHub üzerinde açık kaynak olarak yayımlanır; bir sorun bulursanız hata bildirebilirsiniz
- Tamamladıktan sonra geri bildirim formunu doldurabilirsiniz
Dersler ve okuma materyalleri
- Lesson 1: Welcome & Overview
- Lesson 2: Representing Programs
- Lesson 3: Local Analysis & Optimization
- Lesson 4: Data Flow
- Lesson 5: Global Analysis
- Lesson 6: Static Single Assignment
- Lesson 7: LLVM
- Lesson 8: Loop Optimization
- Lesson 9: Interprocedural Analysis
- Lesson 10: Alias Analysis
- video
- A Unified Theory of Garbage Collection, OOPSLA 2004
- Fast Conservative Garbage Collection, OOPSLA 2014
- Lesson 11: Memory Management
- Lesson 12: Dynamic Compilers
- Lesson 13: Program Synthesis
- Lesson 14: Concurrency & Parallelism
1 yorum
Hacker News yorumları
Lisansı bitirip ilk tam zamanlı işimi ararken, bu ders sayesinde MANGA’nın (Meta, Apple, NVIDIA, Google, Amazon) derleyici mühendisliği ekiplerindeki mülakatları geçebildim
University of Waterloo’nun düşük seviyeli bilişim sistemleri müfredatı da çok iyiydi ve açık kaynak derleyici projelerine de katkı yapıyordum; ama mülakattaki en zor soruları yanıtlamamda asıl büyük yardımı bu ders sağladı
Daha doğal yazmak için “my university has the low level computing systems curriculum par excellence” gibi bir ifade daha iyi olurdu
Derleyici yazmadan önce bilgisayar mimarisini anlamak ve en verimli makine kodunu üretmek için derleyicinin ne üretmesi gerektiğini bilmek gerektiğini düşünüyorum
Ancak deneyimime göre okullar ve üniversiteler bilgisayar mimarisini, hatta sistem programlamayı bile giderek öncelik listesinden düşürüyor; muhtemelen fazla teknik gördükleri için
Yine de bu bilgi, sektörde iyi işler bulmak için çok önemli
Üniversitelerle çalışırken gördüğüm temel sorun, sınırlı ders saatine sığdırılması gereken potansiyel içeriğin aşırı fazla olması
Alanımızda bilinmesi gereken bilgi miktarı zamanla üstel biçimde artıyor ve zaten sınırları aşmış durumda; bu yüzden genel yolda sistem programlama ders saatlerinin azalması, her yıl daha fazla öğrenci için daha az ilgili hale gelmesinden kaynaklanıyor ve makul
Derleyici düzeyinde hâlâ yapılacak çok iş var, ama bunların önemli bir kısmı bilgisayarın mikromimari düzeyine kadar düşünmeyi gerektirmemeli
x86 ya da MIPS çalışmaya gerek olmasa bile CUDA, onlardan daha tuhaf bir yapı gösteriyor
Düşük seviyeli konuların vurgulanmamasının olağan nedeni, uygulamaya göre değişmeleri, hızla eskimeleri ve genelleştirilmelerinin zor olması
Ayrıca “sistem programcısı” tipiyle pek uyuşmuyorum; bu kişiler bu aşırı spesifik ansiklopedik bilgileri tüm mesleki kimlikleri haline getirme eğiliminde olduğundan, assembly yazabilen ama functor’ın ne olduğunu bilmeyen insanlar ortaya çıkabiliyor
İleri düzey derleyici optimizasyonunu derinlemesine ele alan iyi akademik materyal yok gibi
Çok aradım ama derslerin çoğu giriş seviyesinde; gerçekten ilginç teknikler için popüler açık kaynak derleyicilerin kaynak kodunun derinlerine inmek gerekiyor, bu da beni epey şaşırttı
Derleyicilerin yaklaşık 30 yıldır pek ilerlemeyen alanlardan biri olduğunu düşünüyorum
2004~2006’da Perugia University’de ders verirken 15~25 yıllık materyalleri pek sorun yaşamadan kullanabiliyordum
Son zamanlarda durum değişmiş gibi
2004~2006’da yeni içerik olarak öğretebileceğin ama muhtemelen işlemediğin şeylerden sadece aklıma ilk gelenler SSA inşası, SLP vektörleştirme ve otomatik peephole süperoptimizasyonu
Değişmeyen şey derleyici ders kitapları. Parser üreteci yapmaya gereğinden fazla odaklanıyorlar; derleyicinin pratikte nasıl tasarlanacağını, modern bilgisayar mimarisi tasarımını ise neredeyse hiç anlatmıyorlar. Bu şikâyet onlarca yıldır var
Son 10 yılda manzara artımlı derleme teknikleri yönünde ciddi biçimde evrildi
Teorik ilerleme çoğunlukla parser’larda sıkışmış durumda, ama gerçek uygulamalar tüm pipeline boyunca küresel program optimizasyonundan kod üretimine kadar uzanıyor
Her yeni işlemci nesliyle komutlar ve seçenekler arttıkça derleyicilerin yararlanabileceği yeni optimizasyonlar ya da kombinasyonlar ortaya çıkıyor gibi görünüyor
Saf fonksiyonel diller için derleyici yazmak istiyorsan kesinlikle yeni materyallere ihtiyaç olur
Böyle bir ders olduğu için sevindim
Artık ileri konularda yönlendirme alarak kendi hızımda ilerleyebilirim
Hep derleyici mühendisi kariyeri istemiştim, ama yaşadığım yerde eğitim ve iş fırsatları çok değil
ABD’ye bakınca işe alım piyasasındaki rekabet inanılmaz sert görünüyor ve açıkçası bu alana nasıl gireceğimi bilmiyorum
Sahip olduğum deneyim, lisans sırasında aldığım tek bir dersten ibaret; ama o dersin tamamı gerçekten çok iyiydi
Başka kodu manipüle eden kod yazmak gerekiyor ve genelde semantik ile davranış hedefleri epey farklı oluyor. Üstüne çok fazla sözlü aktarılan bilgi ve gürültü de var
Bu yüzden derleyici ekipleri, zaten uzun süredir derleyici geliştirmiş kişileri özellikle tercih ediyor. Ama elbette bir bootstrapping sorunu var; bu nedenle büyük ekipler o eğriyi aşma potansiyeli görünen mezunları da alıyor, ben de kabaca böyle girdim
Genel olarak deneyimin var ama derleyici deneyimin yoksa, alışık olduğun işi yapan ve aynı zamanda derleyici ekibi de bulunan bir şirkete, kabaca “oldukça büyük bir yazılım şirketine” girip yatay geçiş kovalamak belirgin bir strateji
“A Unified Theory of Garbage Collection”ın da dahil olması güzel
En azından bu öğrenciler referans sayımı ile izlemeli çöp toplama arasındaki farkı doğru anlayacak
“CS 6120, Adrian Sampson’ın programlama dili uygulaması üzerine Cornell CS doktora düzeyi dersi” ise, epey ileri düzey bir ders mi?
Bilgisayar bilimlerinde kendimi doktora düzeyinde görmüyorum
Sadece dene; yapabiliyorsan hazırsındır, yapamıyorsan henüz değilsindir
Sadece bir dene
20 yıl önce Gerhard Goos’un verdiği genel derleyici inşası dersinde işlenenlerle hâlâ genel olarak benzer görünüyor
Daha yeni makalelere de bağlantı verilmiş, bir bakılabilir
Steven Muchnick’in Advanced Compiler Design and Implementation kitabını severdim
18 yıldır derleyici kaynak kodu görmediğim için özellikle profil çıkarma ve yol tabanlı optimizasyon tarafında geri kalmış hissediyorum; günümüzde makine öğrenmesine bakınca daha ileri SIMD konularının da çokça ortaya çıkmış olabileceğini düşünüyorum
Birkaç yıl önce yazın bu çevrimiçi dersi takip ettim ve gerçekten çok şey öğrendim
Bril IR’daki küçük bir issue için PR açıp profesörle birlikte düzeltme süreci çok sürükleyiciydi
Bu dersin ön koşul dersi olup olmadığını merak ediyorum
[1] https://www.cs.cornell.edu/courses/cs4120/2022sp/