مجموعة تعليمات FMA

مجموعة تعليمات FMA هي امتداد لتعليمات Streaming SIMD Extensions ذات 128 و256 بت في مجموعة تعليمات المعالج الدقيق x86 لتنفيذ عمليات الضرب والجمع المدمجة (FMA). [ 1 ] يوجد نوعان منها:

تعليمات

تتشابه تعليمات FMA3 وFMA4 في وظائفها تقريبًا، لكنها غير متوافقة. تحتوي كلتاهما على تعليمات الضرب والجمع المدمجة (FMA) لعمليات الأعداد العشرية العددية وعمليات SIMD ، إلا أن تعليمات FMA3 تحتوي على ثلاثة معاملات، بينما تحتوي تعليمات FMA4 على أربعة. تأخذ عملية FMA الشكل d = round( a · b + c )، حيث تقوم دالة round بتقريب الناتج ليناسب سجل الوجهة إذا كان عدد البتات المهمة كبيرًا جدًا بحيث لا يتسع في سجل الوجهة.

يسمح نموذج المعاملات الأربعة (FMA4) بأن تكون a و b و c و d أربعة سجلات مختلفة، بينما يتطلب نموذج المعاملات الثلاثة (FMA3) أن يكون d هو نفس السجل الذي يمثله a أو b أو c . يُسهّل نموذج المعاملات الثلاثة كتابة الكود ويُبسّط تنفيذه على مستوى الأجهزة، بينما يوفر نموذج المعاملات الأربعة مرونة برمجية أكبر.

راجع مجموعة تعليمات XOP لمزيد من المناقشة حول مشكلات التوافق بين Intel و AMD.

مجموعة تعليمات FMA3

وحدات المعالجة المركزية المزودة بـ FMA3

مقتطف من مسلسل FMA3

تشمل الأوامر المدعومة ما يلي:

ذاكريعمليةذاكريعملية
إضافة قيمة مقابل المالresult = + a · b + cVFM ADDSUBresult = a · b + c لـ i = 1، 3، ... result = a · b − c لـ i = 0، 2، ...
VF N M ADDresult = − a · b + c
VFM Subresult = + a · b − cVFM SUBADDresult = a · b − c لـ i = 1، 3، ... result = a · b + c لـ i = 0، 2، ...
VF N M SUBresult = − a · b − c
ملحوظة
  • VF N M ADD هو result = − a · b + c، وليس result = − (a · b + c).
  • تقوم الدالة VF N M SUB بتوليد قيمة -0 عندما تكون جميع المدخلات صفرًا.

يتم تضمين الترتيب الصريح للمعاملات في الاختصار باستخدام الأرقام "132" و "213" و "231":

الملحق 1عمليةمعامل الذاكرة المحتمليستبدل
132a = a · c + bc(عامل)a(عامل آخر)
213a = b · a + cc(المجموع)a(عامل)
231a = b · c + ac(عامل)a(المجموع)

بالإضافة إلى تنسيق المعامل (مضغوط أو قياسي) والحجم (مفرد أو مزدوج).

بوستفيكس 2دقةمقاسبوستفيكس 2دقةمقاس
إس إسأعزب 32 بتإس ديمزدوج 64 بت
P S x 4× 32 بتP D x2 × 64 بت
P S y 8× 32 بتP D y4 × 64 بت
P S z16 × 32 بتP D z8 × 64 بت

وينتج عن ذلك

