افزونهبردار پیشرفته
افزونه بردار پیشرفته (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 گسترش داد.
511 256 | 255 128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ZMM1 | YMM1 | XMM1 |
ZMM2 | YMM2 | XMM2 |
ZMM3 | YMM3 | XMM3 |
ZMM4 | YMM4 | XMM4 |
ZMM5 | YMM5 | XMM5 |
ZMM6 | YMM6 | XMM6 |
ZMM7 | YMM7 | XMM7 |
ZMM8 | YMM8 | XMM8 |
ZMM9 | YMM9 | XMM9 |
ZMM10 | YMM10 | XMM10 |
ZMM11 | YMM11 | XMM11 |
ZMM12 | YMM12 | XMM12 |
ZMM13 | YMM13 | XMM13 |
ZMM14 | YMM14 | XMM14 |
ZMM15 | YMM15 | XMM15 |
ZMM16 | YMM16 | XMM16 |
ZMM17 | YMM17 | XMM17 |
ZMM18 | YMM18 | XMM18 |
ZMM19 | YMM19 | XMM19 |
ZMM20 | YMM20 | XMM20 |
ZMM21 | YMM21 | XMM21 |
ZMM22 | YMM22 | XMM22 |
ZMM23 | YMM23 | XMM23 |
ZMM24 | YMM24 | XMM24 |
ZMM25 | YMM25 | XMM25 |
ZMM26 | YMM26 | XMM26 |
ZMM27 | YMM27 | XMM27 |
ZMM28 | YMM28 | XMM28 |
ZMM29 | YMM29 | XMM29 |
ZMM30 | YMM30 | XMM30 |
ZMM31 | YMM31 | XMM31 |
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 بیتی قدیمی را دارند؛ اکثر آنها در هر دو حالت ۱۲۸ بیتی و ۲۵۶ بیتی قابل استفاده هستند.
دستورالعمل | شرح |
---|---|
VBROADCASTSS ، VBROADCASTSD ، VBROADCASTF128
| کپی یک خانه ۳۲ بیتی، ۶۴ بیتی یا ۱۲۸ بیتی حافظه به تمام عناصر ثبات بردار XMM یا YMM. |
VINSERTF128
| جایگزینی نیمه پایینی یا نیمه بالایی از ۲۵۶ بیت ثبات YMM با مقدار یک عملوند مرجع ۱۲۸ بیتی. نیمی دیگر از مقصد بدون تغییر است. |
VEXTRACTF128
| جدا کردن نیمه پایین یا نیمه بالای از ۲۵۶ بیت ثبات YMM و کپی مقدار آن در یک عملوند مقصد ۱۲۸ بیتی. |
VMASKMOVPS ، VMASKMOVPD
| هر عدد از عناصر عملگر حافظه برداری SIMD را خوانده و به یک ثبات مقصد میدهد، عناصر باقیمانده بردار را ناخوانده قرار داده و عناصر مربوط را در ثبات مقصد صفر میگذارد. بهطور متناوب، هر عدد از عناصر را از یک عملگر ثبات برداری SIMD بر روی یک عملگر حافظه بردار مینویسد و عناصر باقی مانده از عملگر حافظه را بدون تغییر رها میکند. در معماری پردازنده AMD Jaguar، این دستورالعمل با یک عملوند حافظه زمانیکه ماسک صفر است ۳۰۰ کلاک طول میکشد، در آن حالت دستورالعمل هیچ کاری انجام نمیدهد. این یک نقص طراحی به نظر میرسد. |
VPERMILPS ، VPERMILPD
| Permue In-Lane. الحاق عناصر بردار ۳۲ بیتی یا ۶۴ بیتی با یک عملگر ورودی را کنار هم. اینها دستورالعملهای ۲۵۶ بیتی در خط هستند، به این معنی که آنها در تمام ۲۵۶ بیت یعنی دو ۱۲۸ بیتی جداگانه کار میکنند، بنابراین نمیتوانند در خطوط ۱۲۸ بیتی تغییر مسیر داده شوند. |
VPERM2F128
| الحاق بردار ۱۲۸ بیتی از دو عملوند مرجع ۲۵۶ بیتی به یک عملوند مقصد ۲۵۶ بیتی، با در نظر گرفتن عدد ثابت به عنوان انتخابگر. |
VZEROALL
| تمام YMM را به صفر تنظیم میکند و آنها را به عنوان استفاده نشده در نظر میگیرد. هنگام تغییر از ۱۲۸ بیتی و استفاده ۲۵۶ بیتی مورد استفاده قرار میگیرد. |
VZEROUPPER
| نیمه بالای تمام ثبات YMM را صفر تنظیم میکند. هنگام تغییر از ۱۲۸ بیتی و استفاده ۲۵۶ بیتی مورد استفاده قرار میگیرد. |
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)
دستورالعملهای جدید
دستورالعمل | شرح |
---|---|
VBROADCASTSS ، VBROADCASTSD
| کپی ثباتهای ۳۲ بیتی یا ۶۴ بیتی به تمام عناصر یک ثبات بردار XMM یا YMM. اینها نسخه ثباتها مشابه دستورهای در AVX1 هستند. اما نسخه ۱۲۸ بیتی وجود ندارد، اما همان اثر را میتوان با استفاده از VINSERTF128 به دست آورد. |
VPBROADCASTB ، VPBROADCASTW ، VPBROADCASTD ، VPBROADCASTQ
| یک عدد صحیح ۸، ۱۶، ۳۲ یا ۶۴ بیتی از ثبات یا عملوند حافظه را به کلیه عناصر یک ثبات XMM یا YMM کپی میکند. |
VBROADCASTI128
| یک عملگر حافظه ۱۲۸ بیتی را به تمام عناصر یک ثبات بردار YMM کپی کنید. |
VINSERTI128
| جایگزین نیمه پایین یا نیمه بالای ۲۵۶ بیتی ثبات YMM با مقدار یک عملوند مرجع ۱۲۸ بیتی. نیمی دیگر از مقصد بدون تغییر است. |
VEXTRACTI128
| جدا کردن نیمه پایین یا نیمه بالایی ۲۵۶ بیت از ثبات YMM و انتقال ارزش آن به یک عملوند مقصد ۱۲۸ بیتی. |
VGATHERDPD ، VGATHERQPD ، VGATHERDPS ، VGATHERQPS
| پیادهسازی الگوریتم جمعآوری ممیز شناور یک یا دو دقت با استفاده از ۳۲ یا ۶۴ بیت شاخص و مقیاس. |
VPGATHERDD ، VPGATHERDQ ، VPGATHERQD ، VPGATHERQQ
| جمعآوری مقادیر عدد صحیح ۳۲ یا ۶۴ بیتی با استفاده از شاخصهای ۳۲ یا ۶۴ بیتی و مقیاس. |
VPMASKMOVD ، VPMASKMOVQ
| هر عدد از عناصر از یک عملگر حافظه بردار SIMD را به یک ثبت نام مقصد میدهد، عناصر بردار باقی مانده را خوانده و عناصر مربوط را در ثبت نام مقصد به صفر میگذارد. بهطور متناوب، هر عدد از عناصر را از یک عملگر ثبتکننده بردار SIMD به یک عملگر حافظه بردار مینویسد و عناصر باقی مانده از عملگر حافظه را بدون تغییر باقی میگذارد. |
VPERMPS ، VPERMD
| الحاق هشت عدد عنصر بردار ۳۲ بیتی یک عملوند مرجع ۲۵۶ بیتی را به یک عملوند مقصد ۲۵۶ بیتی، با در نظر گرفتن ثبات یا حافظه به عنوان انتخابگر. |
VPERMPD ، VPERMQ
| الحاق چهار عدد عنصر بردار ۶۴ بیتی یک عملوند مرجع ۲۵۶ بیتی را به یک عملوند مقصد ۲۵۶ بیتی، با در نظر گرفتن ثبات یا حافظه به عنوان انتخابگر. |
VPERM2I128
| الحاق چهار عنصر بردار ۱۲۸ بیتی از دو عملوند مرجع ۲۵۶ بیتی را به یک عملوند مقصد ۲۵۶ بیتی، با در نظر گرفتن یک عدد ثابت به عنوان انتخابگر. |
VPBLENDD
| نسخه فوری دو کلمهای دستورالعمل PBLEND از SSE4. |
VPSLLVD ، VPSLLVQ
| شیفت به چپ منطقی. به متغیرها اجازه میدهد تا در هر المانی با توجه به بسته ورودی شیفت پیدا کنند. |
VPSRLVD ، VPSRLVQ
| شیفت به راست منطقی. به متغیرها اجازه میدهد تا در هر المانی با توجه به بسته ورودی شیفت پیدا کنند. |
VPSRAVD
| شیفت به راست منطقی. به متغیرها اجازه میدهد تا در هر المانی با توجه به بسته ورودی شیفت پیدا کنند. |
پردازندههای 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 Subset | F | CD | ER | PF | 4FMAPS | 4VNNIW | VL | DQ | BW | IFMA | VBMI | VBMI2 | VPOPCNTDQ | BITALG | VNNI | VPCLMULQDQ | GFNI | VAES |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Xeon Phi x200 (Knights Landing) processors (2016) | آری | آری | نه | |||||||||||||||
Knights Mill processors (2017) | آری | نه | آری | نه | ||||||||||||||
Skylake-SP, Skylake-X processors (2017) | نه | آری | نه | |||||||||||||||
Cannon Lake processors (expected in 2018) | آری | نه | ||||||||||||||||
Ice Lake processors | آری |
کامپایلرهای پشتیبانی کننده از AVX-512
کاربردها
- مناسب برای محاسبات ممیز شناور - در برنامههای چند رسانه ای، علمی و مالی (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 با برخی از ویژگیهای اضافی است.
منابع
- ↑ Kanter, David (September 25, 2010). "Intel's Sandy Bridge Microarchitecture". www.realworldtech.com (به انگلیسی). Retrieved February 17, 2018.
- ↑ Hruska, Joel (October 24, 2011). "Analyzing Bulldozer: Why AMD's chip is so disappointing - Page 4 of 5 - ExtremeTech". ExtremeTech (به انگلیسی). Retrieved February 17, 2018.
- ↑ James Reinders (July 23, 2013), AVX-512 Instructions, Intel, retrieved August 20, 2013
- ↑ "Intel Xeon Phi Processor 7210 (16GB, 1.30 GHz, 64 core) Product Specifications". Intel ARK (Product Specs). Retrieved March 16, 2018.
- ↑ Haswell New Instruction Descriptions Now Available, Software.intel.com, retrieved January 17, 2012
- ↑ "14.9". Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture (PDF) (-051US ed.). Intel Corporation. p. 349. Retrieved August 23, 2014.
Memory arguments for most instructions with VEX prefix operate normally without causing #GP(0) on any byte-granularity alignment (unlike Legacy SSE instructions).
- ↑ "i386 and x86-64 Options - Using the GNU Compiler Collection (GCC)". Retrieved February 9, 2014.
- ↑ "The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers" (PDF). Retrieved October 17, 2016.
- ↑ "Chess programming AVX2". Archived from the original on 10 July 2017. Retrieved October 17, 2016.
- ↑ "Intel Offers Peek at Nehalem and Larrabee". ExtremeTech. March 17, 2008.
- ↑ "Intel Core i7-3960X Processor Extreme Edition". Retrieved January 17, 2012.
- ↑ Dave Christie (May 7, 2009), Striking a balance, AMD Developer blogs, archived from the original on November 9, 2013, retrieved January 17, 2012
- ↑ New "Bulldozer" and "Piledriver" Instructions (PDF), AMD, October 2012
- ↑ YASM 0.7.0 یادداشت انتشار http://yasm.tortall.net/releases/Release0.7.0.html
- ↑ Add support for the extended FPU states on amd64, both for native 64bit and 32bit ABIs, svnweb.freebsd.org, January 21, 2012, retrieved January 22, 2012
- ↑ "FreeBSD 9.1-RELEASE Announcement". Retrieved May 20, 2013.
- ↑ x86: add linux kernel support for YMM state, retrieved July 13, 2009
- ↑ Linux 2.6.30 - Linux Kernel Newbies, retrieved July 13, 2009
- ↑ Twitter, retrieved June 23, 2010
- ↑ Add support for saving/restoring FPU state using the XSAVE/XRSTOR., retrieved March 25, 2015
- ↑ Floating-Point Support for 64-Bit Drivers, retrieved December 6, 2009
- ↑ James Reinders (July 17, 2014). "Additional AVX-512 instructions". Intel. Retrieved August 3, 2014.
- ↑ "Intel Architecture Instruction Set Extensions Programming Reference" (PDF). Intel. Retrieved January 29, 2014.
- ↑ "Intel® Architecture Instruction Set Extensions and Future Features Programming Reference". Intel. Retrieved October 16, 2017.
- ↑ "Intel® Software Development Emulator | Intel® Software". software.intel.com. Retrieved June 11, 2016.
- ↑ "GCC 4.9 Release Series — Changes, New Features, and Fixes – GNU Project - Free Software Foundation (FSF)". gcc.gnu.org (به انگلیسی). Retrieved April 3, 2017.
- ↑ "LLVM 3.9 Release Notes — LLVM 3.9 documentation". releases.llvm.org. Retrieved April 3, 2017.
- ↑ "Intel® Parallel Studio XE 2015 Composer Edition C++ Release Notes | Intel® Software". software.intel.com (به انگلیسی). Retrieved April 3, 2017.
- ↑ "Microsoft Visual Studio 2017 Supports Intel® AVX-512" (به انگلیسی).
- ↑ "JDK 9 Release Notes" (به انگلیسی).
- ↑ "Linux RAID". LWN. February 17, 2013. Archived from the original on April 15, 2013.
- ↑ "Improving OpenSSL Performance". May 26, 2015. Retrieved February 28, 2017.
- ↑ "dav1d: performance and completion of the first release". November 21, 2018. Archived from the original on 20 January 2019. Retrieved November 22, 2018.
- ↑ "Einstein@Home Applications".
- ↑ "Tensorflow 1.6".