امتدادات SIMD للبث

في مجال الحوسبة ، تُعدّ امتدادات SIMD المتدفقة ( SSE ) امتدادًا لمجموعة تعليمات SIMD (تعليمات واحدة، بيانات متعددة ) لبنية x86 ، صممتها شركة إنتل وقدمتها عام 1999 في سلسلة معالجات Pentium III المركزية (CPUs) بعد فترة وجيزة من ظهور معالجات 3DNow! من شركة AMD . تحتوي SSE على 70 تعليمة جديدة (65 رمزًا فريدًا [ 1 ] باستخدام 70 ترميزًا)، يعمل معظمها على بيانات الفاصلة العائمة أحادية الدقة . تُحسّن تعليمات SIMD الأداء بشكل كبير عند تنفيذ العمليات نفسها على كائنات بيانات متعددة. ومن التطبيقات الشائعة معالجة الإشارات الرقمية ومعالجة الرسومات .

كانت أولى محاولات إنتل في مجال تقنية SIMD لمعالج IA-32 هي مجموعة تعليمات MMX . واجهت MMX مشكلتين رئيسيتين: الأولى، إعادة استخدام سجلات الفاصلة العائمة الموجودة في معالجات x87، مما جعل المعالجات غير قادرة على معالجة بيانات الفاصلة العائمة وبيانات SIMD في آنٍ واحد؛ والثانية، اقتصارها على الأعداد الصحيحة . أما تعليمات الفاصلة العائمة SSE، فتعتمد على مجموعة سجلات مستقلة جديدة، هي سجلات XMM، وتضيف بعض تعليمات الأعداد الصحيحة التي تعمل على سجلات MMX.

قامت إنتل لاحقًا بتوسيع تقنية SSE لتشمل SSE2 و SSE3 و SSSE3 و SSE4 . وبفضل دعمها للعمليات الحسابية ذات الفاصلة العائمة، اتسع نطاق استخداماتها مقارنةً بتقنية MMX، ما جعلها أكثر شيوعًا. ومع إضافة دعم الأعداد الصحيحة في SSE2، أصبحت تقنية MMX غير ضرورية إلى حد كبير، على الرغم من إمكانية تحقيق تحسينات إضافية في الأداء في بعض الحالات باستخدام MMX بالتوازي مع عمليات SSE.

كانت تقنية SSE تُعرف في الأصل باسم Katmai New Instructions ( KNI )، حيث كان Katmai الاسم الرمزي لأول مراجعة لنواة Pentium III. خلال مشروع Katmai، سعت إنتل إلى تمييزها عن خط إنتاجها السابق، وخاصةً معالجها الرائد Pentium II . ثم أُعيد تسميتها لاحقًا إلى Internet Streaming SIMD Extensions ( ISSE [ 2 ] )، ثم إلى SSE.

أضافت AMD مجموعة فرعية من SSE، تضم 19 تعليمة، تُعرف باسم تعليمات MMX الجديدة ، [ 3 ] وتُعرف بعدة متغيرات ومجموعات من SSE وMMX، أو باسم Integer SSE ( ISSE ، لا ينبغي الخلط بينها وبين Internet Streaming SIMD Extensions ، وهو اسم سابق لـ SSE) بعد فترة وجيزة من إصدار معالج Athlon الأصلي في أغسطس 1999 (انظر ملحقات 3DNow! ). وفي النهاية، أضافت AMD دعمًا كاملاً لتعليمات SSE (يُشار إليها أحيانًا باسم 3DNow! Professional ) بدءًا من معالجات Athlon XP ( بنوى Corvette و Palomino ) و Duron ( بنوى Morgan ).

السجلات

أضافت تقنية SSE في الأصل ثمانية سجلات جديدة بحجم 128 بت، تُعرف باسم XMM0من إلى XMM7. وأضافت امتدادات AMD64 من AMD ثمانية سجلات أخرى XMM8من إلى XMM15، وهذا الامتداد مُكرر في بنية Intel 64. كما يوجد سجل تحكم/حالة جديد بحجم 32 بت MXCSR. ولا يمكن الوصول إلى السجلات XMM8من إلى XMM15إلا في وضع التشغيل 64 بت.

