3 पॉइंट द्वारा GN⁺ 2023-12-29 | 1 टिप्पणियां | WhatsApp पर शेयर करें

4 अरब if स्टेटमेंट्स

  • हाल ही में social media देखते समय ट्रेन में यह screenshot मिला।
  • यह कोड time-memory tradeoff का एक बेहतरीन उदाहरण है।
  • performance बढ़ाने के लिए इसे C में implement करने की कोशिश की गई।

कोड की संरचना

  • C में even और odd पहचानने वाला कोड लिखा गया।
  • optimization बंद करके compile किया गया।
  • 0 से 10 तक के numbers पर यह सही चलता है, लेकिन उससे बड़े numbers पर समस्या आती है।

Meta programming

  • Python का उपयोग करके if statements को meta programming से generate किया गया।
  • 8-bit integers के लिए even और odd पहचानने वाला program बनाया गया।

16-bit विस्तार

  • 16-bit integers के लिए इसी तरीके से program को बढ़ाया गया।
  • लगभग 130k lines की C file generate करके compile की गई।

32-bit चुनौती

  • 32-bit integers के लिए program को बढ़ाने की कोशिश की गई।
  • 330GB की C file generate हुई, लेकिन compiler heap space की कमी के कारण fail हो गया।
  • Portable Executable format की सीमा के कारण 4GB से बड़ी files को process नहीं किया जा सका।

सीधे machine code लिखना

  • x86-64 assembly language में सीधे IsEven function लिखा गया।
  • Python का उपयोग करके machine code को manually compile किया गया।

executable file बनाना

  • 40GB की file बनाई गई जो सभी 32-bit integers के लिए even और odd पहचानती है।
  • file को memory map किया गया और function pointer का उपयोग करके code चलाया गया।

अंतिम bug fix

  • unsigned integer parsing की समस्या हल करने के लिए strtoul function से replace किया गया।
  • program बहुत तेज़ है और बड़े numbers के लिए भी 10 सेकंड के भीतर result देता है।

GN⁺ की राय

  • महत्त्व: यह लेख programming के एक बुनियादी concept, time-memory tradeoff, को समझने में मदद करता है। साथ ही, यह दिखाता है कि unoptimized code का वास्तविक performance पर क्या असर पड़ता है।
  • रोचकता: programming languages के बीच performance के अंतर और compiler की सीमाओं को प्रयोगात्मक रूप से खंगालने की प्रक्रिया दिलचस्प है। खासकर Python और C की तुलना करते हुए performance सुधारने की कोशिश मज़ेदार है।
  • सीख: यह लेख दिखाता है कि जटिल समस्याओं को हल करने के लिए कभी-कभी जो approach अक्षम लगती है, वह वास्तव में उपयोगी हो सकती है। साथ ही, यह computer science में रचनात्मक solutions खोजने के महत्त्व पर ज़ोर देता है।

1 टिप्पणियां

 
GN⁺ 2023-12-29
Hacker News राय
  • पहली टिप्पणी का सार:

    • 1996 में, 16 साल की उम्र में लिखे गए अपने पहले प्रोग्राम की याद.
    • linear algebra की किताब के computer graphics appendix को देखकर घूमते हुए wireframe बनाने वाले प्रोग्राम में डूब जाना.
    • arrays के बारे में न जानने के कारण variables को hardcode करना, और rotation matrix के हर entry को भी variable के रूप में सेट करना.
    • pointers की जानकारी होने के कारण स्क्रीन पर ड्रॉ करने के लिए memory address में सीधे लिखना.
  • दूसरी टिप्पणी का सार:

    • code generation जैसी जटिल approach के बजाय एक साधारण for loop से हल होने वाला उदाहरण पेश किया गया.
  • तीसरी टिप्पणी का सार:

    • is-even और is-odd npm package पर मज़ाक.
    • npm install इस्तेमाल करने पर 40GB का package डाउनलोड होने की कल्पना.
  • चौथी टिप्पणी का सार:

    • even और odd को वर्गीकृत करने के लिए database इस्तेमाल करने का सुझाव.
    • SQLite database में numbers और उनके classification को map कर देने पर प्रोग्राम अपडेट करने की ज़रूरत नहीं होगी.
  • पाँचवीं टिप्पणी का सार:

    • लेख को बहुत मज़ेदार बताया.
    • source code को ऑनलाइन सार्वजनिक करना चाहिए ताकि ChatGPT उस पर training कर सके, ऐसी राय.
  • छठी टिप्पणी का सार:

    • distributed version के लिए एक idea पेश किया गया.
    • हर host अपने domain name से मेल खाने की जाँच करे और result लौटाए, ऐसा तरीका.
  • सातवीं टिप्पणी का सार:

    • इस तकनीक को AWS को बेचकर AWS EvenOrOdd API के रूप में देने का सुझाव.
    • cloud की ताकत का उपयोग करने पर प्रोग्राम और ज़्यादा शक्तिशाली हो जाएगा, ऐसी राय.
  • आठवीं टिप्पणी का सार:

    • 40GB के instructions को 800MB/s * 10 सेकंड की disk read speed से कैसे प्रोसेस किया जा सकता है, इस पर सवाल.
    • OS level की smart caching या CPU द्वारा instructions को skip करने जैसी optimization होने का अनुमान.
  • नौवीं टिप्पणी का सार:

    • lookup table का उपयोग करके महंगे operations से बचने की तकनीक की व्याख्या.
    • libdivide library के उदाहरण के साथ 8-bit integer division को lookup table से बदलने का अनुभव साझा किया.
  • दसवीं टिप्पणी का सार:

    • binary search का उपयोग करके optimization का सुझाव.
    • nested if-else statements के जरिए O(logN) time complexity में चलाने के तरीके पर मज़ाक.