12 पॉइंट द्वारा GN⁺ 2024-11-06 | 6 टिप्पणियां | WhatsApp पर शेयर करें
  • आधुनिक high-level programming languages और उन्नत compilers software development को काफी सरल बनाते हैं और लागत घटाते हैं, लेकिन API की अक्षमताओं के कारण वे अक्सर आधुनिक hardware की performance capabilities को छिपा देते हैं
  • FFmpeg developers के अनुसार, assembly code का उपयोग करने पर workload के हिसाब से performance में 3 गुना से 94 गुना तक सुधार हो सकता है
  • FFmpeg के भीतर कुछ विशेष functions को तेज़ करने के लिए AVX-512 instruction set का उपयोग कर optimized code paths बनाए गए, और standard implementation की तुलना में कहीं बेहतर performance हासिल की गई
  • AVX-512, 512-bit registers का उपयोग करता है, जिससे एक ही operation में 16 single-precision FLOP या 8 double-precision FLOP को process किया जा सकता है, इसलिए बड़े पैमाने पर data को parallel में संभाला जा सकता है
  • benchmarking results के अनुसार, नया handwritten AVX-512 code path baseline C code, AVX2 और SSE3 जैसे lower SIMD instruction sets वाली अन्य implementations की तुलना में काफी तेज़ है
  • यह development खास तौर पर उन users के लिए उपयोगी है जो AVX-512 support वाले hardware पर काम करते हैं, क्योंकि वे media content को कहीं अधिक दक्षता से process कर सकते हैं
  • हालांकि, Intel ने 12th-gen, 13th-gen और 14th-gen Core processors में AVX-512 को disable कर दिया है, जिससे इन CPU के मालिक इसका उपयोग नहीं कर सकते
  • दूसरी ओर, AMD की Ryzen 9000 series CPU में पूरी तरह enabled AVX-512 FPU मिलता है, इसलिए इन processors के मालिक FFmpeg के इस सुधार का लाभ उठा सकते हैं
  • दुर्भाग्य से, AVX-512 की जटिलता और विशिष्टता के कारण ऐसे optimizations आम तौर पर performance-critical applications तक सीमित रहते हैं, और इनके लिए low-level programming तथा processor microarchitecture की विशेषज्ञ समझ चाहिए
    ( यह सामग्री Tom's Hardware के FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code से ली गई है )

6 टिप्पणियां

 
gurugio 2024-11-08

पहले इस तरह के संबंधित काम को थोड़े समय के लिए करने का अनुभव रहा है, इसलिए कहूँ तो सबसे पहले 94x एक attention-grabber है।
जैसा कि टिप्पणियों में कहा गया है, scalar/vector code के अंतर की वजह से performance में बड़ा फर्क दिखा है।
लेकिन ज़्यादातर commercial codec assembly coding के ज़रिए optimization करते हैं।
"ज़्यादातर C code optimal assembly code में compile हो जाता है" यह बात सही है, लेकिन commercial product विकसित करने के लिए उस "ज़्यादातर" स्तर से ऊपर जाना पड़ता है। खासकर embedded क्षेत्र में यह और भी महत्वपूर्ण है।

 
GN⁺ 2024-11-06
Hacker News राय
  • FFmpeg के एक खास फ़िल्टर में 94 गुना performance improvement होने का दावा थोड़ा भ्रामक है। ज़्यादातर users पहले से ही AVX/SSE का इस्तेमाल कर रहे थे, इसलिए C code optimization की ज़रूरत नहीं थी
    • FFmpeg में CPU का मुख्य उपयोग encoding और decoding में होता है, और इस बार का improvement उस पर असर नहीं डालता
  • यह hand-written assembly code और non-assembly code की तुलना नहीं है, बल्कि scalar code और vector code की तुलना है
    • AVX intrinsics का उपयोग करके C code लिखा जाए तो assembly code के बिना भी लगभग इसी तरह की speedup मिल सकती है
  • कुछ खास मामलों में hand-written assembly code फ़ायदेमंद हो सकता है
    • video decoder में बहुत tight loops होते हैं, इसलिए performance consistency बनाए रखने के लिए assembly code की ज़रूरत पड़ती है
  • FFmpeg team intrinsics के उपयोग को मना करती है और platform-specific code को assembly में लिखने की मांग करती है
    • assembly code, अगर पर्याप्त मेहनत की जाए, तो हमेशा ज़्यादा तेज़ हो सकता है, लेकिन intrinsics से कम मेहनत में भी बहुत क़रीबी performance मिल सकती है
  • 94 गुना improvement dav1d का optimization है, जिसे सिर्फ FFmpeg ही नहीं बल्कि दूसरे programs में भी इस्तेमाल किया जा सकता है
    • RISC-V (64-bit) optimization के लिए request है, और interested लोगों के लिए यह अच्छा मौका है
  • LuaJIT के Mike Pall ने assembly code लिखने के फ़ायदों के बारे में समझाया था
  • microbenchmark में एक single function, C code की तुलना में 94 गुना तेज़ हो गया
  • Intel ने Core 12, 13, 14th-gen processors में AVX-512 disable किया है
    • इसके पीछे साफ़ वजह नहीं मिल पाई
  • performance issue हल करने से पहले bottleneck की पहचान का काम अक्सर पर्याप्त रूप से नहीं किया जाता
    • ज़्यादातर C code, optimal assembly code में compile हो जाता है
  • performance improvement की वजह hand-written assembly code नहीं, बल्कि AVX-512 SIMD instructions का उपयोग है
    • इसे gcc की AVX-512 vectorization से compare करके देखना चाहूँगा
 
maclier 2024-11-06

Intel की नई Downfall AVX2/AVX-512 vulnerability और इसके कारण पड़ने वाला भारी performance impact

https://tuxcare.com/ko/blog/…

 
cosine20 2024-11-08

आह, तो Intel ने AVX-512 को हटाया ही इसलिए था।

 
shlee1503 2024-11-10

मेरा मानना है कि वजह उससे ज़्यादा यह थी कि E-core AVX-512 को सपोर्ट नहीं करते थे, इसलिए इसे software स्तर पर ब्लॉक किया गया था।
P-core अनौपचारिक रूप से AVX-512 को सपोर्ट करते थे।

 
cosine20 2024-11-11

अच्छा, समझ गया। बताने के लिए धन्यवाद :)