استخدمت SSE نوع بيانات واحد فقط لسجلات XMM:

لاحقًا، وسّع نظام SSE2 استخدام سجلات XMM ليشمل ما يلي:

  • رقمان من أرقام الفاصلة العائمة ذات الدقة المزدوجة 64 بت أو
  • عددان صحيحان من 64 بت أو
  • أربعة أعداد صحيحة من 32 بت أو
  • ثمانية أعداد صحيحة قصيرة مكونة من 16 بت أو
  • ستة عشر بايت أو حرفًا من 8 بت.

نظرًا لأن هذه السجلات ذات 128 بت تمثل حالات إضافية للجهاز يجب على نظام التشغيل الاحتفاظ بها عند تبديل المهام ، فإنها تكون معطلة افتراضيًا حتى يقوم نظام التشغيل بتفعيلها صراحةً. هذا يعني أن نظام التشغيل يجب أن يكون على دراية بكيفية استخدام تعليمات FXSAVE`and` FXRSTOR، وهي زوج من التعليمات الموسعة التي يمكنها حفظ جميع حالات سجلات x86 وSSE دفعة واحدة. وقد أُضيفت هذه الميزة سريعًا إلى جميع أنظمة التشغيل الرئيسية IA-32.

كان معالج Pentium III أول معالج يدعم تقنية SSE ، حيث تقاسم موارد التنفيذ بين SSE ووحدة الفاصلة العائمة (FPU). [ 2 ] ورغم أن التطبيق المُجمَّع يُمكنه دمج تعليمات FPU وSSE جنبًا إلى جنب، إلا أن Pentium III لا يُصدر تعليمة FPU وتعليمة SSE في دورة الساعة نفسها . يُقلل هذا القيد من فعالية تقنية التجزئة ، لكن سجلات XMM المنفصلة تسمح بدمج عمليات SIMD وعمليات الفاصلة العائمة العددية دون التأثير السلبي على الأداء الناتج عن التبديل الصريح بين وضع MMX ووضع الفاصلة العائمة.

تعليمات SSE

قدمت SSE كلاً من تعليمات الفاصلة العائمة العددية والمضغوطة .

تعليمات الفاصلة العائمة

تتوافق عمليات الفاصلة العائمة مع معيار IEEE 754-1985، باستثناء RSQRTSS، الذي لم يتم تحديده في المعيار.

  • نقل البيانات من الذاكرة إلى المسجل/من المسجل إلى الذاكرة/من المسجل إلى المسجل
    • كمية قياسية –MOVSS
    • مكتظة –MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS, MOVMSKPS
  • الحساب
    • كمية قياسية –ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
    • مكتظة –ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
  • يقارن
    • كمية قياسية –CMPSS, COMISS, UCOMISS
    • مكتظة –CMPPS
  • إعادة ترتيب البيانات وفك ضغطها
    • مكتظة –SHUFPS, UNPCKHPS, UNPCKLPS
  • تحويل نوع البيانات
    • كمية قياسية –CVTSI2SS, CVTSS2SI, CVTTSS2SI
    • مكتظة –CVTPI2PS, CVTPS2PI, CVTTPS2PI
  • العمليات المنطقية على مستوى البت
    • مكتظة –ANDPS, ORPS, XORPS, ANDNPS

تعليمات الأعداد الصحيحة

  • الحساب
    • PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
  • نقل البيانات
    • PEXTRW, PINSRW
  • آخر
    • PMOVMSKB, PSHUFW

تعليمات أخرى

  • MXCSRإدارة
    • LDMXCSR, STMXCSR
  • إدارة الذاكرة المؤقتة والذاكرة
    • MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

مثال

