3 पॉइंट द्वारा GN⁺ 2024-03-04 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 के जरिए होती है
    • Practical work में LLVM और class के लिए teaching IR Bril का उपयोग होता है
  • 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

1 टिप्पणियां

 
GN⁺ 2024-03-04
Hacker News की टिप्पणियाँ
  • जब मैं स्नातक पूरा करके अपनी पहली फुल-टाइम नौकरी ढूंढ रहा था, तब इस कोर्स की वजह से मैं MANGA(Meta, Apple, NVIDIA, Google, Amazon) की compiler engineering टीमों के इंटरव्यू पास कर पाया
    University of Waterloo का low-level computing systems curriculum भी शानदार था और मैं open source compiler projects में भी योगदान दे रहा था, लेकिन इंटरव्यू के सबसे कठिन सवालों के जवाब देने में इस कोर्स ने वास्तव में बहुत मदद की

    • “par excellent” नहीं, par excellence है, और उस वाक्य की बनावट में भी अटपटा लगता है
      इसे अधिक स्वाभाविक लिखना हो तो “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 में अच्छी नौकरियाँ पाने के लिए बहुत महत्वपूर्ण है

    • यह बात सही है कि विश्वविद्यालय systems programming की प्राथमिकता घटा रहे हैं, लेकिन वजह “बहुत technical” होना नहीं है
      विश्वविद्यालयों के साथ काम करते हुए मुझे जो मूल समस्या दिखी, वह यह है कि सीमित teaching time में कवर किए जाने वाले संभावित विषय बहुत ज़्यादा हैं
      हमारे क्षेत्र में जानने योग्य जानकारी की मात्रा समय के साथ घातीय रूप से बढ़ी है और पहले ही सीमा से आगे निकल चुकी है, इसलिए general track में systems programming के लिए कम समय होना इस बात का तर्कसंगत परिणाम है कि हर साल अधिक छात्रों के लिए इसकी प्रासंगिकता कम होती जा रही है
    • क्या आप industry में अच्छी नौकरियाँ से क्या मतलब है, और आप ऐसा क्यों मानते हैं, इस पर थोड़ा और बता सकते हैं?
    • मेरा मानना है कि इस तरह के low-level details के बिना भी compilers का इस्तेमाल कर पाना industry की बड़ी प्रगति में से एक है
      compiler स्तर पर अभी भी बहुत काम करना होता है, लेकिन उसका एक बड़ा हिस्सा ऐसा होना चाहिए जिसमें computer की microarchitecture तक ध्यान देने की ज़रूरत न पड़े
    • GPU से जुड़ा काम अभी भी computer architecture और compiler skills की काफ़ी मांग करता है
      भले ही x86 या MIPS पढ़ने की ज़रूरत न हो, CUDA उनसे भी अधिक अजीब architecture दिखाता है
    • मेरे अनुभव में कोई भी low-level details को “बहुत technical” नहीं मानता
      low-level विषयों पर ज़ोर न देने की सामान्य वजह यह है कि वे implementation-specific होते हैं, जल्दी पुराने पड़ जाते हैं, और उनका सामान्यीकरण करना कठिन होता है
      साथ ही, मैं आम तौर पर “systems programmer” किस्म के लोगों से बहुत मेल नहीं खाता, क्योंकि उनमें इस तरह की बेहद specific trivia को अपनी पूरी पेशेवर पहचान बना लेने की प्रवृत्ति होती है; इसलिए ऐसे लोग मिल जाते हैं जो assembly लिख सकते हैं लेकिन functor क्या होता है यह नहीं जानते
  • ऐसा लगता है कि advanced compiler optimization को गहराई से कवर करने वाली अच्छी academic सामग्री नहीं है
    मैंने बहुत खोजा, लेकिन ज़्यादातर कोर्स शुरुआती स्तर के थे, और जो तकनीकें सच में रोचक हैं उनके लिए लोकप्रिय open source compilers के source code में गहराई तक जाना पड़ता है, जो मुझे काफ़ी चौंकाने वाला लगा

    • ज़्यादातर academic courses parsing पर ज़रूरत से ज़्यादा केंद्रित लगते हैं, और बाकी सब कुछ बस सतही तौर पर पढ़ाते हैं
  • मेरा मानना है कि 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 तक फैली हुई है
    • उसके बाद से compiler testing काफ़ी बदल गई है, और बड़े पैमाने पर random testing प्रचलन में आ गई
    • मैं compiler design या implementation में विशेषज्ञ नहीं हूँ, लेकिन compiler जिन machine code और assembly को target करते हैं, वे समय के साथ काफ़ी बदले लगते हैं
      हर नई processor generation के साथ instructions और options बढ़ते हैं, और ऐसा लगता है कि compiler के लिए नई optimizations और combinations उपलब्ध हो जाते हैं
    • शायद इसलिए कि अधिकांश programming languages imperative शैली, loops, और व्यापक side effects जैसी बातों में बहुत नहीं बदली हैं
      pure functional languages के लिए compiler लिखना हो तो निश्चित रूप से नई सामग्री चाहिए होगी
  • मुझे खुशी है कि इस तरह का कोर्स मौजूद है
    अब मैं advanced topics को अपनी गति से, मार्गदर्शन के साथ, सीख सकता हूँ
    मैं हमेशा से compiler engineer का career चाहता था, लेकिन जहाँ मैं रहता हूँ वहाँ शिक्षा और नौकरी के अवसर बहुत कम हैं
    अमेरिका को देखूँ तो hiring market की प्रतिस्पर्धा बहुत ही भारी लगती है, और सच कहूँ तो समझ नहीं आता कि इसमें प्रवेश कैसे करूँ
    मेरे पास जो अनुभव है वह बस undergraduate के दौरान लिया गया एक कोर्स है, लेकिन वह कोर्स वास्तव में शुरू से अंत तक शानदार था

    • इस क्षेत्र में एक कठोर learning curve है जिसे बहुत से लोग पार नहीं कर पाते
      शायद इसलिए कि इसमें आपको ऐसा 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 का है

    • तैयारी के स्तर को पारंपरिक degree stages से मापना बेहतर नहीं है
      बस इसे करके देखिए; अगर आप कर लेते हैं तो आप तैयार हैं, नहीं कर पाते तो अभी नहीं हैं
    • PhD course होने का मतलब यह नहीं कि वह undergraduate से ज़्यादा कठिन ही होगा
      बस एक बार कोशिश करके देखिए
  • 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 है?