مجموعة تعليمات معالجة البتات 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 /r | POPCNT | تعداد السكان |
F3 0F BD /r | LZCNT | الأصفار البادئة مهمة |
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 /r | ANDN | منطقي وليس | ~x & y |
VEX.LZ.0F38 F7 /r | BEXTR | استخراج حقل البت (مع السجل) | (src >> start) & ((1 << len) - 1) |
VEX.LZ.0F38 F3 /3 | BLSI | استخراج البت المعزول ذي المجموعة الأدنى | x & -x |
VEX.LZ.0F38 F3 /2 | BLSMSK | اضبط القناع على أقل بت مُحدد | x ^ (x - 1) |
VEX.LZ.0F38 F3 /1 | BLSR | إعادة ضبط أدنى بتة مُعينة | x & (x - 1) |
F3 0F BC /r | TZCNT | احسب عدد البتات الصفرية اللاحقة | 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 /r | BZHI | أصفار البتات العالية بدءًا من موضع البت المحدد [src & (1 << inx)-1]؛ |
VEX.LZ.F2.0F38 F6 /r | MULX | يمكن إجراء عمليات الضرب غير الموقعة دون التأثير على الرايات، وكذلك على سجلات الوجهة العشوائية. |
VEX.LZ.F2.0F38 F5 /r | PDEP | إيداع البتات المتوازية |
VEX.LZ.F3.0F38 F5 /r | PEXT | استخراج الأجزاء المتوازية |
VEX.LZ.F2.0F3A F0 /r ib | RORX | قم بتدويرها منطقيًا إلى اليمين دون التأثير على العلامات. |
VEX.LZ.F3.0F38 F7 /r | SARX | إزاحة العمليات الحسابية إلى اليمين دون التأثير على العلامات |
VEX.LZ.F2.0F38 F7 /r | SHRX | إزاحة منطقية لليمين دون التأثير على العلامات |
VEX.LZ.66.0F38 F7 /r | SHLX | إزاحة منطقية لليسار دون التأثير على العلامات |
إيداع واستخراج البتات بالتوازي
PDEPتُعدّ تعليمات PEXTالضغط والتوسيع على مستوى البتات تعليماتٍ جديدةً مُعمّمةً للضغط والتوسيع على مستوى البتات. تأخذ هذه التعليمات مُدخلين: مصدر، ومُحدِّد. المُحدِّد عبارة عن خريطة بتات تُحدِّد البتات المراد ضغطها أو فك ضغطها. تقوم تعليمات الضغط والتوسيع PEXTبنسخ البتات المُحدَّدة من المصدر إلى بتات مُتجاورة منخفضة الترتيب في الوجهة، بينما تُمسح بتات الوجهة ذات الترتيب الأعلى. أما PDEPتعليمات التوسيع، فتقوم بالعكس بالنسبة للبتات المُحدَّدة: حيث تُنسخ بتات مُتجاورة منخفضة الترتيب إلى بتات مُحدَّدة في الوجهة، بينما تُمسح بتات الوجهة الأخرى. يُمكن استخدام هذه التعليمات لاستخراج أي حقل بتات من المُدخل، بل وحتى لإجراء عمليات خلط على مستوى البتات كانت مُكلفةً سابقًا. على الرغم من أن وظيفة هذه التعليمات تُشبه تعليمات التجميع والتشتيتPDEP على مستوى البتات في SIMD، إلا PEXTأن تعليمات التوسيع (مثل باقي مجموعات تعليمات BMI) تعمل على سجلات الأغراض العامة. [ 12 ]
تتوفر التعليمات بنسختين: 32 بت و64 بت. مثال على استخدام مصدر ومحدد عشوائيين في وضع 32 بت:
| تعليمات | قناع التحديد | مصدر | وجهة |
|---|---|---|---|
PEXT | 0xff00fff0 | 0x12345678 | 0x00012567 |
PDEP | 0xff00fff0 | 0x00012567 | 0x12005670 |
تُنفّذ معالجات 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 id | BEXTR | استخراج حقل البت (مع القيمة الفورية) | (src >> start) & ((1 << len) - 1) |
XOP.LZ.09 01 /1 | BLCFILL | املأ من الجزء السفلي الشفاف | x & (x + 1) |
XOP.LZ.09 02 /6 | BLCI | عزل الجزء السفلي الواضح | x | ~(x + 1) |
XOP.LZ.09 01 /5 | BLCIC | اعزل البتة الواضحة الأدنى وأكملها | ~x & (x + 1) |
XOP.LZ.09 02 /1 | BLCMSK | قناع من أدنى بت شفاف | x ^ (x + 1) |
XOP.LZ.09 01 /3 | BLCS | اضبط أقل بت شفاف | x | (x + 1) |
XOP.LZ.09 01 /2 | BLSFILL | املأ من أدنى مستوى ضبط | x | (x - 1) |
XOP.LZ.09 01 /6 | BLSIC | اعزل أقل بت مضبوط وقم بتكملة ذلك | ~x | (x - 1) |
XOP.LZ.09 01 /7 | T1MSKC | قناع معكوس من الأقنعة اللاحقة | ~x | (x + 1) |
XOP.LZ.09 01 /4 | TZMSK | إخفاء الأصفار اللاحقة | ~x & (x - 1) |
وحدات المعالجة المركزية المدعومة
- إنتل
- معالجات Intel Nehalem والمعالجات الأحدث (مثل Sandy Bridge و Ivy Bridge ) (تدعم تقنية POPCNT)
- معالجات إنتل سيلفرمونت (تدعم تقنية POPCNT)
- معالجات Intel Haswell وما هو أحدث منها (مثل Skylake و Broadwell ) (يدعم ABM و BMI1 و BMI2) [ 7 ]
- AMD
- المعالجات القائمة على K10 (تدعم ABM)
- معالجات "القط" منخفضة الطاقة
- المعالجات القائمة على Bobcat (مدعومة بـ ABM) [ 18 ]
- المعالجات القائمة على Jaguar وما بعدها (يدعم ABM وBMI1) [ 5 ]
- المعالجات القائمة على Puma وما بعدها (يدعم ABM وBMI1) [ 5 ]
- معالجات "المعدات الثقيلة"
- معالجات تعتمد على معمارية بولدوزر (تدعم ABM)
- المعالجات القائمة على Piledriver (ABM وBMI1 وTBM مدعومة) [ 1 ]
- المعالجات القائمة على تقنية Steamroller (تدعم ABM وBMI1 وTBM)
- المعالجات القائمة على الحفارات وما بعدها (ABM، BMI1، BMI2 وTBM مدعومة؛ PEXT وPDEP مشفرة ميكروية) [ 11 ]
- المعالجات القائمة على Zen و Zen+ و Zen 2 [ 19 ] (يدعم ABM و BMI1 و BMI2؛ PEXT و PDEP المبرمجة بدقة)
- معالجات Zen 3 والإصدارات الأحدث (يدعم ABM وBMI1 وBMI2؛ تنفيذ كامل للأجهزة)
تجدر الإشارة إلى أن دعم امتدادات التعليمات يعني قدرة المعالج على تنفيذ التعليمات المدعومة لأغراض توافق البرامج. مع ذلك، قد لا يكون أداء المعالج جيدًا عند القيام بذلك. على سبيل المثال، تُنفذ معالجات Excavator حتى Zen 2 تعليمات PEXT وPDEP باستخدام التعليمات البرمجية الدقيقة، مما يؤدي إلى تنفيذ هذه التعليمات ببطء ملحوظ مقارنةً بتنفيذها باستخدام تعليمات أخرى. [ 20 ] (في الواقع، تُعد طريقة برمجية تُسمى "zp7" أسرع على هذه الأجهزة). [ 21 ] ولتحقيق الأداء الأمثل، يُنصح مطورو المُترجمات باختيار استخدام تعليمات مُحددة في الامتدادات بناءً على خصائص الأداء الخاصة بالمعمارية، بدلاً من الاعتماد على توفر الامتدادات.
انظر أيضاً
- امتدادات المتجهات المتقدمة (AVX)
- مجموعة تعليمات AES
- مجموعة تعليمات CLMUL
- إف 16 سي
- مجموعة تعليمات FMA
- إنتل إيه دي إكس
- مجموعة تعليمات XOP
- رموز عمليات Intel BCD (تُستخدم أيضًا لتقنيات معالجة البتات المتقدمة)
- مجموعة تعليمات معالجة البتات – نوع من تعليمات الحاسوب. صفحات تعرض أوصافًا مختصرة لأهداف إعادة التوجيه.
مراجع
- 1 2 "تعليمات جديدة للجرافة وآلة دق الركائز" (ملف PDF) . تم الاطلاع عليه بتاريخ 2014-01-03 .
- 1 2 "دليل مبرمج معمارية AMD64، المجلد 3: تعليمات الأغراض العامة وتعليمات النظام" (ملف PDF) . تم الاطلاع عليه بتاريخ 20 يوليو 2022 .
- 1 2 3 "مرجع برمجة ملحقات المتجهات المتقدمة من إنتل" (ملف PDF) . intel.com . إنتل . يونيو 2011. تم الاطلاع عليه بتاريخ 3 يناير 2014 .
- 1 2 3 4 "دليل مبرمج معمارية AMD64، المجلد 3: تعليمات الأغراض العامة وتعليمات النظام" (ملف PDF) . المراجعة 3.32. AMD . مارس 2021. مؤرشف (ملف PDF) من الأصل بتاريخ 2021-04-08 . تم الاطلاع عليه بتاريخ 2021-04-08 .
- 1 2 3 4 "ورقة بيانات سلسلة AMD A من العائلة 16h" (ملف PDF) . amd.com . AMD . أكتوبر 2013. تم الاطلاع عليه بتاريخ 2 يناير 2014 .
- 1 2 هولينغسورث، برنت. "تعليمات جديدة لـ "الجرافة" و"المدق"" (ملف PDF) . شركة أدفانسد مايكرو ديفايسز. مؤرشف من الأصل (ملف PDF) بتاريخ 26 يوليو 2014. تم الاطلاع عليه بتاريخ 11 ديسمبر 2014 .
- 1 2 لوكتيوخين، ماكس. "كيفية اكتشاف دعم التعليمات الجديدة في عائلة معالجات Intel® Core™ من الجيل الرابع" . www.intel.com . Intel . تم الاطلاع عليه بتاريخ 11 ديسمبر 2014 .
- ↑ "bmiintrin.h من GCC 4.8" . مؤرشف من الأصل بتاريخ 23 فبراير 2017. تم الاطلاع عليه بتاريخ 17 مارس 2014 .
- 1 2 "sandpile.org -- x86 architecture -- bits" . تم الاسترجاع في 17-03-2014 .
- ↑ "Abseil - C++ Common Libraries" . GitHub . 4 نوفمبر 2021.
- ١ ٢ "معالج AMD Excavator Core قد يُحقق تحسينات هائلة في الأداء" . مختبرات X-bit. ١٨ أكتوبر ٢٠١٣. مؤرشف من الأصل في ٢٣ أكتوبر ٢٠١٣. تم الاطلاع عليه في ٢٤ نوفمبر ٢٠١٣ .
- ↑ يديديا هيلويتز؛ روبي ب. لي (أغسطس 2009). "أساس جديد للمُبدِّلات في المعالجات العامة لمعالجة البتات الحالية والمتقدمة" (ملف PDF) . palms.princeton.edu . مجلة IEEE للمعاملات الحاسوبية. الصفحات 1035-1048 . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 17 يونيو 2013. تم الاطلاع عليه بتاريخ 10 فبراير 2014 .
- ↑ "Zen 3 - Microarchitectures - AMD - WikiChip" . مؤرشف من الأصل بتاريخ 12 نوفمبر 2020. تم الاطلاع عليه بتاريخ 15 نوفمبر 2020 .
- ↑ "جداول التعليمات" (ملف PDF) . تم الاطلاع عليه بتاريخ 2023-09-09 .
- ↑ "دليل تحسين البرامج لمعالجات AMD من عائلة 19h" . مركز مطوري AMD . تم الاطلاع عليه بتاريخ 22-07-2022 .
- ↑ "إنقاذ معالجات Ryzen الخاصة: وظائف استبدال PEXT/PDEP 32/64 بت لمعالجات AMD (BR/Zen/Zen+/Zen2) استنادًا إلى zp7 الخاص بـ @zwegner" . تويتر . تم الاطلاع عليه بتاريخ 21 فبراير 2022 .
- ↑ "tbmintrin.h من GCC 4.8" . مؤرشف من الأصل بتاريخ 23 فبراير 2017. تم الاطلاع عليه بتاريخ 17 مارس 2014 .
- ↑ "دليل مطوري BIOS ونواة النظام لعائلة AMD 14h" (ملف PDF) . تم الاطلاع عليه بتاريخ 3 يناير 2014 .
- ↑ "مراجعة معمقة لمعالجات AMD Zen 3 Ryzen: اختبار معالجات 5950X و5900X و5800X و5600X" . مؤرشف من الأصل بتاريخ 5 نوفمبر 2020. تم الاطلاع عليه بتاريخ 26 ديسمبر 2021 .
- ↑ "تقرير تقدم دولفين: ديسمبر 2019 ويناير 2020" . محاكي دولفين . 7 فبراير 2020. تاريخ الاسترجاع: 7 فبراير 2020 .
- ^ زاك فيجنر (4 نوفمبر 2020). "زويجنر/zp7" . جيثب .
للمزيد من القراءة
- وارن الابن، هنري س. (2013). متعة المخترق ( الطبعة الثانية). أديسون ويسلي - بيرسون للتعليم، المحدودة. ISBN 978-0-321-84268-8.
روابط خارجية
- تعليمات X86
- تقنيات AMD
- امتدادات مجموعة التعليمات
