سؤال

تشتمل معالجات ARM الأحدث على تعليمات PLD وPLI.

أنا أكتب حلقات داخلية ضيقة (في C ++) والتي لها نمط وصول غير متسلسل للذاكرة، ولكن النمط الذي يفهمه الكود الخاص بي بشكل طبيعي.أتوقع تسريعًا كبيرًا إذا تمكنت من الجلب المسبق للموقع التالي أثناء معالجة موقع الذاكرة الحالي، وأتوقع أن يكون هذا سريعًا بما يكفي لتجربته ليكون يستحق التجربة!

أنا أستخدم مترجمات جديدة باهظة الثمن من ARM، ولا يبدو أنها تتضمن تعليمات PLD في أي مكان، ناهيك عن هذه الحلقة المحددة التي أهتم بها.

كيف يمكنني تضمين تعليمات الجلب المسبق الصريحة في كود C++ الخاص بي؟

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

المحلول

يجب أن يكون هناك بعض الميزات الخاصة بالمترجم.لا توجد طريقة قياسية للقيام بذلك لـ C/C++.تحقق من الدليل المرجعي للمترجم.للحصول على برنامج RealView Compiler، انظر هذا أو هذا.

نصائح أخرى

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

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

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

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