يوضح المثال البسيط التالي ميزة استخدام SSE. لنأخذ عملية جمع المتجهات، وهي عملية شائعة الاستخدام في تطبيقات رسومات الحاسوب. يتطلب جمع متجهين أحاديي الدقة، كل منهما مكون من أربعة عناصر، باستخدام معالجات x86، أربع تعليمات جمع للأعداد العشرية.

vec_res.x = v1.x + v2.x ; vec_res.y = v1.y + v2.y ; vec_res.z = v1.z + v2.z ; vec_res.w = v1.w + v2.w ;

يتوافق هذا مع أربع تعليمات جمع عددي (FADD) في معالج x86 في الكود الأصلي. من ناحية أخرى، وكما يوضح الكود الزائف التالي، يمكن استبدال تعليمات الجمع العددي الأربع بتعليمات جمع عددي مُجمّعة واحدة بحجم 128 بت.

movaps xmm0 , [ v1 ] ; xmm0 = v1.w | v1.z | v1.y | v1.x addps xmm0 , [ v2 ] ; xmm0 = v1.w+v2.w | v1.z+v2.z | v1.y+v2.y | v1.x+v2.x movaps [ vec_res ], xmm0 ; xmm0

الإصدارات اللاحقة

  • تُعدّ SSE2 ، أو تعليمات ويلاميت الجديدة (WNI)، التي طُرحت مع معالج بنتيوم 4 ، تحسينًا رئيسيًا لـ SSE. تُضيف SSE2 ميزتين أساسيتين: دقة مزدوجة (64 بت) للفاصلة العائمة لجميع عمليات SSE، وعمليات الأعداد الصحيحة MMX على سجلات XMM ذات 128 بت. في مجموعة تعليمات SSE الأصلية، كان التحويل من وإلى الأعداد الصحيحة يُخزّن بيانات الأعداد الصحيحة في سجلات MMX ذات 64 بت. تُمكّن SSE2 المبرمج من إجراء عمليات حسابية SIMD على أي نوع من البيانات (من عدد صحيح 8 بت إلى عدد عشري 64 بت) باستخدام ملف سجلات XMM فقط، دون الحاجة إلى استخدام سجلات MMX أو FPU القديمة. كما تُقدّم مجموعة تعليمات مستقلة للتعامل مع أنواع البيانات الشائعة.
  • تُعدّ SSE3 ، المعروفة أيضًا باسم تعليمات بريسكوت الجديدة (PNI)، ترقيةً تدريجيةً لـ SSE2، حيث أضافت مجموعةً من تعليمات الرياضيات الموجهة لمعالجة الإشارات الرقمية (DSP) وبعض تعليمات إدارة العمليات (الخيوط). كما سمحت بجمع أو ضرب عددين مُخزّنين في نفس السجل، وهو ما لم يكن ممكنًا في SSE2 والإصدارات الأقدم. تُعرف هذه الميزة، التي تُسمى "أفقي" في مصطلحات إنتل، بأنها الإضافة الرئيسية لمجموعة تعليمات SSE3. ويمكن لامتداد 3DNow! من AMD القيام بذلك أيضًا.
  • SSSE3 ، أو تعليمات ميروم الجديدة (MNI)، هي ترقية لـ SSE3، حيث تضيف 16 تعليمة جديدة تشمل تبديل البايتات في الكلمة، وضرب الأعداد ذات الفاصلة الثابتة 16 بت مع التقريب الصحيح، وتعليمات التجميع داخل الكلمة. غالبًا ما يُخلط بين SSSE3 وSSE4 لأن هذا المصطلح استُخدم أثناء تطوير بنية المعالج الدقيقة Core .
  • SSE4 ، تعليمات Penryn الجديدة (PNI)، هي تحسين رئيسي آخر، حيث تضيف تعليمات الضرب النقطي ، وتعليمات عدد صحيح إضافية، وتعليمات popcnt( عدد السكان : عد عدد البتات التي تم تعيينها إلى 1، وتستخدم على نطاق واسع على سبيل المثال في علم التشفير )، والمزيد.
  • XOP و FMA4 و CVT16 هي إصدارات جديدة أعلنت عنها AMD في أغسطس 2007 [ 4 ] [ 5 ] وتم تنقيحها في مايو 2009. [ 6 ]
  • تُعدّ تقنية AVX ( امتدادات المتجهات المتقدمة )، أو GNI (تعليمات Gesher الجديدة)، نسخةً متطورةً من تقنية SSE، أعلنت عنها شركة إنتل، وتتميز بمسار بيانات أوسع من 128 بت إلى 256 بت، وتعليمات بثلاثة معاملات (بدلاً من اثنين). وقد أطلقت إنتل معالجات تدعم تقنية AVX في أوائل عام 2011. [ 7 ]
  • AVX2 هو توسيع لمجموعة تعليمات AVX.
  • AVX-512 (3.1 و 3.2) عبارة عن امتدادات 512 بت لتعليمات Advanced Vector Extensions SIMD ذات 256 بت لبنية مجموعة تعليمات x86.