التشفيرذاكريالمعاملاتعملية
VEX.256.66.0F38.W1 98 /rVFMADD 132 PD yymm, ymm, ymm/m256a = a · c + b
VEX.256.66.0F38.W0 98 /rVFMADD 132 PS y
VEX.128.66.0F38.W1 98 /rVFMADD 132 PD xxmm، xmm، xmm/m128
VEX.128.66.0F38.W0 98 /rVFMADD 132 PS x
VEX.LIG.66.0F38.W1 99 /rVFMADD 132 SDxmm، xmm، xmm/m64
VEX.LIG.66.0F38.W0 99 /rVFMADD 132 SSxmm، xmm، xmm/m32
VEX.256.66.0F38.W1 A8 /rVFMADD 213 PD yymm, ymm, ymm/m256a = b · a + c
VEX.256.66.0F38.W0 A8 /rVFMADD 213 PS y
VEX.128.66.0F38.W1 A8 /rVFMADD 213 PD xxmm، xmm، xmm/m128
VEX.128.66.0F38.W0 A8 /rVFMADD 213 PS x
VEX.LIG.66.0F38.W1 A9 /rVFMADD 213 SDxmm، xmm، xmm/m64
VEX.LIG.66.0F38.W0 A9 /rVFMADD 213 SSxmm، xmm، xmm/m32
VEX.256.66.0F38.W1 B8 /rVFMADD 231 PD yymm, ymm, ymm/m256a = b · c + a
VEX.256.66.0F38.W0 B8 /rVFMADD 231 PS y
VEX.128.66.0F38.W1 B8 /rVFMADD 231 PD xxmm، xmm، xmm/m128
VEX.128.66.0F38.W0 B8 /rVFMADD 231 PS x
VEX.LIG.66.0F38.W1 B9 /rVFMADD 231 SDxmm، xmm، xmm/m64
VEX.LIG.66.0F38.W0 B9 /rVFMADD 231 SSxmm، xmm، xmm/m32

مجموعة تعليمات FMA4

وحدات المعالجة المركزية المزودة بـ FMA4

مقتطف من مسلسل فول ميتال ألكيميست 4

تقنية التذكر (AT&T)المعاملاتعملية
VFMADDPDxxmm، xmm، xmm/m128، xmm/m128أ = ب × ج + د
VFMADDPyymm, ymm, ymm/m256, ymm/m256
VFMADDPSxxmm، xmm، xmm/m128، xmm/m128
VFMADDPsyymm, ymm, ymm/m256, ymm/m256
VFMADDSDxmm، xmm، xmm/m64، xmm/m64
VFMADDSSxmm، xmm، xmm/m32، xmm/m32

تاريخ

