You can edit almost every page by Creating an account. Otherwise, see the FAQ.

مجموعه دستورالعمل FMA

از EverybodyWiki Bios & Wiki
پرش به:ناوبری، جستجو


مجموعه دستورالعمل FMA یک گسترش است که برای 128 و 256 بیت دستوالعمل های افزونه های جریان SIMD در پردازنده های X86 این مجموعه دستورالعمل ها برای انجام عملگر های FMA است.

دو نوع وجود دارد:

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

دستورالعمل های FMA3 و FMA4 تقریباً عملکرد یکسانی دارند. اما سازگار نیستند. هر دو شامل دستورالعمل های fused multiply–add یا FMA برای عملیات نقطه شناور اسکالر و عملگر های SIMD است ، اما دستورالعمل FMA3 دارای سه عملگر است، در حالی که FMA4 چهار عدد عملگر دارد. عملیات FMA به شکل d = round ( a · b + c ) می باشد ، در صورتی که تابع رند، رند کردن را تا نتیجه در داخل ثبات مقصد جا بگیرد انجام میدهد.در صورتی که بیت های زیادی وجود داشته باشد که در داخل مقصد قرار داشته باشند.

فرم چهار عملگر (FMA4) اجازه می دهد که a ، b ، c و d در چهار ثبات متفاوت باشند، در حالی که فرم سه عملگر (FMA3) نیاز دارد که d را یک ثبات مشابه به عنوان a ، b یا c داشته باشد. فرم سه عملگر کد را کوتاه تر می کند و اجرای سخت افزاری کمی ساده تر است، در حالی که فرم چهار عملگر برنامه نویسی را انعطاف پذیر تر فراهم می کند.

دستورالعمل XOP را برای بحث بیشتر درباره مسائل سازگاری بین اینتل و AMD مطالعه کنید.

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

پردازنده های FMA3[ویرایش]

  • AMD
    • AMD پشتیبانی FMA3 را در پردازنده هایی که از معماری Piledriver برای دلایل سازگاری شروع شده است معرفی کرد. پردازنده های نسل دوم APU مبتنی بر Trinity (32 نانومتر ) که از دستورالعمل FMA3 پشتیبانی می کنند، 15 مه 2012 راه اندازی شدند. پردازنده های بولدوزر نسل دوم با هسته Piledriver که دستورالعمل FMA3 را پشتیبانی می کنند، 23 اکتبر 2012 آغاز شد.
  • اینتل
    • اینتل FMA3 را در پردازنده های مبتنی بر Haswell در سال 2013 معرفی کرد.

خروج از FMA3[ویرایش]

Mnemonic (AT&T) Operands Operation
VFMADD132PDy ymm, ymm, ymm/m256 a = a·c + b
VFMADD132PSy
VFMADD132PDx xmm, xmm, xmm/m128
VFMADD132PSx
VFMADD132SD xmm, xmm, xmm/m64
VFMADD132SS xmm, xmm, xmm/m32
VFMADD213PDy ymm, ymm, ymm/m256 a = b·a + c
VFMADD213PSy
VFMADD213PDx xmm, xmm, xmm/m128
VFMADD213PSx
VFMADD213SD xmm, xmm, xmm/m64
VFMADD213SS xmm, xmm, xmm/m32
VFMADD231PDy ymm, ymm, ymm/m256 a = b·c + a
VFMADD231PSy
VFMADD231PDx xmm, xmm, xmm/m128
VFMADD231PSx
VFMADD231SD xmm, xmm, xmm/m64
VFMADD231SS xmm, xmm, xmm/m32

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

مجموعه دستورالعمل FMA4

پردازنده های FMA4[ویرایش]

FMA4 instruction set

  • AMD
    • "تجهیزات سنگین" پردازنده
      • پردازنده های مبتنی بر بولدوزر - در تاریخ 12 اکتبر 2011 راه اندازی شد.
      • پردازنده های مبتنی بر Piledriver
      • پردازنده های مبتنی بر Steamroller
      • پردازنده های مبتنی بر بیل (از جمله "v2")
    • Zen : تست WikiChip نشان می دهد که FMA4 همچنان به نظر می رسد (تحت شرایط آزمایش) با وجود رسمی پشتیبانی نمی‌شود و حتی توسط CPUID گزارش نشده است. این نیز توسط Agner تأیید شده است. اما آزمایش های دیگر نتیجه اشتباه را بدست آورد. پردازنده های ZEN CPU = AMD ThreadRipper 1900x، R7 Pro 1800، 1700، R5 Pro 1600، 1500، R3 Pro 1300، 1200، R3 2200G، R5 2400G.
  • اینتل
    • به علت تغییر اعلام شده اینتل به FMA3، مشخص نیست که آیا پردازندههای آینده اینتل از FMA4 پشتیبانی خواهند کرد.

