افزونه‌بردار پیشرفته

افزونه بردار پیشرفته (AVX، که همچنین به عنوان افزونه جدید Sandy Bridge خوانده می‌شود)، افزونه معماری مجموعه دستورالعمل‎های x86 برای ریزپردازنده‌های اینتل و AMD است که توسط اینتل در مارس ۲۰۰۸ پیشنهاد شده‌است و برای اولین بار توسط اینتل در پردازنده Sandy Bridge در Q1 2011 پشتیبانی شد؛ و بعد AMD با پردازنده بلدوزر در 2011 Q3 عرضه کرد. AVX ویژگی‌های جدید، دستورالعمل‌های جدید و طرح بندی جدید را فراهم می‌کند.

AVX2 اکثر دستورهای عدد صحیح (int) را به ۲۵۶ بیت گسترش می‌دهد و عملیات FMA را معرفی می‌کند. AVX-512، AVX را به پشتیبانی ۵۱۲ بیتی با استفاده از یک کدگذاری جدید پیشوندی EVEX prefix که توسط اینتل در ماه ژوئیه ۲۰۱۳ ارائه شده، گسترش می‌دهد و اولین بار توسط اینتل در پردازنده Knights Landing در سال ۲۰۱۶ عرضه شد.

افزونه بردار پیشرفته 
AVX از ۱۶ ثبات YMM استفاده می‌کند. هر ثبات YMM شامل موارد زیر است:
 هشت ثبات ۳۲ بیتی برای اعداد ممیز شناور تک دقت یا چهار ثبات ۶۴ بیتی برای اعداد ممیز شناور دو دقت.

طول ثبات‌های SIMD از ۱۲۸ بیت به ۲۵۶ بیت افزایش یافت و از XMM 0-XMM7 به YMM0-YMM7 (در حالت x86-64، YMM0-YMM15) تغییر نام پیدا کردند. در پردازنده‌هایی با پشتیبانی AVX، دستورالعمل‌هایی با پشتوانه SSE (که قبلاً در ثبات‌های ۱۲۸ بیتی XMM استفاده می‌شده‌است) را می‌توان با استفاده از کدگذاری VEX prefix برای کار بر روی ۱۲۸ بیت پایین از ثبات YMM گسترش داد.

AVX یک فرمت دستورالعمل SIMD با سه عملوند ارائه می‌دهد، بطوریکه ثبات مقصد از ثبات دو عملوند مرجع متمایز است. به عنوان مثال، یک دستور SSE با استفاده از فرم دو عاملی معمولی a = a + b را اکنون می‌توان با استفاده از یک فرم غیر مخرب سه عملوندی با حفظ هر دو عملوند مرجع به فرمc = a + b، جایگزین کرد. فرمت سه عملوندی AVX محدود به دستورالعمل‌های SIMD (YMM) است و شامل دستورالعمل‌هایی با استفاده از ثبات‌های همه منظوره نمی‌شود (مثلاً EAX). چنین پشتیبانی اولین بار در AVX2 ظاهر خواهد شد.

تراز مورد نیاز از عملوند حافظه SIMD آرام است.

شیوه جدید کدگذاری VEX (VEX coding scheme) مجموعه ای جدید از کدهای پیشوندی را به وجود می‌آورد که فضای opcode را گسترش می‌دهد و این امکان را فراهم می‌سازد که دستورالعمل‌ها بیش از دو عملوند و ثبات‌های بردار SIMD طولانی‌تر از ۱۲۸ بیت باشد. پیشوند VEX همچنین می‌تواند بر روی دستورالعمل‌های SSE مورد استفاده قرار گیرد و آن‌ها را به شکل سه عملوندی درآورد و آن‌ها را با استفاده از دستورهای AVX بدون نیاز به VZEROUPPER و VZEROALL به صورت تعاملی بیشتری بسازد.

