مجموعة تعليمات معالجة البتات x86

مجموعات تعليمات معالجة البتات ( مجموعات BMI ) هي امتدادات لبنية مجموعة تعليمات x86 للمعالجات الدقيقة من إنتل وإيه إم دي . يهدف استخدام هذه المجموعات إلى تحسين سرعة معالجة البتات . جميع التعليمات في هذه المجموعات غير مُخصصة لتقنية SIMD وتعمل فقط على سجلات الأغراض العامة .

أصدرت شركة إنتل مجموعتين من التعليمات البرمجية: BMI (المعروفة الآن باسم BMI1) وBMI2؛ وقد طُرحت كلتاهما مع معمارية Haswell الدقيقة ، حيث تتطابق BMI1 مع الميزات التي توفرها مجموعة تعليمات ABM من AMD، بينما تُوسّع BMI2 هذه الميزات. كما أصدرت AMD مجموعتين أخريين: ABM ( معالجة البتات المتقدمة ، وهي أيضًا مجموعة فرعية من SSE4a نفذتها إنتل كجزء من SSE4.2 وBMI1)، وTBM ( معالجة البتات اللاحقة ، وهي إضافة طُرحت مع معالجات Piledriver كإضافة إلى BMI1، ولكن تم التخلي عنها في معالجات Zen ). [ 1 ]

معالجة البتات المتقدمة (ABM)

كانت AMD أول من قدم التعليمات التي تُشكل الآن BMI1 من Intel كجزء من مجموعة تعليمات ABM ( معالجة البتات المتقدمة )، ثم أضافت لاحقًا دعمًا لتعليمات BMI2 الجديدة من Intel. تُعلن AMD اليوم عن توفر هذه الميزات عبر علامات BMI1 وBMI2 الخاصة بمعالجات Intel، وتُوجه المبرمجين لاستهدافها وفقًا لذلك. [ 2 ]

بينما تعتبر إنتل هذه التعليمات POPCNTجزءًا من SSE4.2 LZCNTوجزءًا من BMI1، فإن كلاً من إنتل وAMD تعلنان عن وجود هاتين التعليماتين بشكل منفصل. تحتوي هذه التعليمات على علامة CPUIDPOPCNT منفصلة تحمل الاسم نفسه، وتستخدم إنتل وAMD علامة AMD للإشارة إلى دعمها (لأن دمجها مع BMI1 وBMI2 يُكمل مجموعة تعليمات ABM الموسعة). [ 2 ] [ 3 ]ABMLZCNTLZCNT

التشفيرتعليماتالوصف [ 4 ]
F3 0F B8 /rPOPCNTتعداد السكان
F3 0F BD /rLZCNTالأصفار البادئة مهمة

LZCNTيرتبط هذا الأمر بتعليمات Bit Scan Reverse ( BSR)، ولكنه يُفعّل علامتي ZF (إذا كانت النتيجة صفرًا) وCF (إذا كان المصدر صفرًا) بدلًا من تفعيل علامة ZF (إذا كان المصدر صفرًا). كما أنه يُنتج نتيجة مُحددة (حجم مُعامل المصدر بالبتات) إذا كان مُعامل المصدر صفرًا. بالنسبة لمُعامل غير صفري، يكون مجموع LZCNTو BSRهو عرض بتات المُعامل ناقص 1 (على سبيل المثال، إذا كان مُعامل 32 بت هو 0x000f0000، فإن LZCNT يُعطي 12، وBSR يُعطي 19).

يتم ترميز التعليمات البرمجية LZCNTبحيث إذا لم يكن ABM مدعومًا، BSRفسيتم تنفيذ التعليمات البرمجية بدلاً من ذلك. [ 4 ] : ​​227

BMI1 (مجموعة تعليمات معالجة البتات 1)

التعليمات المذكورة أدناه هي تلك التي يُفعّلها BMIالبت الموجود في CPUID. تعتبرها إنتل رسميًا LZCNTجزءًا من BMI، لكنها تُعلن عن LZCNTدعمها باستخدام ABMعلامة ميزة CPUID. [ 3 ] يتوفر BMI1 في معالجات AMD Jaguar ، [ 5 ] و Piledriver، [ 6 ] والمعالجات الأحدث، وفي معالجات Intel Haswell، [ 7 ] والمعالجات الأحدث.