تحديد الهوية

يمكن استخدام البرامج التالية لتحديد أي إصدارات من SSE مدعومة على النظام، إن وجدت.

  • أداة تعريف معالج Intel [ 8 ]
  • CPU-Z – أداة لتحديد وحدة المعالجة المركزية واللوحة الأم والذاكرة.
  • lscpu - يتم توفيره بواسطة حزمة util-linux في معظم توزيعات لينكس.

انظر أيضاً

مراجع

  1. "دليل مطوري برامج معمارية Intel® 64 و IA-32، المجلد 1: المعمارية الأساسية" . Intel. أبريل 2022. الصفحات  5-16 إلى 5-19 . مؤرشف من الأصل في 25 أبريل 2022. تم الاطلاع عليه في 16 مايو 2022 .
  2. 1 2 ديفندورف، كيث (8 مارس 1999). "بنتيوم 3 = بنتيوم 2 + SSE: بنية SSE للإنترنت تعزز أداء الوسائط المتعددة" (ملف PDF) . تقرير المعالجات الدقيقة . 13 (3). مؤرشف (ملف PDF) من الأصل في 17 أبريل 2018. تم الاسترجاع في 1 سبتمبر 2017 .
  3. "دليل ملحقات AMD لمجموعات تعليمات 3DNow وMMX" (ملف PDF) . شركة Advanced Micro Devices، مارس 2000. مؤرشف من النسخة الأصلية (ملف PDF) في 17 مايو 2008. تم الاطلاع عليه في 18 أبريل 2024 .
  4. فانس، آشلي (3 أغسطس 2007). "شركة AMD ترسم مخططًا لتعزيز الأداء أحادي النواة باستخدام امتدادات x86" . ذا ريجستر . مؤرشف من الأصل في 27 أبريل 2011. تم الاطلاع عليه في 24 أغسطس 2017 .
  5. "تقنية AMD64: مجموعة تعليمات SSE5 ذات 128 بت" (ملف PDF) . AMD . أغسطس 2007. مؤرشف (ملف PDF) من الأصل في 25 أغسطس 2017. تم الاطلاع عليه في 24 أغسطس 2017 .
  6. "تقنية AMD64، دليل مبرمج بنية AMD64، المجلد 6: تعليمات XOP وFMA4 ذات 128 بت و256 بت" (ملف PDF) . AMD. نوفمبر 2009. مؤرشف (PDF) من الأصل في 31 يناير 2017. تم الاطلاع عليه في 24 أغسطس 2017 .
  7. جيركار، ميليند (1 أكتوبر 2013). "ملحقات المتجهات المتقدمة من إنتل (Intel® AVX)" . إنتل . مؤرشف من الأصل في 25 أغسطس 2017. تم الاطلاع عليه في 24 أغسطس 2017 .
  8. "تنزيل أداة تعريف معالج Intel®" . Intel. 24 يوليو 2017. مؤرشف من الأصل في 25 أغسطس 2017. تم الاطلاع عليه في 24 أغسطس 2017 .