العودة
تعليمات vfmaddrnd231pd: موثقة في Intel SDM لكن لم تُصنع على الإطلاق
SiTech AI Team3 دقيقة قراءة

تعليمات vfmaddrnd231pd: موثقة في Intel SDM لكن لم تُصنع على الإطلاق

تظهر تعليمات FMA الغامضة vfmaddrnd231pd في SDM الصادر عن Intel عام 2024، رغم أنها تتسبب في خطأ تعليمات غير محددة على الأجهزة الحقيقية. تتبع المدونة أصلها إلى تجارب AVX10 المتروكة.

مظهر التعليمة

تظهر التعليمة vfmaddrnd231pd في Software Developer's Manual من Intel (SDM) بصفتها عضوًا في مجموعة تعليمات FMA. وفق إصدار 2024، تنفّذ عملية ضرب-جمع مدمجة لقيم الفاصلة العائمة مزدوجة الدقة والمعبأة، مع التحكم في التقريب. يحدد البايت الفوري المرتبط بالتعليمة الحقول الثنائية للتقريب وDAZ وFTZ وكبت الاستثناءات. كان هذا التحكم يتيح للعمليات الحسابية اختيار وضع التقريب مباشرة بدلًا من متغيرات عامة بطيئة، ويسرّع بشكل كبير الخوارزميات المعتمدة على التقريب. لكن هذه التعليمة غير موجودة.

عمليات بحث فاشلة وخطأ #UD

لا يعرف GNU Assembler التعليمة vfmaddrnd231pd. يذكر SDM intrinsics الخاصة بـ Intel C/C++ Compiler، وهما _mm_fmaddround_pd و_mm256_fmaddround_pd، لكنهما غير موجودتين لا في Clang ولا حتى في ICC. وتجميع التعليمة يدويًا من قائمة رموز العمليات الخاصة بـ SDM، أي VEX.DDS.128.66.0F3A.W1 B8 /r /ib، يطرح سؤالًا آخر: لم يُذكر في أي مكان بالدليل ما يعنيه DDS. وعلى معالج Haswell الذي يدعم FMA، تتسبب في خطأ #UD (تعليمات غير محددة). ولا توجد هذه التعليمة في إصدار 2026 من SDM، رغم وجودها في إصدار 2024؛ ولا توجد أيضًا صيغها pd وps وsd وss ولا أشكال 132 و213 و231 التي تمتلكها تعليمات FMA الأخرى.

نموذج AVX10 متروك

أكملت تعليقات المدونة القصة. في 2023، لم تستطع Intel إضافة AVX-512 إلى وحدات المعالجة المركزية المخصصة للمستهلكين بسبب قيود تقنية، لكنها أرادت وظائف بأسلوب AVX-512، وهو ما قادها إلى AVX10. كان AVX10 يشبه AVX-512، رغم أنه كان يدعم المتجهات بحجم 512 بت بشكل مشروط. في بادئة EVEX الخاصة بـ AVX-512 تُستخدم بتات التقريب الثابتة وفق عرض العملية، لذا يمكن ضبط التقريب فقط في العمليات القياسية وعمليات 512 بت. واحتاج AVX10 بدون دعم 512 بت إلى ترميز مختلف. نظريًا، خططت Intel لاستخدام البايت الفوري من أجل التقريب، لذلك دخلت vfmaddrnd231pd والتعليمات المشابهة في التوثيق. وكانت تستخدم بادئة VEX لا EVEX، مما سمح للمعالجات التي لا تدعم المتجهات بحجم 512 بت بتجاهل EVEX. بحلول 2024، رفضت Intel هذا النهج واستخدمت البت الأخير غير المستخدم في EVEX لتقريب المتجهات بحجم 256 بت، واعتمدت ترميز AVX-512 وصياغتها، مما جعل vfmaddrnd231pd ونسلها زائدين عن الحاجة. وخلال المراجعة، بدأ أحدهم بحذف ظهورات التعليمة من مسودة SDM.

تصحيحات المترجم تؤكد التاريخ

بحلول 2025، أصبح دعم AVX-512 مطلوبًا بعد شعبيته في Zen 4، وجعلت Intel دعم المتجهات بحجم 512 بت في AVX10 اختياريًا. وأُزيلت من وثيقة AVX10 البيضاء الحد الأقصى لسجلات المتجهات بحجم 256 بت وتعليمات التقريب المضمنة بحجم 256 بت. وأرسلت Intel تصحيحات إلى GCC لإزالة دعم التقريب بحجم 256 بت، من بينها التصحيح «Revert “AVX10.2 ymm rounding: Support vfmadd{132, 231, 213}p{s, d, h} intrins“»، الذي حذف intrinsics مثل _mm256_fmadd_round_pd. وهو يشبه إلى حد كبير _mm256_fmaddround_pd الموثقة للتعليمة الظاهرية. ثم لاحظت Intel لاحقًا أن vfmaddrnd231pd ما زال موجودًا في SDM، فحذفته. وبحسب خلاصة المؤلف، تنحدر التعليمة من AVX10: أُضيفت أثناء مرحلة النمذجة، ثم أُعيد تصميمها لترميز آخر، ثم أصبحت زائدة، لكنها نُشرت بالصدفة في الدليل الرسمي، رغم أن الأجهزة لم تشغّلها على الإطلاق.

المصادر: purplesyringa.moe

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.