مجموعة تعليمات FMA
مجموعة تعليمات FMA هي امتداد لتعليمات Streaming SIMD Extensions ذات 128 و256 بت في مجموعة تعليمات المعالج الدقيق x86 لتنفيذ عمليات الضرب والجمع المدمجة (FMA). [ 1 ] يوجد نوعان منها:
- يدعم معالج AMD تقنية FMA4 بدءًا من معمارية Bulldozer . وقد تم تنفيذ FMA4 في الأجهزة قبل FMA3. تم إيقاف دعم FMA4 منذ معمارية Zen 1. [ 2 ]
- يدعم معالج AMD تقنية FMA3 بدءًا من بنية Piledriver ، بينما يدعمها معالج Intel بدءًا من معالجات Haswell و Broadwell منذ عام 2014.
تعليمات
تتشابه تعليمات 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
- AMD
- بايلدرايفر (2012) والبنى الدقيقة الأحدث [ 3 ]
- وحدات المعالجة المسرعة من الجيل الثاني ، "ترينيتي" (32 نانومتر)، 15 مايو 2012
- الجيل الثاني من "الجرافة" (bdver2) مع نوى بايلدرايفر، 23 أكتوبر 2012
- بايلدرايفر (2012) والبنى الدقيقة الأحدث [ 3 ]
- إنتل
- معالجات Haswell (2013) والمعالجات الأحدث، باستثناء معالجات Pentium و Celeron [ 4 ] [ 5 ]
مقتطف من مسلسل FMA3
تشمل الأوامر المدعومة ما يلي:
| ذاكري | عملية | ذاكري | عملية |
|---|---|---|---|
| إضافة قيمة مقابل المال | result = + a · b + c | VFM ADDSUB | result = a · b + c لـ i = 1، 3، ... result = a · b − c لـ i = 0، 2، ... |
| VF N M ADD | result = − a · b + c | ||
| VFM Sub | result = + a · b − c | VFM SUBADD | result = a · b − c لـ i = 1، 3، ... result = a · b + c لـ i = 0، 2، ... |
| VF N M SUB | result = − a · b − c |
- ملحوظة
- VF N M ADD هو
result = − a · b + c، وليسresult = − (a · b + c). - تقوم الدالة VF N M SUB بتوليد قيمة -0 عندما تكون جميع المدخلات صفرًا.
يتم تضمين الترتيب الصريح للمعاملات في الاختصار باستخدام الأرقام "132" و "213" و "231":
| الملحق 1 | عملية | معامل الذاكرة المحتمل | يستبدل |
|---|---|---|---|
| 132 | a = a · c + b | c(عامل) | a(عامل آخر) |
| 213 | a = b · a + c | c(المجموع) | a(عامل) |
| 231 | a = b · c + a | c(عامل) | a(المجموع) |
بالإضافة إلى تنسيق المعامل (مضغوط أو قياسي) والحجم (مفرد أو مزدوج).
| بوستفيكس 2 | دقة | مقاس | بوستفيكس 2 | دقة | مقاس |
|---|---|---|---|---|---|
| إس إس | أعزب | 32 بت | إس دي | مزدوج | 64 بت |
| P S x | 4× 32 بت | P D x | 2 × 64 بت | ||
| P S y | 8× 32 بت | P D y | 4 × 64 بت | ||
| P S z | 16 × 32 بت | P D z | 8 × 64 بت |
وينتج عن ذلك
| التشفير | ذاكري | المعاملات | عملية |
|---|---|---|---|
VEX.256.66.0F38.W1 98 /r | VFMADD 132 PD y | ymm, ymm, ymm/m256 | a = a · c + b |
VEX.256.66.0F38.W0 98 /r | VFMADD 132 PS y | ||
VEX.128.66.0F38.W1 98 /r | VFMADD 132 PD x | xmm، xmm، xmm/m128 | |
VEX.128.66.0F38.W0 98 /r | VFMADD 132 PS x | ||
VEX.LIG.66.0F38.W1 99 /r | VFMADD 132 SD | xmm، xmm، xmm/m64 | |
VEX.LIG.66.0F38.W0 99 /r | VFMADD 132 SS | xmm، xmm، xmm/m32 | |
VEX.256.66.0F38.W1 A8 /r | VFMADD 213 PD y | ymm, ymm, ymm/m256 | a = b · a + c |
VEX.256.66.0F38.W0 A8 /r | VFMADD 213 PS y | ||
VEX.128.66.0F38.W1 A8 /r | VFMADD 213 PD x | xmm، xmm، xmm/m128 | |
VEX.128.66.0F38.W0 A8 /r | VFMADD 213 PS x | ||
VEX.LIG.66.0F38.W1 A9 /r | VFMADD 213 SD | xmm، xmm، xmm/m64 | |
VEX.LIG.66.0F38.W0 A9 /r | VFMADD 213 SS | xmm، xmm، xmm/m32 | |
VEX.256.66.0F38.W1 B8 /r | VFMADD 231 PD y | ymm, ymm, ymm/m256 | a = b · c + a |
VEX.256.66.0F38.W0 B8 /r | VFMADD 231 PS y | ||
VEX.128.66.0F38.W1 B8 /r | VFMADD 231 PD x | xmm، xmm، xmm/m128 | |
VEX.128.66.0F38.W0 B8 /r | VFMADD 231 PS x | ||
VEX.LIG.66.0F38.W1 B9 /r | VFMADD 231 SD | xmm، xmm، xmm/m64 | |
VEX.LIG.66.0F38.W0 B9 /r | VFMADD 231 SS | xmm، xmm، xmm/m32 |
مجموعة تعليمات FMA4
وحدات المعالجة المركزية المزودة بـ FMA4
- AMD
- معالجات "المعدات الثقيلة"
- المعالجات القائمة على معمارية بولدوزر ، 12 أكتوبر 2011 [ 6 ]
- المعالجات القائمة على تقنية Piledriver [ 7 ]
- معالجات تعتمد على تقنية ستيمرولر
- المعالجات القائمة على الحفارات (بما في ذلك "الإصدار 2")
- زين : أظهرت اختبارات ويكي تشيب أن معالج FMA4 لا يزال يعمل (في ظل ظروف الاختبارات) على الرغم من عدم دعمه رسميًا وعدم الإبلاغ عنه من قِبل CPUID. وقد أكد ذلك أيضًا أغنر فوغ. [ 8 ] لكن اختبارات أخرى أعطت نتائج خاطئة. [ 9 ] ملاحظة دعم FMA4 على موقع AMD الرسمي: معالجات زين = AMD ThreadRipper 1900x، R7 Pro 1800، 1700، R5 Pro 1600، 1500، R3 Pro 1300، 1200، R3 2200G، R5 2400G. [ 10 ] [ 11 ] [ 12 ]
- معالجات "المعدات الثقيلة"
- إنتل
- لم تُصدر شركة إنتل معالجات تدعم لعبة FMA4.
مقتطف من مسلسل فول ميتال ألكيميست 4
| تقنية التذكر (AT&T) | المعاملات | عملية |
|---|---|---|
| VFMADDPDx | xmm، xmm، xmm/m128، xmm/m128 | أ = ب × ج + د |
| VFMADDPy | 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 |
تاريخ
يعود عدم التوافق بين معالج 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:
- يدعم GCC FMA4 مع -mfma4 منذ الإصدار 4.5.0 [ 25 ] وFMA3 مع -mfma منذ الإصدار 4.7.0.
- يدعم Microsoft Visual C++ 2010 SP1 تعليمات FMA4. [ 26 ]
- يدعم Microsoft Visual C++ 2012 تعليمات FMA3 (إذا كان المعالج يدعم أيضًا امتداد مجموعة تعليمات AVX2).
- مايكروسوفت فيجوال سي++ منذ إصدار VC 2013
- يدعم PathScale FMA4 مع -mfma. [ 27 ]
- يُضيف LLVM 3.1 دعم FMA4، [ 28 ] بالإضافة إلى دعم FMA3 مبدئي. [ 29 ]
- يضيف Open64 5.0 "دعمًا محدودًا".
- لا تدعم مُجمّعات Intel إلا تعليمات FMA3. [ 25 ]
- يدعم برنامج NASM تعليمات FMA3 منذ الإصدار 2.03 وتعليمات FMA4 منذ الإصدار 2.06.
- يدعم برنامج FASM كلاً من تعليمات FMA3 و FMA4.
مراجع
- ↑ وولتمان، جورج (برايم 95). "إنتل AVX وGIMPS" . mersenneforum.org . مشروع البحث عن أعداد ميرسين الأولية على الإنترنت (GIMPS) . تم الاطلاع عليه بتاريخ 27 يوليو 2011.
FMA3 وFMA4 ليستا مجموعتي تعليمات، بل هما تعليمات فردية - عملية ضرب وجمع مدمجة. قد تكونان مفيدتين للغاية اعتمادًا على كيفية تنفيذهما من قِبل إنتل وAMD
.{{cite web}}: صيانة CS1: أسماء رقمية: قائمة المؤلفين ( رابط ) - 1 2 "البنية الدقيقة لوحدات المعالجة المركزية من إنتل، وإيه إم دي، وفيا: دليل تحسين لمبرمجي لغة التجميع ومصممي المترجمات" (ملف PDF) . تم الاطلاع عليه بتاريخ 2017-05-02 .
- ↑ مافيو، روبن (1 مارس 2012). "AMD وVisual Studio 11 Beta" . AMD . تم الاسترجاع في 7 نوفمبر 2018 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ "CPU-Z - ID : y5z6gq" . تم الاسترجاع بتاريخ 2022-05-01 .
- ↑ "CPU-Z - ID : kr2mlx" . تم الاسترجاع بتاريخ 2022-05-01 .
- ↑ "دليل مبرمج معمارية AMD64، المجلد 6: تعليمات XOP وFMA4 وCVT16 ذات 128 بت و256 بت" (ملف PDF) . AMD . 1 مايو 2009.
- ↑ "تعليمات جديدة لـ "الجرافة" و "المطرقة": خطوة للأمام في تطوير البرمجيات عالية الأداء" (ملف PDF) . AMD . أكتوبر 2012.
- ↑ "مدونة Agner's CPU - نتائج اختبار AMD Ryzen" . 2017-05-02.
- 1 2 "مناقشة - يدعم معالج Ryzen لعبة FMA4 بشكل غير موثق" . تم الاطلاع عليه بتاريخ 10 مايو 2017 .
- ↑ "www.amd.com، قائمة طرازات الدعم لـ FMA4" .
- ↑ "www.amd.com، قائمة طرازات الدعم لـ FMA4" .
- ↑ "www.amd.com، قائمة طرازات الدعم لـ FMA4" .
- ↑ "مجموعة تعليمات SSE5 ذات 128 بت" . مركز مطوري AMD . مؤرشف من الأصل بتاريخ 15 يناير 2008. تم الاطلاع عليه بتاريخ 28 يناير 2008 .
- ↑ "مرجع برمجة ملحقات المتجهات المتقدمة من إنتل" (ملف PDF) . إنتل . تم الاطلاع عليه بتاريخ 5 أبريل 2008 .
- ↑ "مرجع برمجة ملحقات المتجهات المتقدمة من إنتل" . إنتل . تم الاسترجاع في 2009-05-06 .
- ↑ "تحقيق التوازن" . ديف كريستي، مدونات مطوري AMD. 6 مايو 2009. تم الاطلاع عليه بتاريخ 7 نوفمبر 2018 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - 1 2 "تعليمات جديدة للجرافة وآلة دق الركائز" (ملف PDF) . AMD . تم الاطلاع عليه بتاريخ 25 يوليو 2013 .
- ↑ "دليل تحسين البرمجيات لمعالجات AMD من عائلة 15h" (ملف PDF) . AMD . تم الاطلاع عليه بتاريخ 19 أبريل 2012 .
- ↑ "مرجع برمجة ملحقات مجموعة تعليمات معمارية إنتل" (ملف PDF) . إنتل . تم الاطلاع عليه بتاريخ 25 يوليو 2013 .
- ↑ جوبالاسوبرامانيان، غانيش (10 مارس 2015). " [ تحديث ] إضافة معالج znver1" . تم الاطلاع عليه بتاريخ 1 مايو 2022 .
- ↑ باوار، أميت (2015-08-07). " [ رقعة ] إزالة CpuFMA4 من علامات وحدة المعالجة المركزية Znver1" . تم الاسترجاع في 2022-05-01 .
- ↑ "تعليق من Mysticial على موقع Stack Overflow" . ١٦ يوليو ٢٠١٩. مؤرشف من الأصل بتاريخ ٢٢ أغسطس ٢٠١٩. تم الاطلاع عليه بتاريخ ١ سبتمبر ٢٠٢٣ .
{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط ) - ↑ "تعطل جهاز AMD Ryzen بسبب تسلسل تعليمات FMA3" . 16 مارس 2017. تم الاطلاع عليه بتاريخ 10 سبتمبر 2017 .
- ↑ "تعليق من Mysticial على موقع Stack Overflow" . 16 يوليو 2019. تم الاطلاع عليه بتاريخ 1 سبتمبر 2023 .
- 1 2 لطيف، لورانس (14 نوفمبر 2011). "يدعم GCC تعليمات FMA4 وXOP الخاصة بمعالج AMD Bulldozer فقط، بينما لا تزال إنتل تتجاهل الأمر" . صحيفة ذا إنكوايرر . مؤرشف من الأصل في 17 نوفمبر 2011.
- ↑ "إضافة وظائف FMA4 الداخلية لبرنامج Visual Studio 2010 SP1" . 4 فبراير 2013.
- ↑ "EKOPath man doc" . مؤرشف من الأصل بتاريخ 23-06-2016 . تم الاطلاع عليه بتاريخ 24-07-2013 .
- ↑ "ملاحظات إصدار LLVM 3.1" .
- ↑ "تمكين اكتشاف دعم AVX وAVX2 عبر CPUID" . LLVM . 2012-04-26. مؤرشف من الأصل في 2014-07-26 . تم الاطلاع عليه في 2017-02-06 .
- تعليمات X86
- الحوسبة SIMD
- تقنيات AMD
- امتدادات مجموعة التعليمات