دستورالعمل‌های AVX هر دو ثبات ۱۲۸ بیتی و ۲۵۶ بیتی SIMD را پشتیبانی می‌کنند. نسخه‌های ۱۲۸ بیتی می‌توانند برای بهبود کدهای قدیمی بدون نیاز به گسترش فشرده سازی، و با دوری از دشواری‌های رفتن از SSE به AVX، سریعتر از برخی از پیاده‌سازی‌های اولیه AMD برای AVX باشند. این حالت گاهی اوقات با نام AVX-128 شناخته می‌شود.

دستورالعمل‌های جدید 
این دستورالعمل‌های AVX علاوه بر آن‌هایی هستند که پسوندهای ۲۵۶ بیتی از دستورالعمل SSE 128 بیتی قدیمی را دارند؛ اکثر آن‌ها در هر دو حالت ۱۲۸ بیتی و ۲۵۶ بیتی قابل استفاده هستند.

CPU با AVX 
 اینتل
 پردازنده Sandy Bridge , Q1 2011
 پردازنده Sandy Bridge E، Q4 2011
 پردازنده Ivy Bridge , Q1 2012
 پردازنده Ivy Bridge E، Q3 2013
 پردازنده Haswell , Q2 2013
 پردازنده Haswell E، Q3 2014
 پردازنده Broadwell , Q4 2014
 پردازنده Broadwell E، Q2 2016
 پردازنده Skylake , Q3 2015
 پردازنده یاب Kaby , Q3 2016 (ULV mobile) / Q1 2017 (دسکتاپ / تلفن همراه)
 پردازنده Skylake-X، Q2 2017
 پردازنده یخچال قهوه، 2017 Q4
 پردازنده Cannon Lake (microarchitecture)، انتظار می‌رود در سال ۲۰۱۸ رونمایی شود
 پردازشگر Cascade Lake، انتظار می‌رود در سال ۲۰۱۸
 پردازنده یخ دریا، انتظار می‌رود در سال ۲۰۱۸

توجه: همه CPUهای خانواده‌های ذکر شده از AVX پشتیبانی نمی‌کنند. به‌طور کلی CPUها با نام تجاری Core i3 / i5 / i7 از آن‌ها پشتیبانی می‌کنند، در حالی که پردازنده‌های Pentium و Celeron پشتیبانی نمی‌کنند.
 AMD:
 پردازنده‌های Jaguar-based و جدیدتر
 پردازنده‌های Puma-based و جدیدتر
 پردازنده‌های «تجهیزات سنگین»
 پردازنده‌های مبتنی بر بولدوزر، Q4 2011
 پردازنده‌های Piledriver , Q4 2012
 پردازنده‌های مبتنی بر Steamroller , Q1 2014
 پردازنده‌های مبتنی بر بیل و جدیدتر، ۲۰۱۵
 پردازنده‌های مبتنی بر Zen , Q1 2017
 پردازنده‌های مبتنی بر Zen , Q2 2018

مسائل مربوط به سازگاری بین پردازنده‌های آینده اینتل و AMD در مجموعه دستورالعمل XOP مورد بحث قرار می‌گیرد.

پشتیبانی کامپایلر و اسمبلر 
GCC با نسخه ۴٫۶ آغاز می‌شود (هرچند شاخه ۴٫۳ با پشتیبانی خاصی وجود دارد) و مجموعه کامپایلر اینتل با نسخه ۱۱٫۱ پشتیبانی از AVX آغاز کرد. کامپایلر ویژوال استودیو ۲۰۱۰ / ۲۰۱۲ پشتیبانی از AVX را از طریق توابع ذاتی و / قوس: سوئیچ AVX انجام می‌دهد. نسخه ۴٫۵٫۱ کامپایلر Open64 AVX را با پرچم mavx پشتیبانی می‌کند. Absoft از پرچم -mavx پشتیبانی می‌کند. PathScale از پرچم -mavx پشتیبانی می‌کند. کامپایلر رایگان پاسکال از AVX و AVX2 با استفاده از سوئیچ‌های -CfAVX و -CfAVX2 از نسخه ۲٫۷٫۱ پشتیبانی می‌کند. کامپایلر Vector Pascal از AVX از طریق پرچم -cpuAVX32 پشتیبانی می‌کند. توابع اجرایی مونتاژ (GNU Assembler - GAS) این دستورالعمل‌ها را در اینلاین اسمبلی پشتیبانی می‌کنند (از طریق GCC قابل دسترسی هستند)، همان‌طور که در دستورهای ابتدایی Intel و اسمبلر Inline اینتل این کار را انجام می‌دهند (نزدیک به سازگار با GAS، اگرچه بیشتر در اداره ارجاعات محلی درون اینلاین اسمبلی به کار می‌رود). اسمبلرهای دیگر مانند نسخه MASM VS2010، YASM , FASM، NASM و JWASM نیز از این امکان برخوردارند.