التشفيرتعليماتالوصف [ 3 ]التعبير المكافئ C [ 8 ] [ 9 ] [ 10 ]
VEX.LZ.0F38 F2 /rANDNمنطقي وليس~x & y
VEX.LZ.0F38 F7 /rBEXTRاستخراج حقل البت (مع السجل)(src >> start) & ((1 << len) - 1)
VEX.LZ.0F38 F3 /3BLSIاستخراج البت المعزول ذي المجموعة الأدنىx & -x
VEX.LZ.0F38 F3 /2BLSMSKاضبط القناع على أقل بت مُحددx ^ (x - 1)
VEX.LZ.0F38 F3 /1BLSRإعادة ضبط أدنى بتة مُعينةx & (x - 1)
F3 0F BC /rTZCNTاحسب عدد البتات الصفرية اللاحقة
31 + ( ! x ) - ((( x & - x ) & 0x0000FFFF ) ? 16 : 0 ) - ((( x & - x ) & 0x00FF00FF ) ? 8 : 0 ) - ((( x & - x ) & 0x0F0F0F0F ) ? 4 : 0 ) - ((( x & - x ) & 0x33333333 ) ? 2 : 0 ) - ((( x & - x ) & 0x55555555 ) ? 1 : 0 )

TZCNTتُشابه هذه BSFالتعليمات تقريبًا تعليمات Bit Scan Forward، ولكنها تُفعّل علامتي ZF (إذا كانت النتيجة صفرًا) وCF (إذا كان المصدر صفرًا) بدلًا من تفعيل علامة ZF (إذا كان المصدر صفرًا). بالنسبة للوسيط غير الصفري، تكون نتيجة TZCNTكل من التعليمات BSFمتساوية.

كما هو الحال مع LZCNT، فإن ترميز TZCNTبحيث إذا لم يكن BMI1 مدعومًا، BSFفسيتم تنفيذ التعليمة بدلاً من ذلك. [ 4 ] : ​​352

BMI2 (مجموعة تعليمات معالجة البتات 2)

قدمت إنتل تقنية BMI2 إلى جانب BMI1 في سلسلة معالجات Haswell. أما AMD فهي الوحيدة التي أنتجت معالجات تدعم BMI1 دون BMI2؛ إذ تدعم معمارية Excavator من AMD والإصدارات الأحدث منها تقنية BMI2. [ 11 ]

التشفيرتعليماتوصف
VEX.LZ.0F38 F5 /rBZHIأصفار البتات العالية بدءًا من موضع البت المحدد [src & (1 << inx)-1]؛
VEX.LZ.F2.0F38 F6 /rMULXيمكن إجراء عمليات الضرب غير الموقعة دون التأثير على الرايات، وكذلك على سجلات الوجهة العشوائية.
VEX.LZ.F2.0F38 F5 /rPDEPإيداع البتات المتوازية
VEX.LZ.F3.0F38 F5 /rPEXTاستخراج الأجزاء المتوازية
VEX.LZ.F2.0F3A F0 /r ibRORXقم بتدويرها منطقيًا إلى اليمين دون التأثير على العلامات.
VEX.LZ.F3.0F38 F7 /rSARXإزاحة العمليات الحسابية إلى اليمين دون التأثير على العلامات
VEX.LZ.F2.0F38 F7 /rSHRXإزاحة منطقية لليمين دون التأثير على العلامات
VEX.LZ.66.0F38 F7 /rSHLXإزاحة منطقية لليسار دون التأثير على العلامات

إيداع واستخراج البتات بالتوازي

PDEPتُعدّ تعليمات PEXTالضغط والتوسيع على مستوى البتات تعليماتٍ جديدةً مُعمّمةً للضغط والتوسيع على مستوى البتات. تأخذ هذه التعليمات مُدخلين: مصدر، ومُحدِّد. المُحدِّد عبارة عن خريطة بتات تُحدِّد البتات المراد ضغطها أو فك ضغطها. تقوم تعليمات الضغط والتوسيع PEXTبنسخ البتات المُحدَّدة من المصدر إلى بتات مُتجاورة منخفضة الترتيب في الوجهة، بينما تُمسح بتات الوجهة ذات الترتيب الأعلى. أما PDEPتعليمات التوسيع، فتقوم بالعكس بالنسبة للبتات المُحدَّدة: حيث تُنسخ بتات مُتجاورة منخفضة الترتيب إلى بتات مُحدَّدة في الوجهة، بينما تُمسح بتات الوجهة الأخرى. يُمكن استخدام هذه التعليمات لاستخراج أي حقل بتات من المُدخل، بل وحتى لإجراء عمليات خلط على مستوى البتات كانت مُكلفةً سابقًا. على الرغم من أن وظيفة هذه التعليمات تُشبه تعليمات التجميع والتشتيتPDEP على مستوى البتات في SIMD، إلا PEXTأن تعليمات التوسيع (مثل باقي مجموعات تعليمات BMI) تعمل على سجلات الأغراض العامة. [ 12 ]

