الاستفادة من استخدام مجموعات تعليمات SIMD متعددة في وقت واحد

StackOverflow https://stackoverflow.com/questions/2840342

  •  27-09-2019
  •  | 
  •  

سؤال

أنا أكتب تطبيقًا متوازيًا للغاية تم تعدده. لقد حصلت بالفعل على فئة مؤشر ترابط SSE مكتوبة. إذا كنت سأكتب فئة مؤشر ترابط MMX المتسارعة ، فعليك تشغيلها في نفس الوقت (مؤشر ترابط SSE واحد وخيط MMX واحد لكل نواة) هل سيتحسن الأداء بشكل ملحوظ؟

أعتقد أن هذا الإعداد سيساعد في إخفاء زمن انتقال الذاكرة ، لكنني أرغب في التأكد قبل أن أبدأ في سكب الوقت فيه.

هل كانت مفيدة؟

المحلول

تشترك مجموعات تعليمات SSE و MMX في نفس مجموعة وحدات تنفيذ معالجة المتجهات في وحدة المعالجة المركزية. لذلك ، سيكون لتشغيل مؤشر ترابط SSE وخيط MMX نفس الموارد المتاحة لكل مؤشر ترابط كما لو كان تشغيل مؤشر ترابط SSE (أو خيوط MMX). الفرق الوحيد هو في التعليمات الموجودة في SSE ولكن ليس MMX (لأن SSE هو امتداد MMX). ولكن في هذه الحالة ، من المحتمل أن تكون MMX أبطأ لأنها لا تحتوي على تلك الإرشادات المتقدمة المتاحة لها.

لذا فإن الجواب هو: لا ، لن ترى تحسينًا للأداء مقارنةً بتشغيل خيوط SSE.

نصائح أخرى

يستخدم SSE و MMX نفس السجلات ، لذلك لا يهم أي من الاثنين اللذين تستخدمهما (بصرف النظر عن مص MMX و SSE مفيدة ، بالطبع)

السؤال الأفضل هو كيف يتم تنفيذ SSE على وحدة المعالجة المركزية المستهدفة. هل لديها وحدة SSE لكل قلب؟ (ربما) إذا كان الأمر كذلك ، فيمكنك أيضًا تشغيل تعليمات SSE على كل موضوع.

إذا كانت تحتوي على وحدة SSE مشتركة بين النوى ، فستقاتل مؤشرات الترابط المختلفة عليها ، لذلك لن يتم الحصول عليها كثيرًا من خلال تنفيذ تعليمات SSE في مؤشرات ترابط متعددة. (لا أعرف ما إذا كانت أي وحدة المعالجة المركزية تشترك بالفعل في وحدة SSE بين المواضيع ، لذا خذ هذا كحالة افتراضية)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top