• एक साधारण integer summation function को compile करते समय GCC और Clang की optimization में अंतर देखने का मामला
  • GCC loop के भीतर एक बार में दो संख्याएँ जोड़ने वाली x*2 + 1 रूप की loop optimization करता है
  • Clang loop को पूरी तरह हटा देता है और गणना को v(v - 1)/2 के closed-form formula से बदल देता है
  • इस रूपांतरण से कोड O(n) से O(1) में बदल जाता है, और गणितीय simplification अपने-आप हो जाती है
  • 20 साल से अधिक समय से compiler के साथ काम कर रहे लेखक को भी चौंका देने वाला यह उदाहरण, compiler की intelligent optimization क्षमता दिखाता है

GCC की loop optimization

  • जब एक साधारण integer summation function लिखा गया, तो GCC ने loop-आधारित efficient summation code generate किया
    • loop के भीतर lea edx, [rdx+1+rax*2] instruction का उपयोग करके दो संख्याएँ एक साथ जोड़ी गईं
    • यह x और x+1 को जोड़ने की operation को x*2 + 1 में बदलने का रूप है
  • optimization level को -O3 तक बढ़ाने पर parallel addition (vectorization) के जरिए loop को और तेज़ी से process किया जाता है
  • यह तरीका loop को बनाए रखते हुए भी operation efficiency को अधिकतम करने वाली पारंपरिक optimization का रूप है

Clang की गणितीय optimization

  • वही कोड Clang से compile करने पर loop पूरी तरह गायब हो जाता है
    • Clang input value के positive होने की जाँच करने के बाद lea, imul, shr instructions की एक श्रृंखला से गणना करता है
    • नतीजतन, इसे (v² - v)/2, यानी integer sum के closed-form formula में बदला जाता है
  • यह रूपांतरण loop को हटाकर constant-time (O(1)) calculation से बदल देता है
  • लेखक ने इस परिणाम को “integer sum का गणितीय हल compiler ने खुद खोज लिया” जैसा बताया

सूत्र के विस्तार की प्रक्रिया

  • Clang द्वारा generate किए गए assembly code को गणितीय रूप से उल्टा समझने पर निम्नलिखित रूपांतरण दिखाई देता है
    • v + ((v - 1)(v - 2) / 2) - 1
    • इसे विस्तार और सरलीकरण करने पर यह (v² - v)/2 बन जाता है
  • अंततः यह v(v - 1)/2 के रूप में आता है, जो 1 से v तक के योग के सूत्र से मेल खाता है
  • इसे compiler द्वारा गणितीय pattern पहचानकर की गई optimization के उदाहरण के रूप में प्रस्तुत किया गया है

compiler का intelligent व्यवहार

  • Clang इस विशेष instruction sequence का उपयोग क्यों करता है, इसे overflow से बचाव और induction variable tracking के तरीके से समझाया गया है
  • सटीक internal behavior का कारण पूरी तरह स्पष्ट नहीं है, लेकिन इसे Clang की internal optimization logic के संयुक्त प्रभाव का परिणाम बताया गया है
  • लेखक ने इस नतीजे को “विनम्र बनाने वाला और प्रेरक अनुभव” कहा

समापन और series का संदर्भ

  • यह लेख ‘Advent of Compiler Optimisations 2025’ series का 24वाँ लेख है
  • इसमें यह देखा गया है कि compiler code transformation के जरिए गणितीय simplification और performance improvement कैसे हासिल करता है
  • लेखक कहते हैं, “compiler आज भी मुझे चौंकाते हैं,” और लंबे अनुभव के बावजूद बने रहने वाले तकनीकी विस्मय पर ज़ोर देते हैं

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.