پشتیبانی از سیستم عامل 
AVX ثبات-وضعیت جدیدی را از طریق ثبات‌های YMM 256 بیتی اضافه می‌کند، بنابراین برای حفظ و بازگرداندن رجیسترهای AVX از میان سوئیچ‌های متنی، نیاز به پشتیبانی صحیح سیستم عامل وجود دارد. نسخه‌های سیستم عامل زیر از پشتیبانی از AVX برخوردارند:
 DragonFly BSD: پشتیبانی در اوایل ۲۰۱۳ اضافه شد.
 FreeBSD: پشتیبانی در یک پچ افزوده شده در تاریخ ۲۱ ژانویه ۲۰۱۲ اضافه شد، که در نسخه ۹٫۱ باقی مانده منتشر شد
 لینوکس: پشتیبانی از نسخه کرنل ۲٫۶٫۳۰، در تاریخ ۹ ژوئن ۲۰۰۹ منتشر شد.
 macOS: پشتیبانی در ۱۰٫۶٫۸ (برفی پلنگ) به روز رسانی منتشر شده در تاریخ ۲۳ ژوئن ۲۰۱۱ اضافه شده‌است.
 OpenBSD: پشتیبانی در تاریخ ۲۱ مارس ۲۰۱۵ اضافه شد.
 Solaris: در Solaris 10 به روز رسانی ۱۰ و سولاریس ۱۱ پشتیبانی می‌شود
 ویندوز: در ویندوز 7 SP1 و ویندوز سرور 2008 R2 SP1، ویندوز ۸، ویندوز ۱۰ پشتیبانی می‌شود
 ویندوز سرور 2008 R2 SP1 با Hyper-V نیاز به یک اصلاحیه برای پشتیبانی از پردازنده‌های AMD AVX (Opteron 6200 و ۴۲۰۰)، KB2568088

افزونه بردار پیشرفته ۲ 
Extensions Vector Advanced 2 (AVX2)، همچنین به عنوان دستورالعمل‌های جدید Haswell شناخته می‌شود، یک توسعه مجموعه دستورالعمل‌های AVX است که در میکرو آرشیو فناوری Haswell توسط اینتل معرفی شده‌است. AVX2 موارد زیر را اضافه می‌کند:
 گسترش اکثر دستورهای SSE و AVX عددهای بردار به ۲۵۶ بیت
 ثبات‌های همه منظوره سه عملوندی جهت راحتی کار
 پشتیبانی را الگوریتم جمع‌آوری (Gather) که عناصر بردار را از مکان‌های حافظه غیر مجاور بارگذاری می‌کند
 جانشانی DWORD- و QWORD- به صورت دانه‌دانه در تغییرات بردار.

گاهی اوقات فرمت دیگری با استفاده از یک پرچم پردازنده دیگر بخشی از AVX2 محسوب می‌شود؛ این دستورالعمل‌ها در صفحه مخصوص به خود و نه در زیر ذکر شده‌است:
 پشتیبانی از سه عملوند چند ضلعی تجمع (fused multiply-accumulate) (FMA3)

دستورالعمل‌های جدید