يعود عدم التوافق بين معالج Intel FMA3 ومعالج AMD FMA4 إلى تغيير الشركتين لخططهما دون تنسيق تفاصيل البرمجة بينهما. فقد غيّرت AMD خططها من FMA3 إلى FMA4، بينما غيّرت Intel خططها من FMA4 إلى FMA3 في نفس الوقت تقريبًا. ويمكن تلخيص القصة كما يلي:

  • أغسطس 2007: أعلنت شركة AMD عن مجموعة تعليمات SSE5 ، التي تتضمن تعليمات FMA بثلاثة معاملات. كما تم تقديم نظام ترميز جديد (DREX) يسمح للتعليمات بأن تحتوي على ثلاثة معاملات. [ 13 ]
  • أبريل 2008: أعلنت إنتل عن مجموعتي تعليمات AVX وFMA، بما في ذلك تعليمات FMA ذات 4 معاملات. تستخدم هذه التعليمات نظام ترميز VEX الجديد، [ 14 ] وهو أكثر مرونة من نظام DREX الخاص بشركة AMD.
  • ديسمبر 2008: قامت شركة إنتل بتغيير مواصفات تعليمات FMA الخاصة بها من تعليمات ذات 4 معاملات إلى تعليمات ذات 3 معاملات. ولا يزال نظام ترميز VEX مستخدمًا. [ 15 ]
  • مايو 2009: قامت شركة AMD بتغيير مواصفات تعليمات FMA الخاصة بها من صيغة DREX ذات 3 معاملات إلى صيغة VEX ذات 4 معاملات، بما يتوافق مع مواصفات Intel الصادرة في أبريل 2008 بدلاً من مواصفات Intel الصادرة في ديسمبر 2008. [ 16 ]
  • أكتوبر 2011: معالج AMD Bulldozer يدعم FMA4. [ 17 ]
  • يناير 2012: أعلنت شركة AMD عن دعم تقنية FMA3 في معالجات مستقبلية تحمل الاسم الرمزي Trinity وVishera؛ وهي مبنية على معمارية Piledriver . [ 18 ]
  • مايو 2012: يدعم معالج AMD Piledriver كلاً من FMA3 و FMA4. [ 17 ]
  • يونيو 2013: معالج Intel Haswell يدعم FMA3. [ 19 ]
  • فبراير 2017: يدعم الجيل الأول من معالجات AMD Ryzen رسميًا FMA3، لكنه لا يدعم FMA4 وفقًا لتعليمات CPUID . [ 2 ] وقد ساد الارتباك حول ما إذا كان FMA4 مُطبقًا أم لا على هذا المعالج بسبب أخطاء في التصحيح الأولي لحزمة GNU Binutils، والتي تم تصحيحها لاحقًا. [ 20 ] [ 21 ] وأثار تقرير غير مؤكد عن نتائج خاطئة [ 9 ] بعض الشكوك، لكن Mysticial (ألكسندر يي، مطور y-cruncher) فنّد ذلك: [ 22 ] فقد عمل FMA4 بنجاح مع حسابات الأعداد الكبيرة الدقيقة على نظام Zen 1 الخاص به لسنوات، ولم يخضع التقرير المنشور على Reddit لأي تحقيق لاحق لاستبعاد وجود أخطاء في برنامج الاختبار قبل انتشاره على نطاق واسع. كان من الممكن أن تتعطل معالجات Ryzen الأولية بسبب تسلسل معين من تعليمات FMA3، لكن تحديث الشفرة الدقيقة للمعالج يُصلح هذه المشكلة. [ 23 ]
  • يوليو 2019: معالجات AMD Zen 2 والإصدارات الأحدث من Ryzen لا تدعم FMA4 إطلاقًا. [ 24 ] وهي لا تزال تدعم FMA3. فقط معالجات Zen 1 وZen+ تدعم FMA4 بشكل غير رسمي.

دعم المترجم والمجمع

توفر المترجمات المختلفة مستويات دعم مختلفة لتقنية FMA:

