4 पॉइंट द्वारा GN⁺ 2024-10-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Go की concurrency और parallelism का उपयोग

  • संख्यात्मक गणना क्षमता को बेहतर बनाने के लिए Go की concurrency और parallelism का उपयोग करने वाले एक प्रोजेक्ट का परिचय।
  • SIMD(Same Instruction Multiple Data) निर्देशों का उपयोग करके हार्डवेयर स्तर पर parallel गणना की जा सकती है।
  • Go का compiler SIMD का उपयोग नहीं करता, और उपयुक्त general-purpose SIMD package न मिलने पर स्वयं package विकसित करने का निर्णय लिया गया।

Plan9 assembly भाषा

  • Go अपनी खुद की Plan9 assembly भाषा का उपयोग करता है, जो किसी विशेष platform के instructions और registers को थोड़ा संशोधित करके इस्तेमाल करती है।
  • x86 Plan9 और ARM Plan9 एक-दूसरे से अलग हैं।
  • Plan9 के सरल उदाहरणों के माध्यम से इसकी बुनियादी उपयोग-विधि समझाई गई है।

Plan9 उदाहरण

  • AddInts_amd64.s फ़ाइल और main.go फ़ाइल के माध्यम से Plan9 में बुनियादी function declaration और उपयोग का तरीका समझाया गया है।
  • Go की calling convention के अनुसार function arguments और return values को stack में store करने का तरीका बताया गया है।

package design योजना

  • arithmetic और bit operation SIMD कार्यों के लिए एक पतली abstraction layer प्रदान करने वाला package डिज़ाइन किया गया है।
  • architecture-विशिष्ट Plan9 implementation शामिल करने वाला internal package बनाया जाता है, और initialization function के माध्यम से इसे सेट किया जाता है।

SIMD उदाहरण

  • x86 SIMD Plan9 function के उदाहरण के माध्यम से SIMD के उपयोग का तरीका समझाया गया है।
  • Supported_amd64.s और AddFloat32_amd64.s फ़ाइलों के जरिए SSE support की जाँच और float32 addition operation करने का तरीका दिखाया गया है।

performance और भविष्य

  • Go software implementation और Plan9 SIMD implementation के बीच performance अंतर दिखाने वाले chart से लगभग 200-450% speed improvement की पुष्टि होती है।
  • आशा है कि यह मेमो Plan9 और SIMD का उपयोग करने वाले प्रोजेक्ट्स के लिए प्रेरणा देगा।

# GN⁺ का सार

  • यह लेख Go की concurrency और parallelism का उपयोग करके performance को अधिकतम करने के तरीकों का परिचय देता है।
  • Plan9 assembly भाषा और SIMD निर्देशों का उपयोग करके हार्डवेयर स्तर पर parallel गणना करने के तरीके समझाए गए हैं।
  • यह लेख Go developers के लिए Plan9 और SIMD के उपयोग की संभावनाएँ दिखाता है और performance सुधार के लिए नए approaches तलाशने में उपयोगी हो सकता है।
  • समान कार्यक्षमता वाले प्रोजेक्ट्स के रूप में Rust की SIMD support libraries या C++ की SIMD-संबंधित libraries की सिफारिश की गई है।

1 टिप्पणियां

 
GN⁺ 2024-10-19
Hacker News टिप्पणियाँ
  • NOSPLIT के बारे में विवरण: Go assembly में frame size और argument size बताने के लिए एक अनोखा syntax है

    • frame size और argument size को - से अलग किया जाता है, और यह गणितीय subtraction नहीं है
    • go vet tool यह जांचता है कि argument size सही है या नहीं
  • LLM (large language model) की व्याख्या पर राय: code interpretation को लेकर गलतफ़हमी हो सकती है

    • अगर लेखक ईमानदारी से इसे स्वीकार करे, तो सीखने में मदद मिलेगी
  • Go की internal assembly language Plan9 का उल्लेख: Go अपनी खुद की assembly language का उपयोग करता है

    • amd64 में int 64-bit होता है, और int32 का उपयोग करने पर argument list में word alignment होता है
    • NOSPLIT textflag.h में defined है, और केवल runtime में valid है
  • Go assembly design पर Rob Pike की explanation: एक common assembly language बनाई गई ताकि नई syntax सीखे बिना machine से संवाद किया जा सके

    • नए architecture के documentation को input के रूप में इस्तेमाल करके assembler को automatically generate किया जा सकता है
  • SIMD operations के लिए function उपयोग पर राय: ऐसे functions की ज़रूरत है जो slice पर SIMD operations कर सकें

    • दो slice को जोड़ते समय for loop के बजाय SIMD का उपयोग करके parallel में process किया जा सकता है
  • Go compiler की design philosophy: complex compiler की बजाय simple और fast compiler को प्राथमिकता दी जाती है

    • default x64 support में SSE और SSE2 शामिल हैं, और performance से ज़्यादा simplicity को महत्व दिया जाता है
  • SIMD operations के लिए GPU उपयोग पर राय: GPU parallel processing और matrix operations में बेहतर है, इसलिए SIMD operations के लिए ज़्यादा उपयुक्त हो सकता है

    • लेकिन Go में GPU packages और community की कमी है, इसलिए यह उपयुक्त नहीं भी हो सकता है