پردازنده‌های AVX2 
 اینتل
 پردازنده Haswell , Q2 2013
 پردازنده Haswell E، Q3 2014
 پردازنده Broadwell , Q4 2014
 پردازنده Broadwell E، Q3 2016
 پردازنده Skylake , Q3 2015
 پردازنده یاب Kaby , Q3 2016 (ULV mobile) / Q1 2017 (دسکتاپ / تلفن همراه)
 پردازنده Skylake-X، Q2 2017
 پردازنده یخچال قهوه، 2017 Q4
 پردازنده کانن دریاچه، انتظار می‌رود در سال ۲۰۱۸ رونمایی شود
 پردازشگر آبشار Cascade Lake، انتظار می‌رود در سال ۲۰۱۹ رونمایی شود
 پردازنده یخ دریا، انتظار می‌رود در سال ۲۰۱۹
 AMD رونمایی شود
 پردازنده بیل مکانیکی و جدیدتر، Q2 2015
 پردازنده ذن، Q1 2017
 پردازنده Zen + , Q2 2018

AVX-512 
AVX-512 512 بیتی برای ۲۵۶ بیت پیشرفته Extension Vector Extensions دستورالعمل SIMD برای معماری مجموعه دستورالعمل x86 ارائه شده توسط اینتل در ماه ژوئیه ۲۰۱۳ است و برنامه‌ریزی شده در سال ۲۰۱۵ با پردازشگر Knights Landing اینتل پشتیبانی می‌شود.

دستورهای AVX-512 با پیشوند جدید EVEX رمزگذاری می‌شود. این شیوه ۴ عملوند، ۷ ثبات opmask جدید ۶۴ بیتی، حالت حافظه اسکالر با پخش خودکار، کنترل صحیح گرد کردن اعداد و حالت آدرس دهی حافظه جابجایی فشرده فراهم می‌کند. طول ثبات‌ها به ۵۱۲ بیت افزایش می‌یابد و تعداد کل ثبات‌ها در حالت x86-64 به ۳۲ عدد (ثبات‌های ZMM0-ZMM31) افزایش می‌یابد.

AVX-512 شامل چندین افزونه است که به معنای آن نیست که همه آن‌ها توسط تمام پردازنده‌ها پشتیبانی می‌شوند. مجموعه دستورالعمل اضافه شده شامل موارد زیر است:
 بنیاد AVX-512- چندین دستورالعمل جدید اضافه می‌کند و بیشتر دستورات۳۲ بیتی و ۶۴ بیتی SSE-SSE4.1 و AVX/AVX2 را با کدگذاری EVEX برای پشتیبانی از ثبات‌های ۵۱۲ بیتی، ماسک‌های عملیاتی، پخش پارامتر، گرد کردن نهفته اعداد و کنترل استثناءها گسترش می‌دهد.
 دستورالعمل تشخیص اختلال AVX-512 (CD) شناسایی تعارض کارآمد برای اجازه دادن به حلقه‌های بیشتر برای فشرده سازی که توسط Knights Landing پشتیبانی می‌شود.
 دستورالعمل‌های نمایی و متقابل AVX-512 (ER) عملیات نمایی و متقابل، برای کمک به عملیات غیر جبری طراحی شده که توسط Knights Landing پشتیبانی می‌شود.
 دستورالعمل Prefetch AVX-512 (PF) قابلیت پیش واکشی جدید، پشتیبانی شده توسط Knights Landing
 AVX-512 Extensions Length Vector (VL) اکثر عملیات AVX-512 را گسترش می‌دهد و همچنین بر روی ثبات‌های XMM (128 بیتی) و YMM (256 بیت) عمل می‌کند. (از جمله XMM16-XMM31 و YMM16-YMM31 در حالت x86-64)
 دستورالعمل AVX-512 بایت و کلمه (BW) AVX-512 برای پوشش عملیات عددی ۸ بیتی و ۱۶ بیتی گسترش داده شده‌است
 دستورالعمل AVX-512 دوکلمه و چهار کلمه عملیات عددی ۳۲ بیتی و ۶۴ بیتی بهبود یافته
 اضافه کردن Fused Multiply Add AVX-512 Integer (IFMA) جمع عدد صحیح ۵۱۲ بیتی به صورت IFMA اضافه شده‌است. 
 دستورالعمل‌های دستکاری بایت‌های AVX-512 (VBMI) دستورالعمل‌های جایگزینی را اضافه می‌کند که در AVX-512BW وجود ندارد.
 دستورالعمل‌های شبکه عصبی AVX-512 Vector دقت متغیر (4VNNIW) دستورالعمل‌های برداری برای یادگیری عمیق
 AVX-512 انباشت چند ضلعی بسته‌بندی شده تک دقت (4FMAPS) دستورالعمل‌های برداری برای یادگیری عمیق
 VPOPCNTDQ تعداد بیت‌های ۱ شده.
 VPCLMULQDQ در ضرب اعداد چهار کلمه‌ای
 دستورالعمل شبکه شبکه عصبی AVX-512 (VNNI) دستورالعمل‌های برداری برای یادگیری عمیق
 AVX-512 Galois Field New Instructions (GFNI) دستورالعمل‌های برداری برای محاسبه میدان گالویز.
 دستورالعملهای AES-AVR-512 (VAES) دستورالعمل‌های برداری برای برنامه‌نویسی AES.
 دستورالعمل‌های دستکاری بایت AVX-512 2 (VBMI2) بار، ذخیره و الحاق کلمه/بایت به وسیله شیفت.
 الگوریتم‌های بیت AVX-512 (BITALG) دستورالعمل دستکاری بیت بایت / کلمه بسط داده شده VPOPCNTDQ.

