Advent of Compiler Optimisations 2025
(xania.org)- C/C++ कंपाइलर ऑप्टिमाइज़ेशन को केंद्र में रखने वाला 25-दिवसीय Advent Calendar परियोजना
- 1 दिसंबर से 25 दिसंबर तक हर दिन ब्लॉग पोस्ट और वीडियो के ज़रिए एक-एक ऑप्टिमाइज़ेशन केस पेश किया जाएगा
- हर पोस्ट में लागू होने का समय, assembly व्याख्या और गैर-लागू होने की स्थिति तक का विस्तार से विवरण शामिल है
- x86-64 केंद्रित, लेकिन 64-बिट और 32-बिट ARM architecture भी कुछ हद तक शामिल
- कंपाइलर के काम करने के तरीके को समझना चाहने वाले डेवलपर्स के लिए यह उच्च शैक्षणिक मूल्य वाली श्रृंखला है
Advent of Compiler Optimisations 2025 परियोजना अवलोकन
- करीब एक साल की तैयारी के बाद शुरू किया गया यह प्रोजेक्ट, दिसंबर के महीने में हर दिन एक नया कंपाइलर ऑप्टिमाइज़ेशन केस साझा करता है
- 12 दिसंबर से 25 दिसंबर तक हर दिन एक ब्लॉग पोस्ट और एक वीडियो पोस्ट किया जाता है
- प्रत्येक सामग्री C या C++ code पर आधारित होकर कंपाइलर द्वारा किए जाने वाले रोचक ऑप्टिमाइज़ेशन पर चर्चा करती है
- प्रत्येक ऑप्टिमाइज़ेशन में लागू होने की शर्तें, assembly code की व्याख्या, और जब यह लागू नहीं होता—इन सबका विस्तार से वर्णन किया गया है
- यह सिर्फ साधारण code तुलना नहीं, बल्कि वास्तविक कंपाइलर व्यवहार का विश्लेषण है
तकनीकी दायरा
- लो-लेवल आर्किटेक्चर-विशिष्ट ट्रिक्स से लेकर हाई-लेवल ऑप्टिमाइज़ेशन तकनीकों तक व्यापक रूप से कवर किया गया है
- मुख्यतः x86-64 पर केंद्रित, लेकिन कुछ सामग्री में 64-बिट और 32-बिट ARM से संबंधित भाग भी हैं
- कंपाइलर के आंतरिक कामकाज और code generation process को समझने के लिए एक व्यावहारिक संसाधन के रूप में तैयार किया गया है
सहभागिता और देखने का तरीका
- ब्लॉग के AoCO2025 टैग के जरिए सभी पोस्ट ट्रैक किए जा सकते हैं
- YouTube चैनल या विशेष प्लेलिस्ट से वीडियो देखे जा सकते हैं
- YouTube लिंक:
https://www.youtube.com/mattgodbolt - प्लेलिस्ट लिंक:
https://youtube.com/playlist?list=PL2HVqYf7If8cY4wLk7JUQ2f0JXY_xMQm2
- YouTube लिंक:
परियोजना का महत्व
- लगभग एक साल की तैयारी के बाद तैयार हुआ यह बड़ा निजी परियोजना, कंपाइलर की सूक्ष्मता और efficiency को समझने की मंशा से शुरू किया गया
- लक्ष्य यह है कि डेवलपर्स कंपाइलर ऑप्टिमाइज़ेशन के वास्तविक काम करने के तरीके समझें और कोड लिखते समय उनका उपयोग कर सकें—एक शिक्षणीय प्रयास के रूप में
- लेखक चाहते हैं कि “कंपाइलर कितना आश्चर्यजनक हो सकता है, यह सीखने का आनंद” वे सबके साथ बाँट सकें
Matt Godbolt परिचय
- शिकागो में रहने वाले C++ डेवलपर, जो Hudson River Trading में कार्यरत हैं
- Two’s Complement पॉडकास्ट के सह-होस्ट
- Mastodon और Bluesky पर सक्रिय
- ब्लॉग सामग्री Creative Commons BY-NC 3.0 Unported लाइसेंस के तहत उपलब्ध/वितरित है
1 टिप्पणियां
Hacker News राय
Matt के compiler optimization पर नज़र डालने के बाद, मैंने उनके साथ किया गया यह interview भी देखना अच्छा रहेगा
मुझे जिस बात पर यक़ीन हुआ है, वह यह है: जिस abstraction level पर आप सहज हों, उसी पर काम करें, लेकिन उसके नीचे की परतों को भी समझें
उदाहरण के लिए, अगर आप C programmer हैं, तो आपको यह समझना चाहिए कि C runtime operating system के साथ कैसे interact करता है। सभी details जानना ज़रूरी नहीं है, लेकिन समस्या आने पर कहाँ से देखना शुरू करना है, इसका अंदाज़ा होना चाहिए
Matt का लिखा ACM Queue लेख भी पुराना है, लेकिन ऐसे optimization concepts को समझने के लिए बहुत अच्छा शुरुआती लेख है
उदाहरण के लिए, Java के साथ काम करते समय JVM को समझने से मैं medical software की performance कहीं बेहतर ढंग से optimize कर पाया। और सिर्फ नीचे की layer को समझना अपने-आप में मज़ेदार भी है
यह बात प्रभावशाली है कि वह स्पष्ट रूप से एक domain expert हैं, फिर भी शुरुआत से ही जटिल x86 instruction set में कूदने के बजाय बुनियादी बातों से धीरे-धीरे समझाते हैं
Matt Godbolt, C और C++ community के लिए सचमुच एक रत्न हैं
Compiler Explorer और उनके योगदान की वजह से बहुत से developers की दुनिया बेहतर हुई है
मैं Advent of Computer Science Advent Calendars, Day 2 देख रहा हूँ
मुझे SQLite द्वारा इस्तेमाल की जाने वाली code amalgamation technique में बहुत दिलचस्पी है
SQLite team के मुताबिक, सिर्फ इसी तरीके से 5–10% performance improvement मिलती है। अच्छा होता अगर Matt session के दौरान इस विषय को कवर करते
संदर्भ: Unity build wiki
फिर भी non-incremental builds में LTO धीमा हो सकता है, इसलिए one-off builds में unity build अब भी उपयोगी है
25 साल से software development कर रहा हूँ, लेकिन अब भी सोचता हूँ कि क्या मैं optimal compiler flags इस्तेमाल कर रहा हूँ
ज़्यादातर मामलों में
-O2काफ़ी होता है। compiler update होने के साथ उसकी internal optimizations बेहतर होती रहती हैं, इसलिए developers को आमतौर पर खुद बहुत बारीकी से tuning करने की ज़रूरत नहीं पड़तीऔर गलत benchmark के आधार पर flags जोड़ना जोखिम भरा है। system state के हिसाब से 1–2% performance difference आम बात है
code structure बदलने से cache-friendliness बदल सकती है, और performance पर असर पड़ सकता है। यानी वजह flag नहीं, बल्कि code layout भी हो सकता है
आगे के posts का इंतज़ार है। आज सुबह मैंने SBCL को
(+ base (* index scale))और(+ base (ash index n))patterns को एक ही LEA instruction में optimize करना सिखाया। यानी Day 2 में सीखी हुई बात को तुरंत लागू कर लियाGodbolt content कभी भी ज़्यादा नहीं हो सकता
अच्छा होता अगर integer constants से division वाले operations पर भी बात होती। Hacker’s Delight का वह chapter शानदार है, लेकिन आम पाठकों को थोड़ा कठिन लग सकता है
यह compiler nerds के लिए Advent of Code जैसा है
हर दिन optimization पर छोटे-छोटे lessons के ज़रिए intuition बनाना — यह format बहुत पसंद आया
अगर आप समझ लें कि compiler क्या और क्यों करता है, तो आप किसी भी language में बेहतर programmer बन सकते हैं