CS 6120: एडवांस्ड कम्पाइलर का self-guided online course
(cs.cornell.edu)- Cornell CS के PhD-स्तर के कोर्स CS 6120 को online follow करने के लिए lecture videos, notes, paper readings और implementation assignments को मिलाकर बनाया गया self-guided curriculum है
- Intermediate representation, data flow और classical optimization जैसे compiler के core topics से लेकर parallelization, JIT compilation और garbage collection तक कवर करता है
- Practical work में LLVM और teaching IR Bril का उपयोग होता है, और abstract concepts को खुद implement करके देखने वाले open-source hacking assignments तक जाता है
- Self-guided version में deadlines को ignore किया जा सकता है, लेकिन असली class की Zulip discussions और end-of-semester project में भाग नहीं लिया जा सकता
- Materials GitHub पर open source के रूप में उपलब्ध हैं, issues report किए जा सकते हैं, और course पूरा करने के बाद feedback form भरा जा सकता है
Course कैसे लें और इसका scope
- CS 6120, Cornell CS के Adrian Sampson द्वारा बनाया गया programming languages implementation course है
- Course scope में compiler implementation की common foundations और research-oriented topics दोनों शामिल हैं
- Intermediate representations
- Data flow
- “Classical” optimizations
- Parallelization
- JIT compilation
- Garbage collection
- Learning paper readings और open-source hacking assignments के जरिए होती है
- Self-guided curriculum को “imaginary university” में 4-credit, ungraded course लेने के format में व्यवस्थित किया गया है
- Lectures linear order में रखे गए हैं
- हर lesson में video और written notes हैं
- कुछ lessons में implementation assignments शामिल हैं
- Video watching और paper reading को mix करके चलने के लिए recommended order तय किया गया है
असली class से फर्क
- Self-guided learners assignment deadlines को ignore कर सकते हैं
- असली class की Zulip discussions में भाग नहीं लिया जा सकता
- असली CS 6120 में end-of-semester project होता है
- Self-guided version का end-of-semester assignment है “compiler magic से दुनिया बदलना”
- Lecture production quality, खासकर शुरुआती lessons में, कम हो सकती है
- CS 6120 materials GitHub पर open source के रूप में उपलब्ध हैं, और कोई problem मिलने पर bug report किया जा सकता है
- Course पूरा करने के बाद feedback form भरा जा सकता है
Lessons और reading materials
- 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 टिप्पणियां
Hacker News की टिप्पणियाँ
जब मैं स्नातक पूरा करके अपनी पहली फुल-टाइम नौकरी ढूंढ रहा था, तब इस कोर्स की वजह से मैं MANGA(Meta, Apple, NVIDIA, Google, Amazon) की compiler engineering टीमों के इंटरव्यू पास कर पाया
University of Waterloo का low-level computing systems curriculum भी शानदार था और मैं open source compiler projects में भी योगदान दे रहा था, लेकिन इंटरव्यू के सबसे कठिन सवालों के जवाब देने में इस कोर्स ने वास्तव में बहुत मदद की
इसे अधिक स्वाभाविक लिखना हो तो “my university has the low level computing systems curriculum par excellence” जैसा कुछ बेहतर होता
मेरा मानना है कि compiler लिखने से पहले computer architecture को समझना और यह जानना ज़रूरी है कि सबसे efficient machine code बनाने के लिए compiler को क्या generate करना चाहिए
लेकिन मेरे अनुभव में स्कूल और विश्वविद्यालय computer architecture, यहाँ तक कि systems programming को भी, धीरे-धीरे कम प्राथमिकता दे रहे हैं, शायद इसलिए कि उन्हें यह बहुत ज़्यादा technical लगता है
फिर भी, यह ज्ञान industry में अच्छी नौकरियाँ पाने के लिए बहुत महत्वपूर्ण है
विश्वविद्यालयों के साथ काम करते हुए मुझे जो मूल समस्या दिखी, वह यह है कि सीमित teaching time में कवर किए जाने वाले संभावित विषय बहुत ज़्यादा हैं
हमारे क्षेत्र में जानने योग्य जानकारी की मात्रा समय के साथ घातीय रूप से बढ़ी है और पहले ही सीमा से आगे निकल चुकी है, इसलिए general track में systems programming के लिए कम समय होना इस बात का तर्कसंगत परिणाम है कि हर साल अधिक छात्रों के लिए इसकी प्रासंगिकता कम होती जा रही है
compiler स्तर पर अभी भी बहुत काम करना होता है, लेकिन उसका एक बड़ा हिस्सा ऐसा होना चाहिए जिसमें computer की microarchitecture तक ध्यान देने की ज़रूरत न पड़े
भले ही x86 या MIPS पढ़ने की ज़रूरत न हो, CUDA उनसे भी अधिक अजीब architecture दिखाता है
low-level विषयों पर ज़ोर न देने की सामान्य वजह यह है कि वे implementation-specific होते हैं, जल्दी पुराने पड़ जाते हैं, और उनका सामान्यीकरण करना कठिन होता है
साथ ही, मैं आम तौर पर “systems programmer” किस्म के लोगों से बहुत मेल नहीं खाता, क्योंकि उनमें इस तरह की बेहद specific trivia को अपनी पूरी पेशेवर पहचान बना लेने की प्रवृत्ति होती है; इसलिए ऐसे लोग मिल जाते हैं जो assembly लिख सकते हैं लेकिन functor क्या होता है यह नहीं जानते
ऐसा लगता है कि advanced compiler optimization को गहराई से कवर करने वाली अच्छी academic सामग्री नहीं है
मैंने बहुत खोजा, लेकिन ज़्यादातर कोर्स शुरुआती स्तर के थे, और जो तकनीकें सच में रोचक हैं उनके लिए लोकप्रिय open source compilers के source code में गहराई तक जाना पड़ता है, जो मुझे काफ़ी चौंकाने वाला लगा
मेरा मानना है कि compiler ऐसा क्षेत्र है जिसमें लगभग 30 साल तक बहुत बड़ा विकास नहीं हुआ
जब मैंने 2004~2006 में Perugia University में पढ़ाया था, तब भी मैं 15~25 साल पुरानी सामग्री बिना किसी बड़ी समस्या के इस्तेमाल कर सकता था
अब लगता है कि हालात बदल गए हैं
सिर्फ उन चीज़ों को देखें जिन्हें 2004~2006 में नई सामग्री के रूप में पढ़ाया जा सकता था लेकिन शायद नहीं पढ़ाया गया: SSA construction, SLP vectorization, और automated peephole superoptimization; और यह तो बस वही है जो अभी तुरंत दिमाग में आया
जो नहीं बदला, वह compiler textbooks हैं। वे parser generators बनाने के तरीक़ों पर अत्यधिक ध्यान देती हैं और वास्तव में compiler को कैसे design करना है, आधुनिक computer architecture design की तो बात ही छोड़िए, इस पर लगभग कुछ नहीं कहतीं। यह शिकायत दशकों से मौजूद है
पिछले 10 सालों में परिदृश्य incremental compilation तकनीकों की दिशा में काफ़ी विकसित हुआ है
सैद्धांतिक प्रगति भले अधिकतर parser तक सीमित हो, लेकिन वास्तविक implementation पूरे pipeline में global program optimization और code generation तक फैली हुई है
हर नई processor generation के साथ instructions और options बढ़ते हैं, और ऐसा लगता है कि compiler के लिए नई optimizations और combinations उपलब्ध हो जाते हैं
pure functional languages के लिए compiler लिखना हो तो निश्चित रूप से नई सामग्री चाहिए होगी
मुझे खुशी है कि इस तरह का कोर्स मौजूद है
अब मैं advanced topics को अपनी गति से, मार्गदर्शन के साथ, सीख सकता हूँ
मैं हमेशा से compiler engineer का career चाहता था, लेकिन जहाँ मैं रहता हूँ वहाँ शिक्षा और नौकरी के अवसर बहुत कम हैं
अमेरिका को देखूँ तो hiring market की प्रतिस्पर्धा बहुत ही भारी लगती है, और सच कहूँ तो समझ नहीं आता कि इसमें प्रवेश कैसे करूँ
मेरे पास जो अनुभव है वह बस undergraduate के दौरान लिया गया एक कोर्स है, लेकिन वह कोर्स वास्तव में शुरू से अंत तक शानदार था
शायद इसलिए कि इसमें आपको ऐसा code लिखना पड़ता है जो दूसरे code को manipulate करता है, और उसके semantics तथा behavioral goals काफ़ी अलग होते हैं। ऊपर से इसमें बहुत-सा oral tradition और noise भी है
इसलिए compiler teams उन लोगों को विशेष रूप से पसंद करती हैं जो पहले से लंबे समय से compiler बना रहे हों। लेकिन स्वाभाविक रूप से एक bootstrapping problem भी है, इसलिए बड़ी teams ऐसे graduates को भी रखती हैं जिनमें यह curve पार करने की क्षमता दिखती हो; मैं भी लगभग इसी तरह इस क्षेत्र में आया
अगर आपके पास सामान्य career experience है लेकिन compiler experience नहीं है, तो एक साफ़ रणनीति यह है कि पहले ऐसी कंपनी में जाएँ जहाँ आप परिचित काम कर सकें और वहाँ compiler team भी हो — मोटे तौर पर कोई “काफ़ी बड़ी software company” — और फिर lateral move की कोशिश करें
यह अच्छा है कि इसमें “A Unified Theory of Garbage Collection” भी शामिल है
कम-से-कम ये छात्र reference counting और tracing garbage collection के बीच का अंतर ठीक से समझेंगे
अगर “CS 6120 Adrian Sampson का programming language implementation पर Cornell CS का PhD-level course” है, तो क्या यह काफ़ी advanced course है?
मुझे नहीं लगता कि computer science में मेरा स्तर PhD-level का है
बस इसे करके देखिए; अगर आप कर लेते हैं तो आप तैयार हैं, नहीं कर पाते तो अभी नहीं हैं
बस एक बार कोशिश करके देखिए
20 साल पहले Gerhard Goos द्वारा पढ़ाए गए सामान्य compiler construction course में जो चीज़ें थीं, यह अब भी मोटे तौर पर वैसा ही लगता है
इसमें नए papers के links भी हैं, इसलिए शायद मैं उन्हें भी देखूँगा
मुझे Steven Muchnick की Advanced Compiler Design and Implementation किताब पसंद थी
18 साल से compiler source code नहीं देखा है, इसलिए खासकर profiling और path-based optimization वाले हिस्सों में लगता है कि मैं पीछे रह गया हूँ, और आजकल machine learning को देखते हुए शायद अब अधिक advanced SIMD से जुड़ी सामग्री भी बहुत होगी
कुछ साल पहले गर्मियों में मैंने यह online course follow किया था और सच में बहुत कुछ सीखा
Bril IR की एक छोटी issue पर मैंने PR भेजा था, और professor के साथ मिलकर उसे ठीक करने की प्रक्रिया बहुत immersive थी
क्या इस course का कोई prerequisite course है?
[1] https://www.cs.cornell.edu/courses/cs4120/2022sp/