تعليمات التحكم في ذاكرة التخزين المؤقت

في مجال الحوسبة ، تُعدّ تعليمات التحكم في الذاكرة المؤقتة بمثابة تلميح مُضمّن في سلسلة تعليمات المعالج، ويهدف إلى تحسين أداء الذاكرة المؤقتة للأجهزة ، وذلك بالاستفادة من المعرفة المسبقة بنمط الوصول إلى الذاكرة الذي يُوفّره المبرمج أو المُصرّف . [ 1 ] قد تُقلّل هذه التعليمات من ازدحام الذاكرة المؤقتة ، وتُخفّض متطلبات عرض النطاق الترددي، وتتجاوز زمن الاستجابة، من خلال توفير تحكّم أفضل في مجموعة العمل . لا تُؤثّر مُعظم تعليمات التحكم في الذاكرة المؤقتة على دلالات البرنامج، على الرغم من أن بعضها قد يُؤثّر.

أمثلة

يتم دعم العديد من هذه التعليمات، مع متغيراتها، بواسطة العديد من بنى مجموعات تعليمات المعالج ، مثل ARM و MIPS و PowerPC و x86 .

جلب البيانات المسبق

يُعرف هذا الإجراء أيضًا باسم " لمس كتلة ذاكرة التخزين المؤقت للبيانات" ، ويتمثل تأثيره في طلب تحميل سطر ذاكرة التخزين المؤقت المرتبط بعنوان معين. ويتم ذلك بواسطة PREFETCHتعليمة في مجموعة تعليمات x86 . تتجاوز بعض المتغيرات مستويات أعلى من التسلسل الهرمي لذاكرة التخزين المؤقت ، وهو أمر مفيد في سياق "التدفق" للبيانات التي يتم اجتيازها مرة واحدة، بدلاً من الاحتفاظ بها في مجموعة العمل. يجب أن يحدث الجلب المسبق قبل وقت كافٍ لتقليل زمن الوصول إلى الذاكرة، كما هو الحال في حلقة تجتاز الذاكرة بشكل خطي. يمكن استخدام الدالة المضمنة في مجموعة مترجمات GNU لاستدعاء هذا الإجراء في لغتي البرمجة C أو C++ .__builtin_prefetch

جلب التعليمات المسبق

نوع من أنواع الجلب المسبق لذاكرة التخزين المؤقت للتعليمات.

تخصيص صفر لكتلة ذاكرة التخزين المؤقت للبيانات

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

إبطال كتلة ذاكرة التخزين المؤقت للبيانات

تُستخدم هذه الخاصية لحذف أسطر التخزين المؤقت دون تحميل محتوياتها إلى الذاكرة الرئيسية. يجب توخي الحذر لاحتمالية الحصول على نتائج غير صحيحة. وعلى عكس خصائص التخزين المؤقت الأخرى، تُعدّل هذه الخاصية دلالات البرنامج بشكل ملحوظ. تُستخدم هذه الخاصية بالتزامن مع allocate zeroإدارة البيانات المؤقتة، مما يوفر عرض نطاق الذاكرة الرئيسية غير الضروري ويقلل من ازدحام التخزين المؤقت.

مسح كتلة ذاكرة التخزين المؤقت للبيانات

يطلب هذا التلميح إزالة سطر ذاكرة التخزين المؤقت فورًا، مما يفسح المجال لعمليات تخصيص مستقبلية. ويُستخدم عندما يكون معروفًا أن البيانات لم تعد جزءًا من مجموعة العمل .

تلميحات أخرى

تدعم بعض المعالجات نوعًا مختلفًا من تعليمات التحميل والتخزين التي تتضمن أيضًا تلميحات عن الذاكرة المؤقتة. ومن الأمثلة على ذلك مجموعة تعليمات PowerPCload last ، التي تشير إلى أن البيانات ستُستخدم مرة واحدة فقط، أي أنه يمكن دفع سطر الذاكرة المؤقتة المعني إلى بداية قائمة الإخلاء، مع الإبقاء عليه قيد الاستخدام إذا كانت هناك حاجة مباشرة إليه.

البدائل

جلب مسبق تلقائي

في الآونة الأخيرة، تراجعت شعبية تعليمات التحكم في الذاكرة المؤقتة، حيث تُخصص معالجات التطبيقات المتطورة من إنتل وآرم المزيد من الترانزستورات لتسريع التعليمات البرمجية المكتوبة بلغات تقليدية، مثل الجلب المسبق التلقائي، مع وجود أجهزة لاكتشاف أنماط الوصول الخطي أثناء التشغيل. ومع ذلك، قد تظل هذه التقنيات فعّالة للمعالجات الموجهة نحو الإنتاجية، والتي تختلف فيها المفاضلة بين الإنتاجية وزمن الاستجابة، وقد تُفضل تخصيص مساحة أكبر لوحدات التنفيذ.

ذاكرة مؤقتة

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

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

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

جلب المتجه

تستخدم معالجات المتجهات (مثل وحدات معالجة الرسومات الحديثة (GPUs) ومعالجات Xeon Phi ) التوازي الهائل لتحقيق إنتاجية عالية مع التغلب على زمن استجابة الذاكرة (مما يقلل الحاجة إلى الجلب المسبق). تُنفذ العديد من عمليات القراءة بالتوازي، وذلك لاستدعاءات لاحقة لنواة الحساب ؛ وقد تُعلق العمليات الحسابية مؤقتًا في انتظار بيانات مستقبلية، بينما تُخصص وحدات التنفيذ لمعالجة البيانات من الطلبات السابقة التي تم الحصول عليها بالفعل. يسهل على المبرمجين الاستفادة من هذا بالاقتران مع نماذج البرمجة المناسبة ( نوى الحساب )، ولكنه يصعب تطبيقه على البرمجة العامة.

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

مراجع

  1. "دليل Power PC، انظر 1.10.3 تعليمات التحكم في الذاكرة المؤقتة" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 13 أكتوبر 2016. تم الاطلاع عليه بتاريخ 11 يونيو 2016 .