تنها فرمت هسته AVX-512F (AVX-512 Foundation) مورد نیاز تمام پیاده‌سازی‌ها است، هرچند تمام پردازنده‌های فعلی نیز از CD پشتیبانی می‌کنند (شناسایی تعارض)؛ محاسبه پردازنده‌های کمکی و مجتمع علاوه بر این از ER, PF، 4VNNIW، 4FMAPS و VPOPCNTDQ نیز پشتیبانی خواهند کرد، در حالی که پردازنده‌های دسکتاپ از VL, DQ, BW, IFMA, VBMI, VPOPCNTDQ, VPCLMULQDQ و غیره پشتیبانی می‌کنند.

دستورالعمل‌های SSE / AVX به روز شده در AVX-512F از همان روش‌هایی مانند نسخه‌های AVX استفاده می‌کنند؛ آن‌ها می‌توانند در ثبات ۵۱۲ بیتی ZMM عمل کنند و همچنین از ۱۲۸/۲۵۶ بیت ثبات XMM / YMM (با AVX-512VL) و بایت، کلمه، دو کلمه، چهار کلمه و اعداد صحیح (با AVX-512BW / DQ و VBMI) پشتیبانی خواهند کرد.

پردازنده‌های AVX-512

کامپایلرهای پشتیبانی کننده از AVX-512 
 GCC 4.9 و جدیدتر
 کلاه ۳٫۹ و جدیدتر
 ICC 15.0.1 و جدیدتر
 مایکروسافت ویژوال استودیو ۲۰۱۷ کامپایلر سی ++
 جاوا 9

کاربردها 
 مناسب برای محاسبات ممیز شناور - در برنامه‌های چند رسانه ای، علمی و مالی (AVX2 پشتیبانی از عملیات عدد صحیح را اضافه می‌کند).
 افزایش موازی سازی و توانایی در محاسبات ممیز شناور با SIMD.
 به دلیل دستورالعمل‌های غیر مخرب بار ثبات‌ها را کاهش می‌دهد.
 بهبود عملکرد نرم‌افزار لینوکس RAID (مورد نیاز AVX2، AVX کافی نیست)