مراجع

  1. وولتمان، جورج (برايم 95). "إنتل AVX وGIMPS" . mersenneforum.org . مشروع البحث عن أعداد ميرسين الأولية على الإنترنت (GIMPS) . تم الاطلاع عليه بتاريخ 27 يوليو 2011. FMA3 وFMA4 ليستا مجموعتي تعليمات، بل هما تعليمات فردية - عملية ضرب وجمع مدمجة. قد تكونان مفيدتين للغاية اعتمادًا على كيفية تنفيذهما من قِبل إنتل وAMD .{{cite web}}: صيانة CS1: أسماء رقمية: قائمة المؤلفين ( رابط )
  2. 1 2 "البنية الدقيقة لوحدات المعالجة المركزية من إنتل، وإيه إم دي، وفيا: دليل تحسين لمبرمجي لغة التجميع ومصممي المترجمات" (ملف PDF) . تم الاطلاع عليه بتاريخ 2017-05-02 .
  3. مافيو، روبن (1 مارس 2012). "AMD وVisual Studio 11 Beta" . AMD . تم الاسترجاع في 7 نوفمبر 2018 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  4. "CPU-Z - ID : y5z6gq" . تم الاسترجاع بتاريخ 2022-05-01 . 
  5. "CPU-Z - ID : kr2mlx" . تم الاسترجاع بتاريخ 2022-05-01 . 
  6. "دليل مبرمج معمارية AMD64، المجلد 6: تعليمات XOP وFMA4 وCVT16 ذات 128 بت و256 بت" (ملف PDF) . AMD . 1 مايو 2009.
  7. "تعليمات جديدة لـ "الجرافة" و "المطرقة": خطوة للأمام في تطوير البرمجيات عالية الأداء" (ملف PDF) . AMD . أكتوبر 2012.
  8. "مدونة Agner's CPU - نتائج اختبار AMD Ryzen" . 2017-05-02.
  9. 1 2 "مناقشة - يدعم معالج Ryzen لعبة FMA4 بشكل غير موثق" . تم الاطلاع عليه بتاريخ 10 مايو 2017 .
  10. "www.amd.com، قائمة طرازات الدعم لـ FMA4" .
  11. "www.amd.com، قائمة طرازات الدعم لـ FMA4" .
  12. "www.amd.com، قائمة طرازات الدعم لـ FMA4" .
  13. "مجموعة تعليمات SSE5 ذات 128 بت" . مركز مطوري AMD . مؤرشف من الأصل بتاريخ 15 يناير 2008. تم الاطلاع عليه بتاريخ 28 يناير 2008 .
  14. "مرجع برمجة ملحقات المتجهات المتقدمة من إنتل" (ملف PDF) . إنتل . تم الاطلاع عليه بتاريخ 5 أبريل 2008 .
  15. "مرجع برمجة ملحقات المتجهات المتقدمة من إنتل" . إنتل . تم الاسترجاع في 2009-05-06 .
  16. "تحقيق التوازن" . ديف كريستي، مدونات مطوري AMD. 6 مايو 2009. تم الاطلاع عليه بتاريخ 7 نوفمبر 2018 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  17. 1 2 "تعليمات جديدة للجرافة وآلة دق الركائز" (ملف PDF) . AMD . تم الاطلاع عليه بتاريخ 25 يوليو 2013 .
  18. "دليل تحسين البرمجيات لمعالجات AMD من عائلة 15h" (ملف PDF) . AMD . تم الاطلاع عليه بتاريخ 19 أبريل 2012 .
  19. "مرجع برمجة ملحقات مجموعة تعليمات معمارية إنتل" (ملف PDF) . إنتل . تم الاطلاع عليه بتاريخ 25 يوليو 2013 .
  20. جوبالاسوبرامانيان، غانيش (10 مارس 2015). " [ تحديث ] إضافة معالج znver1" . تم الاطلاع عليه بتاريخ 1 مايو 2022 .
  21. باوار، أميت (2015-08-07). " [ رقعة ] إزالة CpuFMA4 من علامات وحدة المعالجة المركزية Znver1" . تم الاسترجاع في 2022-05-01 .
  22. "تعليق من Mysticial على موقع Stack Overflow" . ١٦ يوليو ٢٠١٩. مؤرشف من الأصل بتاريخ ٢٢ أغسطس ٢٠١٩. تم الاطلاع عليه بتاريخ ١ سبتمبر ٢٠٢٣ .{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  23. "تعطل جهاز AMD Ryzen بسبب تسلسل تعليمات FMA3" . 16 مارس 2017. تم الاطلاع عليه بتاريخ 10 سبتمبر 2017 .
  24. "تعليق من Mysticial على موقع Stack Overflow" . 16 يوليو 2019. تم الاطلاع عليه بتاريخ 1 سبتمبر 2023 .
  25. 1 2 لطيف، لورانس (14 نوفمبر 2011). "يدعم GCC تعليمات FMA4 وXOP الخاصة بمعالج AMD Bulldozer فقط، بينما لا تزال إنتل تتجاهل الأمر" . صحيفة ذا إنكوايرر . مؤرشف من الأصل في 17 نوفمبر 2011.
  26. "إضافة وظائف FMA4 الداخلية لبرنامج Visual Studio 2010 SP1" . 4 فبراير 2013.
  27. "EKOPath man doc" . مؤرشف من الأصل بتاريخ 23-06-2016 . تم الاطلاع عليه بتاريخ 24-07-2013 .
  28. "ملاحظات إصدار LLVM 3.1" .
  29. "تمكين اكتشاف دعم AVX وAVX2 عبر CPUID" . LLVM . 2012-04-26. مؤرشف من الأصل في 2014-07-26 . تم الاطلاع عليه في 2017-02-06 .