شاید بپرسید دستورات SIMD چی هستن! این عبارت مخفف Single Instruction، Multiple Data هستش که به CPU اجازه میده تا یک عملیات منطقی یکسان رو به طور همزمان بر روی چندین داده انجام بده (نمونهش رو تو تصویر بالا میتونید ببینید) که منجر به افزایش چشمگیر سرعت میشه و البته توان مصرفی رو هم کمتر میکنه.
توی پروژههایی که اسم بردیم FFmpeg به طور فعالانهتری از این دستورات استفاده میکنه حتی سعی در آموزش و ترویج اسمبلی و دستورات SIMD داره. FFmpeg یک پروژهی اوپنسورس و رایگانه به نوعی چاقوی سوئیسی دنیای فایلهای صوتی و تصویریه که مجموعهای از کتابخانهها و ابزارها رو فراهم میکنه و به ما اجازه میده تقریباً هر کاری با فایلهای صوتی و تصویری انجام بدیم: تبدیل فرمتهای مختلف به یکدیگه (مثلاً تبدیل MOV به MP4)، جداسازی صدا از ویدئو، افزودن زیرنویس، برش و ویرایش بخشهایی از ویدئو، تغییر اندازهی ویدئو، آمادهسازی ویدئو برای پخش آنلاین با کیفیتهای مختلف، و حتی ایجاد استریم زنده و تو اکثر نرمافزارها و سیستمعاملهایی که روزانه باهاشون سروکار داریم هم استفاده میشه.
توی پروژه FFmpeg از دستوراتی مثل MMX، SSE، AVX و... برای انجام عملیاتهای زیر به صورت موازی استفاده میشه:
تبدیل فرمتهای رنگی مانند YUV به RGB و بالعکس : Color Space Conversion
تغییر اندازه فریمهای ویدئو: Resizing، Scaling
فیلترهای تصویری مثل: blur، sharpen، و deinterlace
تبدیل فوریه گسسته که تو کدکهای صوتی و تصویری استفاده میشه
و محاسبات ماتریسی مورد نیاز الگوریتمهای فشردهسازی
اگه دوست دارید در این مورد بیشتر بدونید و یاد بگیرید هم میتونید به مدرسه اسمبلی FFmpeg توی لینک زیر برید و از مطالبشون لذت ببرید.
https://github.com/FFmpeg/asm-lessons/blob/main/lesson_01/index.md