نرم‌افزار 
 Blender از AVX2 در چرخه موتور رندر استفاده می‌کند.
 OpenSSL از نسخه ۱٫۰٫۲ از توابع رمزنگاری بهینه شده AVX و AVX2 استفاده می‌کند. این پشتیبانی نیز در کلون‌ها و چنگال‌های مختلف مانند LibreSSL وجود دارد
 Prime95 / MPrime، نرم‌افزاری که برای GIMPS استفاده می‌شود، از زمان انتشار نسخه 27.x از دستورالعمل AVX شروع شده‌است.
 dav1d AV1 decoder می‌تواند از AVX2 بر روی CPUهای پشتیبانی شده‌استفاده کند.
 Dnetc، نرم‌افزاری که توسط distributed.net استفاده می‌شود، دارای یک هسته AVX2 برای پروژه RC5 خود است و به زودی یکی از آن را برای پروژه OGR-28 خود منتشر خواهد کرد.
 انیشتین @ Home با استفاده از AVX در برخی از برنامه‌های توزیع شده خود که برای امواج گرانشی جستجو می کنند.
 RPCS3، شبیه‌ساز PlayStation 3 منبع باز، از دستورالعمل‌های AVX2 و AVX-512 برای تقلید از بازی‌های PS3 استفاده می‌کند.
 رابط دستگاه شبکه، NDI® یک پروتکل ویدیویی / صوتی IP است که توسط NewTek برای پخش مستقیم پخش شده‌است، از AVX و AVX2 برای افزایش کارایی استفاده می‌کند.
 Tensorflow از نسخه ۱٫۶ نیاز به پردازنده پشتیبانی حداقل AVX.
 Xenia نیاز به دستورالعمل AVX برای اجرا دارد.
 رمزگذارهای ویدئویی x264 و x265 می‌توانند AVX2 یا AVX-512 را برای سرعت بخشیدن به رمزگذاری استفاده کنند.
 انواع مختلف پردازنده‌های مبتنی بر cryptocurrency مبتنی بر (مانند cpuminer pooler برای Bitcoin و Litecoin) از AVX و AVX2 برای رویه‌های مربوط به گریوتوگرافی مختلف، از جمله SHA-256 و Script استفاده می‌کنند.
 libsodium از AVX در اجرای ضرب عددی برای الگوریتم‌هایCurve25519 و Ed25519 ا، از AVX2 برای BLAKE2b , Salsa20، ChaCha20 و AVX2 و AVX-512 در اجرای Argon2 استفاده می‌کند.
 پیاده‌سازی مرجع open source libvpx VP8 / VP9 encoder / decoder، از AVX2 یا AVX512 در صورت موجود بودن استفاده می‌کند.
 FFTW می‌تواند از AVX, AVX2 و AVX-512 در صورت موجود بودن استفاده کند.
 LLVMpipe یک نرم‌افزار رندر OpenGL در Mesa با استفاده از زیرساخت‌های Gallium و LLVM، از AVX2 در صورت موجود بودن استفاده می‌کند.
 glibc با استفاده از AVX2 (با FMA) برای اجرای بهینه (یعنی expf, sinf, powf, atanf, atan2f) از توابع ریاضی مختلف در libc استفاده می‌کند.
 هسته لینوکس با استفاده از AVX یا AVX2، همراه با AES-NI به عنوان بهینه‌سازی اجرای الگوریتم رمزنگاری AES-GCM می‌تواند استفاده کند.
 کرنل لینوکس با استفاده از AVX یا AVX2 که در دسترس است، در اجرای بهینه شده از چندین رمزگذاری دیگر بهره می‌برد: Camellia, CAST5، CAST6، Serpent, Twofish, MORUS-1280 و دیگر Primitives: Poly1305، SHA1، SHA256، SHA512، ChaCha20.
 POCL، یک زبان رایانه قابل حمل که اجرای OpenCL را فراهم می‌کند، از AVX, AVX2 و AVX512 در صورت امکان استفاده می‌کند.
 . هسته اصلی و . چارچوب NET می‌تواند AVX را از طریق سیستم استفاده کند. عددی کتابخانه وکتورها.

جستارهای وابسته 
 افزونه‌های حفاظت از حافظه Memory Protection Extensions
 Extension Vector Scalable برای ARM - یک مجموعه دستورالعمل جدید بردار (تکمیل VFP و NEON) شبیه به AVX-512 با برخی از ویژگی‌های اضافی است.

منابع 

دستورالعمل‌های اکس۸۶
رایانش یک دستور چند داده
صفحات با ترجمه بازبینی‌نشده
فناوری‌های دستگاه‌های میکرو پیشرفته