परिचय
- FFmpeg की असेंबली भाषा कक्षा में आपका स्वागत है। यह कक्षा FFmpeg में असेंबली भाषा कैसे लिखी जाती है, इसकी बुनियादी समझ देती है।
आवश्यक ज्ञान
- C भाषा, खासकर pointers के बारे में जानकारी आवश्यक है।
- हाई स्कूल स्तर का गणितीय ज्ञान (scalar और vector, जोड़, गुणा आदि) आवश्यक है।
असेंबली भाषा क्या है?
- असेंबली भाषा एक प्रोग्रामिंग भाषा है जिसमें CPU द्वारा प्रोसेस किए जाने वाले निर्देशों के सीधे अनुरूप कोड लिखा जाता है।
- FFmpeg का अधिकांश असेंबली कोड SIMD(Single Instruction Multiple Data) है, जिसे vector programming भी कहा जाता है।
- SIMD उन बड़े डेटा सेट्स को प्रोसेस करने के लिए उपयुक्त है जो image, video, audio की तरह memory में क्रमबद्ध रूप से संग्रहीत होते हैं।
असेंबली भाषा में क्यों लिखते हैं?
- मल्टीमीडिया प्रोसेसिंग की गति बढ़ाने के लिए। असेंबली कोड में लिखने पर 10 गुना या उससे अधिक speedup मिल सकता है।
- FFmpeg में intrinsics का उपयोग नहीं किया जाता, बल्कि सीधे असेंबली कोड लिखा जाता है। intrinsics आमतौर पर hand-written assembly की तुलना में 10-15% धीमे होते हैं।
असेंबली भाषा के प्रकार
- यह कक्षा x86 64-बिट असेंबली भाषा पर केंद्रित है। इसे amd64 भी कहा जाता है और यह Intel CPU पर भी काम करती है।
- x86 असेंबली syntax के दो प्रकार हैं: AT&T और Intel, और हम Intel syntax का उपयोग करेंगे।
संदर्भ सामग्री
- FFmpeg असेंबली प्रोग्रामिंग high-performance image processing पर केंद्रित है और इसका दृष्टिकोण अनोखा है।
- "The Art of 64-bit assembly" पुस्तक के diagrams सहायक हो सकते हैं।
रजिस्टर
- रजिस्टर CPU में वह क्षेत्र हैं जहाँ डेटा प्रोसेस किया जाता है। CPU memory को सीधे manipulate नहीं करता, बल्कि डेटा को registers में load करके प्रोसेस करता है और फिर उसे वापस memory में लिखता है।
सामान्य प्रयोजन रजिस्टर
- सामान्य प्रयोजन रजिस्टर (GPR) में डेटा या memory address हो सकता है। FFmpeg के असेंबली कोड में GPR मुख्य रूप से आधार की भूमिका निभाते हैं।
वेक्टर रजिस्टर
- vector (SIMD) registers में कई डेटा elements होते हैं। vector registers के कई प्रकार मौजूद हैं।
- अधिकांश video compression और decompression गणनाएँ integer-आधारित होती हैं।
x86inc.asm शामिल करना
- x86inc.asm एक हल्की abstraction layer है, जिसका उपयोग FFmpeg, x264, और dav1d में असेंबली प्रोग्रामरों का काम आसान बनाने के लिए किया जाता है।
सरल scalar असेंबली कोड
- उदाहरण कोड के माध्यम से समझाया गया है कि scalar असेंबली कोड कैसे काम करता है।
बुनियादी vector function को समझना
- पहले SIMD function उदाहरण के माध्यम से हर पंक्ति का अर्थ समझाया गया है।
movu, paddb जैसे निर्देशों का उपयोग करके vector operations किए जाते हैं।
- function arguments के डेटा को modify करता है और कोई value return नहीं करता।
1 टिप्पणियां
Hacker News राय
इसी विषय पर एक और संदर्भ के रूप में FFmpeg और dav1d के उदाहरण हैं
मुझे लगता है कि assembly लिखने की तुलना में intrinsics का उपयोग करना अधिक मूल्यवान है, लेकिन इसे पढ़ना बहुत उपयोगी था
मुझे लगता है कि यह guide बहुत शानदार है
मुझे जिज्ञासा है कि assembly सीखने या लागू करने में कोई "मज़ा" है या नहीं
qsuffix pointer size को दर्शाता है, और 64-bit system में यह 8 होता हैi.eकोi.e.,होना चाहिए, और*(*को opening parenthesis होना चाहिएsizeofpointer return नहीं करताK&R संदर्भ की प्रशंसा
assembly उपयोग करने की कमी यह है कि code architecture-dependent हो जाता है
inline assembly के विरोध को लेकर भ्रम है
यह सामग्री परफेक्ट है
मुझे जिज्ञासा है कि क्या assembly का C से 10 गुना तेज़ होना अभी भी सच है