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

از ویکی‌پدیا، دانشنامهٔ آزاد

افزونه بردار پیشرفته (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-512 به عنوان جایگزین ثبات‌های AVX (YMM0-YMM15) و SSE (XMM0-XMM15)
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 محسوب می‌شود؛ این دستورالعمل‌ها در صفحه مخصوص به خود و نه در زیر ذکر شده‌است:

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

دستورالعمل شرح
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 اضافه شده‌است.[۲۳] : 746 
  • دستورالعمل‌های دستکاری بایت‌های 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) پشتیبانی خواهند کرد.[۲۳] : 23 

پردازنده‌های 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[ویرایش]

  • 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 را از طریق سیستم استفاده کند. عددی کتابخانه وکتورها.

جستارهای وابسته[ویرایش]

منابع[ویرایش]

  1. Kanter, David (September 25, 2010). "Intel's Sandy Bridge Microarchitecture". www.realworldtech.com (به انگلیسی). Retrieved February 17, 2018.
  2. Hruska, Joel (October 24, 2011). "Analyzing Bulldozer: Why AMD's chip is so disappointing - Page 4 of 5 - ExtremeTech". ExtremeTech (به انگلیسی). Retrieved February 17, 2018.
  3. ۳٫۰ ۳٫۱ ۳٫۲ ۳٫۳ ۳٫۴ James Reinders (July 23, 2013), AVX-512 Instructions, Intel, retrieved August 20, 2013
  4. "Intel Xeon Phi Processor 7210 (16GB, 1.30 GHz, 64 core) Product Specifications". Intel ARK (Product Specs). Retrieved March 16, 2018.
  5. ۵٫۰ ۵٫۱ Haswell New Instruction Descriptions Now Available, Software.intel.com, retrieved January 17, 2012
  6. "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).
  7. "i386 and x86-64 Options - Using the GNU Compiler Collection (GCC)". Retrieved February 9, 2014.
  8. "The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers" (PDF). Retrieved October 17, 2016.
  9. "Chess programming AVX2". Archived from the original on 10 July 2017. Retrieved October 17, 2016.
  10. "Intel Offers Peek at Nehalem and Larrabee". ExtremeTech. March 17, 2008.
  11. "Intel Core i7-3960X Processor Extreme Edition". Retrieved January 17, 2012.
  12. Dave Christie (May 7, 2009), Striking a balance, AMD Developer blogs, archived from the original on November 9, 2013, retrieved January 17, 2012
  13. New "Bulldozer" and "Piledriver" Instructions (PDF), AMD, October 2012
  14. YASM 0.7.0 یادداشت انتشار http://yasm.tortall.net/releases/Release0.7.0.html
  15. 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
  16. "FreeBSD 9.1-RELEASE Announcement". Retrieved May 20, 2013.
  17. x86: add linux kernel support for YMM state, retrieved July 13, 2009
  18. Linux 2.6.30 - Linux Kernel Newbies, retrieved July 13, 2009
  19. Twitter, retrieved June 23, 2010 [منبع نامعتبر؟]
  20. Add support for saving/restoring FPU state using the XSAVE/XRSTOR., retrieved March 25, 2015
  21. Floating-Point Support for 64-Bit Drivers, retrieved December 6, 2009
  22. ۲۲٫۰ ۲۲٫۱ ۲۲٫۲ James Reinders (July 17, 2014). "Additional AVX-512 instructions". Intel. Retrieved August 3, 2014.
  23. ۲۳٫۰ ۲۳٫۱ "Intel Architecture Instruction Set Extensions Programming Reference" (PDF). Intel. Retrieved January 29, 2014.
  24. ۲۴٫۰ ۲۴٫۱ ۲۴٫۲ ۲۴٫۳ ۲۴٫۴ ۲۴٫۵ ۲۴٫۶ "Intel® Architecture Instruction Set Extensions and Future Features Programming Reference". Intel. Retrieved October 16, 2017.
  25. "Intel® Software Development Emulator | Intel® Software". software.intel.com. Retrieved June 11, 2016.
  26. "GCC 4.9 Release Series — Changes, New Features, and Fixes – GNU Project - Free Software Foundation (FSF)". gcc.gnu.org (به انگلیسی). Retrieved April 3, 2017.
  27. "LLVM 3.9 Release Notes — LLVM 3.9 documentation". releases.llvm.org. Retrieved April 3, 2017.
  28. "Intel® Parallel Studio XE 2015 Composer Edition C++ Release Notes | Intel® Software". software.intel.com (به انگلیسی). Retrieved April 3, 2017.
  29. "Microsoft Visual Studio 2017 Supports Intel® AVX-512" (به انگلیسی).
  30. "JDK 9 Release Notes" (به انگلیسی).
  31. "Linux RAID". LWN. February 17, 2013. Archived from the original on April 15, 2013.
  32. "Improving OpenSSL Performance". May 26, 2015. Retrieved February 28, 2017.
  33. "dav1d: performance and completion of the first release". November 21, 2018. Archived from the original on 20 January 2019. Retrieved November 22, 2018.
  34. "Einstein@Home Applications".
  35. "Tensorflow 1.6".