0Pricing
C++ Academy · درس

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

صمّم هياكل من المصفوفات، وحزّم البيانات لتحسين محلية التخزين المؤقت.

تخطيطات بيانات ملائمة لذاكرة التخزين المؤقت درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

هرمية الذاكرة

تحتوي وحدات المعالجة المركزية على مستويات متعددة من ذاكرة التخزين المؤقت (L1 وL2 وL3)، وهي أسرع بكثير من الذاكرة الرئيسية. وتحافظ الشفرة الملائمة لذاكرة التخزين المؤقت على البيانات المهمة قريبة من وحدة المعالجة المركزية.

أسطر ذاكرة التخزين المؤقت

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

محلية الوصول

خاصيتان مهمتان:

  • المحلية المكانية — استخدام الذاكرة القريبة بعد وقت قصير
  • المحلية الزمنية — إعادة استخدام الذاكرة نفسها بعد وقت قصير

متجاورة أم مترابطة

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

// Cache friendly
std::vector<int> v(1000);
for (auto& x : v) ++x;

// Cache UNfriendly
std::list<int> l(1000);
for (auto& x : l) ++x;

AoS مقابل SoA

تخطيطان لمصفوفات السجلات:

  • AoS (Array of Structs) — طبيعي، لكن تكرار حقل واحد يلمس جميع الحقول
  • SoA (Struct of Arrays) — أفضل عندما تستخدم معظم الحلقات بعض الحقول فقط
// AoS
struct Particle { float x, y, z, vx, vy, vz; };
std::vector<Particle> particles;

// SoA
struct Particles {
    std::vector<float> x, y, z, vx, vy, vz;
};

حزم البنى

رتّبوا الأعضاء من الأكبر إلى الأصغر لتقليل الحشو. وتعرض أدوات مثل pahole التخطيط الفعلي.

struct Bad  { char c; double d; char c2; };  // padded
struct Good { double d; char c; char c2; };  // smaller

المشاركة الزائفة

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

struct alignas(64) Counter {
    std::atomic<int> value;
};

فصل البيانات الساخنة والباردة

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

التخصيص المسبق

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

الوصول التسلسلي أسرع

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

تجنب الإحالة غير المباشرة

تجبر المؤشرات وحدة المعالجة المركزية على تتبع التبعيات. ويكون std::vector<T*> أبطأ من std::vector<T> عند التكرار. استخدموا الإحالة غير المباشرة عند الضرورة فقط.

حلّل الأداء قبل التحسين

إن وصف الشفرة بأنها «ملائمة لذاكرة التخزين المؤقت» هو إرشاد وليس قاعدة. قيسوا الأداء باستخدام أدوات مثل perf أو VTune لمعرفة مواضع تأثير إخفاقات ذاكرة التخزين المؤقت، ثم حسّنوا الشفرة.

تحقق سريع

لماذا يكون تكرار std::vector عادةً أسرع بكثير من تكرار std::list بالحجم نفسه؟

مراجعة

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

الأسئلة الشائعة

هل درس «تخطيطات بيانات ملائمة لذاكرة التخزين المؤقت» مجاني؟

نعم — نص درس «تخطيطات بيانات ملائمة لذاكرة التخزين المؤقت» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «تخطيطات بيانات ملائمة لذاكرة التخزين المؤقت»؟

صمّم هياكل من المصفوفات، وحزّم البيانات لتحسين محلية التخزين المؤقت. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تخطيطات بيانات ملائمة لذاكرة التخزين المؤقت»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تخطيطات بيانات ملائمة لذاكرة التخزين المؤقت
  2. التنبؤ بالتفرّعات والحلقات الساخنة
  3. التنميط باستخدام perf وvtune وSanitizers
  4. القياس الدقيق للأداء باستخدام Google Benchmark
← العودة إلى C++ Academy