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

**افزونه بردار پیشرفته** (**AVX**، که همچنین به عنوان **افزونه جدید Sandy Bridge** خوانده می‌شود)، افزونه معماری مجموعه دستورالعمل‎های x86 برای ریزپردازنده‌های اینتل و AMD است که توسط اینتل در مارس ۲۰۰۸ پیشنهاد شده‌است و برای اولین بار توسط اینتل در پردازنده '''سندی بریج''' در 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) مجموعه ای جدید از کدهای پیشوندی را به وجود می‌آورد که فضای **[[آپ‌کد]]** را گسترش می‌دهد و این امکان را فراهم می‌سازد که دستورالعمل‌ها بیش از دو عملوند و ثبات‌های بردار 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 پشتیبانی نمی‌کنند.
* **[[ای‌ام‌دی]]**:
** پردازنده‌های Jaguar-based و جدیدتر
** پردازنده‌های Puma-based و جدیدتر
** پردازنده‌های «تجهیزات سنگین»
*** پردازنده‌های مبتنی بر بولدوزر، Q4 2011
*** پردازنده‌های Piledriver , Q4 2012
*** پردازنده‌های مبتنی بر Steamroller , Q1 2014
*** پردازنده‌های مبتنی بر بیل و جدیدتر، ۲۰۱۵
** پردازنده‌های مبتنی بر Zen , Q1 2017
** پردازنده‌های مبتنی بر Zen , Q2 2018

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

### پشتیبانی کامپایلر و اسمبلر
**[[جی‌سی‌سی]]** با نسخه ۴٫۶ آغاز می‌شود (هرچند شاخه ۴٫۳ با پشتیبانی خاصی وجود دارد) و مجموعه کامپایلر اینتل با نسخه ۱۱٫۱ پشتیبانی از 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 برخوردارند:
* **[[دراگون‌فلای بی‌اس‌دی]]**: پشتیبانی در اوایل ۲۰۱۳ اضافه شد.
* **[[فری‌بی‌اس‌دی]]**: پشتیبانی در یک پچ افزوده شده در تاریخ ۲۱ ژانویه ۲۰۱۲ اضافه شد، که در نسخه ۹٫۱ باقی مانده منتشر شد
* لینوکس: پشتیبانی از نسخه کرنل ۲٫۶٫۳۰، در تاریخ ۹ ژوئن ۲۰۰۹ منتشر شد.
* 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 با برخی از ویژگی‌های اضافی است.

## منابع

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