تتوفر التعليمات بنسختين: 32 بت و64 بت. مثال على استخدام مصدر ومحدد عشوائيين في وضع 32 بت:

تعليماتقناع التحديدمصدروجهة
PEXT0xff00fff00x123456780x00012567
PDEP0xff00fff00x000125670x12005670

تُنفّذ معالجات AMD السابقة لـ Zen 3 [ 13 ] التي تدعم PDEP وPEXT ذلك باستخدام التعليمات البرمجية الدقيقة، بزمن استجابة يبلغ 18 دورة [ 14 ] بدلاً من 3 دورات (في Zen 3) [ 15 ] . ونتيجةً لذلك، غالبًا ما يكون استخدام تعليمات أخرى أسرع على هذه المعالجات. [ 16 ]

معالجة البتات اللاحقة (TBM)

تتألف TBM من تعليمات مكملة لمجموعة التعليمات التي تبدأها BMI1؛ وطبيعتها التكميلية تعني أنها لا تحتاج بالضرورة إلى استخدامها مباشرةً، بل يمكن توليدها بواسطة مُصرّف مُحسِّن عند دعمه. قدمت AMD تقنية TBM مع BMI1 في سلسلة معالجات Piledriver [ 6 ] ؛ بينما لا تدعم معالجات AMD Jaguar اللاحقة والمعالجات المبنية على معمارية Zen تقنية TBM. [ 5 ] لا تدعم أي من معالجات Intel (على الأقل حتى Alder Lake ) تقنية TBM.

التشفيرتعليماتالوصف [ 4 ]التعبير المكافئ C [ 17 ] [ 9 ]
XOP.LZ.0A 10 /r idBEXTRاستخراج حقل البت (مع القيمة الفورية)(src >> start) & ((1 << len) - 1)
XOP.LZ.09 01 /1BLCFILLاملأ من الجزء السفلي الشفافx & (x + 1)
XOP.LZ.09 02 /6BLCIعزل الجزء السفلي الواضحx | ~(x + 1)
XOP.LZ.09 01 /5BLCICاعزل البتة الواضحة الأدنى وأكملها~x & (x + 1)
XOP.LZ.09 02 /1BLCMSKقناع من أدنى بت شفافx ^ (x + 1)
XOP.LZ.09 01 /3BLCSاضبط أقل بت شفافx | (x + 1)
XOP.LZ.09 01 /2BLSFILLاملأ من أدنى مستوى ضبطx | (x - 1)
XOP.LZ.09 01 /6BLSICاعزل أقل بت مضبوط وقم بتكملة ذلك~x | (x - 1)
XOP.LZ.09 01 /7T1MSKCقناع معكوس من الأقنعة اللاحقة~x | (x + 1)
XOP.LZ.09 01 /4TZMSKإخفاء الأصفار اللاحقة~x & (x - 1)

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

تجدر الإشارة إلى أن دعم امتدادات التعليمات يعني قدرة المعالج على تنفيذ التعليمات المدعومة لأغراض توافق البرامج. مع ذلك، قد لا يكون أداء المعالج جيدًا عند القيام بذلك. على سبيل المثال، تُنفذ معالجات Excavator حتى Zen 2 تعليمات PEXT وPDEP باستخدام التعليمات البرمجية الدقيقة، مما يؤدي إلى تنفيذ هذه التعليمات ببطء ملحوظ مقارنةً بتنفيذها باستخدام تعليمات أخرى. [ 20 ] (في الواقع، تُعد طريقة برمجية تُسمى "zp7" أسرع على هذه الأجهزة). [ 21 ] ولتحقيق الأداء الأمثل، يُنصح مطورو المُترجمات باختيار استخدام تعليمات مُحددة في الامتدادات بناءً على خصائص الأداء الخاصة بالمعمارية، بدلاً من الاعتماد على توفر الامتدادات.

انظر أيضاً