استخراج از FMA4[ویرایش]

Mnemonic (AT&T) Operands Operation
VFMADDPDx xmm, xmm, xmm/m128, xmm/m128 a = b·c + d
VFMADDPDy ymm, ymm, ymm/m256, ymm/m256
VFMADDPSx xmm, xmm, xmm/m128, xmm/m128
VFMADDPSy ymm, ymm, ymm/m256, ymm/m256
VFMADDSD xmm, xmm, xmm/m64, xmm/m64
VFMADDSS xmm, xmm, xmm/m32, xmm/m32

تاریخ[ویرایش]

ناسازگاری بین FMA3 اینتل و FMA4 AMD به این دلیل است که هر دو شرکت برنامه هایشان را بدون هماهنگ سازی جزئیات کد گذاری با یکدیگر تغییر دادند. AMD برنامه های خود را از FMA3 به FMA4 تغییر داد در حالی که اینتل تقریباً در همان زمان برنامه های خود را از FMA4 تا FMA3 تغییر داد. تاریخ را می توان به صورت زیر خلاصه کرد:

  • اوت 2007: AMD دستورالعمل SSE5 را اعلام می کند که شامل دستور های FMA 3 الیه است. یک طرح کدگذاری جدید (DREX) برای اجازه دادن به دستورالعمل ها به سه عملگر معرفی شده است.
  • آوریل 2008: اینتل دستورالعملهای AVX و FMA خود را اعلام می کند، از جمله دستورالعمل FMA 4 الیه. برنامه نویسی این دستورالعمل ها از طرح جدید برنامه VEX که انعطاف پذیر تر از طرح DREX AMD است.
  • دسامبر 2008: اینتل مشخصات خود را برای دستورالعمل های FMA خود را از دستور العمل 4 الی تا 3 اپرا تغییر می دهد. برنامه نویسی VEX هنوز استفاده می شود.
  • مه 2009: AMD مشخصات دستورالعمل های FMA خود را از فرم DREX 3 اهرم به فرم VEX 4-operand تغییر می دهد، سازگار با آوریل   مشخصات اینتل 2008 به جای دسامبر   مشخصات اینتل 2008.
  • اکتبر 2011: پردازنده AMD بلدوزر از FMA4 پشتیبانی می کند.
  • ژانویه 2012: AMD اعلام کرد پشتیبانی FMA3 در پردازنده های آینده موسوم به ترینیتی و Vishera ؛ آنها بر اساس معماری Piledriver است.
  • مه 2012: پردازنده AMD Piledriver از FMA3 و FMA4 پشتیبانی می کند.
  • ژوئن 2013: پردازنده Intel Haswell از FMA3 پشتیبانی می کند.
  • فوریه 2017 نسل اول پردازنده های AMD Ryzen به طور رسمی از FMA3 پشتیبانی می کند اما با توجه به دستورالعمل CPUID FMA4 نیست. سردرگمی در مورد اینکه آیا FMA4 در این پردازنده اجرا شده یا نه، به دلیل خطا در بسته اولیه به بسته GNU Binutils که تا به حال از بین رفته است، وجود دارد. در حالی که دستورالعمل FMA4 به نظر می رسد بر اساس برخی آزمایش ها کار می کنند، همچنین می توانند نتایج غلطی را ارائه دهند. علاوه بر این، پردازنده های اولیه Ryzen را می توان با یک دنباله خاص از دستورالعمل FMA3 سقوط کرد. از آن زمان تاکنون توسط یک میکروکد CPU به روز شده حل شده است.

پشتیبانی کامپایلر و اسمبلر[ویرایش]

کامپایلرهای مختلف سطح پشتیبانی مختلفی از FMA4 ارائه می دهند:

  • GCC supports FMA4 with -mfma4 since version 4.5.0 and FMA3 with -mfma since version 4.7.0.
  • Microsoft Visual C++ 2010 SP1 supports FMA4 instructions.
  • Microsoft Visual C++ 2012 supports FMA3 instructions (if the processor also supports AVX2 instruction set extension).
  • Microsoft Visual C++ 2013
  • Microsoft Visual C++ 2015
  • Microsoft Visual C++ 2017
  • PathScale supports FMA4 with -mfma.
  • LLVM 3.1 adds FMA4 support, along with preliminary FMA3 support.
  • Open64 5.0 adds "limited support".
  • Intel compilers support only FMA3 instructions.
  • NASM supports FMA3 instructions since version 2.03 and FMA4 instructions since 2.06.
  • Yasm supports FMA3 instructions since version 0.8.0 and FMA4 instructions since version 1.0.0.
  • FASM supports both FMA3 and FMA4 instructions.

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

<references group="">

This article "مجموعه دستورالعمل FMA" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:مجموعه دستورالعمل FMA. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.



Read or create/edit this page in another language[ویرایش]