مراجع

  1. 1 2 "تعليمات جديدة للجرافة وآلة دق الركائز" (ملف PDF) . تم الاطلاع عليه بتاريخ 2014-01-03 .
  2. 1 2 "دليل مبرمج معمارية AMD64، المجلد 3: تعليمات الأغراض العامة وتعليمات النظام" (ملف PDF) . تم الاطلاع عليه بتاريخ 20 يوليو 2022 .
  3. 1 2 3 "مرجع برمجة ملحقات المتجهات المتقدمة من إنتل" (ملف PDF) . intel.com . إنتل . يونيو 2011. تم الاطلاع عليه بتاريخ 3 يناير 2014 .
  4. 1 2 3 4 "دليل مبرمج معمارية AMD64، المجلد 3: تعليمات الأغراض العامة وتعليمات النظام" (ملف PDF) . المراجعة 3.32. AMD . مارس 2021. مؤرشف (ملف PDF) من الأصل بتاريخ 2021-04-08 . تم الاطلاع عليه بتاريخ 2021-04-08 .
  5. 1 2 3 4 "ورقة بيانات سلسلة AMD A من العائلة 16h" (ملف PDF) . amd.com . AMD . أكتوبر 2013. تم الاطلاع عليه بتاريخ 2 يناير 2014 .
  6. 1 2 هولينغسورث، برنت. "تعليمات جديدة لـ "الجرافة" و"المدق"" (ملف PDF) . شركة أدفانسد مايكرو ديفايسز. مؤرشف من الأصل (ملف PDF) بتاريخ 26 يوليو 2014. تم الاطلاع عليه بتاريخ 11 ديسمبر 2014 .
  7. 1 2 لوكتيوخين، ماكس. "كيفية اكتشاف دعم التعليمات الجديدة في عائلة معالجات Intel® Core™ من الجيل الرابع" . www.intel.com . Intel . تم الاطلاع عليه بتاريخ 11 ديسمبر 2014 .
  8. "bmiintrin.h من GCC 4.8" . مؤرشف من الأصل بتاريخ 23 فبراير 2017. تم الاطلاع عليه بتاريخ 17 مارس 2014 .
  9. 1 2 "sandpile.org -- x86 architecture -- bits" . تم الاسترجاع في 17-03-2014 .
  10. "Abseil - C++ Common Libraries" . GitHub . 4 نوفمبر 2021.
  11. ١ ٢ "معالج AMD Excavator Core قد يُحقق تحسينات هائلة في الأداء" . مختبرات X-bit. ١٨ أكتوبر ٢٠١٣. مؤرشف من الأصل في ٢٣ أكتوبر ٢٠١٣. تم الاطلاع عليه في ٢٤ نوفمبر ٢٠١٣ .
  12. يديديا هيلويتز؛ روبي ب. لي (أغسطس 2009). "أساس جديد للمُبدِّلات في المعالجات العامة لمعالجة البتات الحالية والمتقدمة" (ملف PDF) . palms.princeton.edu . مجلة IEEE للمعاملات الحاسوبية. الصفحات 1035-1048 . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 17 يونيو 2013. تم الاطلاع عليه بتاريخ 10 فبراير 2014 . 
  13. "Zen 3 - Microarchitectures - AMD - WikiChip" . مؤرشف من الأصل بتاريخ 12 نوفمبر 2020. تم الاطلاع عليه بتاريخ 15 نوفمبر 2020 .
  14. "جداول التعليمات" (ملف PDF) . تم الاطلاع عليه بتاريخ 2023-09-09 .
  15. "دليل تحسين البرامج لمعالجات AMD من عائلة 19h" . مركز مطوري AMD . تم الاطلاع عليه بتاريخ 22-07-2022 .
  16. "إنقاذ معالجات Ryzen الخاصة: وظائف استبدال PEXT/PDEP 32/64 بت لمعالجات AMD (BR/Zen/Zen+/Zen2) استنادًا إلى zp7 الخاص بـ @zwegner" . تويتر . تم الاطلاع عليه بتاريخ 21 فبراير 2022 .
  17. "tbmintrin.h من GCC 4.8" . مؤرشف من الأصل بتاريخ 23 فبراير 2017. تم الاطلاع عليه بتاريخ 17 مارس 2014 .
  18. "دليل مطوري BIOS ونواة النظام لعائلة AMD 14h" (ملف PDF) . تم الاطلاع عليه بتاريخ 3 يناير 2014 .
  19. "مراجعة معمقة لمعالجات AMD Zen 3 Ryzen: اختبار معالجات 5950X و5900X و5800X و5600X" . مؤرشف من الأصل بتاريخ 5 نوفمبر 2020. تم الاطلاع عليه بتاريخ 26 ديسمبر 2021 .
  20. "تقرير تقدم دولفين: ديسمبر 2019 ويناير 2020" . محاكي دولفين . 7 فبراير 2020. تاريخ الاسترجاع: 7 فبراير 2020 .
  21. ^ زاك فيجنر (4 نوفمبر 2020). "زويجنر/zp7" . جيثب .

للمزيد من القراءة