আমি প্রায়শই ইসিএস গেম ইঞ্জিন ডকুমেন্টেশনগুলিতে পড়ি যে সিপু ক্যাশে বুদ্ধিমানের সাথে ব্যবহারের জন্য একটি ভাল আর্কিটেকচার।
তবে আমি বুঝতে পারি না যে আমরা সিপিইউ ক্যাশে থেকে কীভাবে উপকৃত হতে পারি।
যদি উপাদানগুলি একটি অ্যারেতে (বা একটি পুল) সংরক্ষণ করা হয়, মঞ্জুরিযুক্ত মেমোরিতে, তবে সিপিইউ ক্যাশে বাট ব্যবহার করার একটি ভাল উপায় কেবলমাত্র যদি আমরা উপাদানগুলি ধারাবাহিকভাবে পড়ি।
যখন আমরা সিস্টেমগুলি ব্যবহার করি, তখন তাদের সত্তা তালিকা দরকার যা সুনির্দিষ্ট ধরণের উপাদানযুক্ত উপাদানগুলির তালিকা।
তবে এই তালিকাগুলি অনুক্রমিকভাবে নয়, উপাদানগুলিকে এলোমেলো উপায়ে দেয়।
তাহলে ক্যাশে হিট সর্বাধিকীকরণের জন্য কীভাবে একটি ইসিএস ডিজাইন করবেন?
সম্পাদনা:
উদাহরণস্বরূপ, একটি ফিজিক সিস্টেমের সত্ত্বার জন্য সত্তার তালিকা দরকার যাতে রিগিডবডি এবং ট্রান্সফর্ম উপাদান রয়েছে (রিগিডবডি এর জন্য একটি পুল এবং ট্রান্সফর্ম উপাদানগুলির জন্য একটি পুল রয়েছে)।
সত্তা আপডেট করার জন্য এটির লুপটি এরকম হবে:
for (Entity eid in entitiesList) {
// Get rigid body component
RigidBody *rigidBody = entityManager.getComponentFromEntity<RigidBody>(eid);
// Get transform component
Transform *transform = entityManager.getComponentFromEntity<Transform>(eid);
// Do something with rigid body and transform component
}
সমস্যাটি হ'ল ইন্টিটি 1 এর igগিডবডি উপাদানটি তার পুলের সূচী 2 এবং তার পুলের সূচী 0 তে ইন্টিটি 1 এর ট্রান্সফর্ম উপাদান হতে পারে (কারণ কিছু সংস্থার কিছু উপাদান থাকতে পারে এবং অন্যটি নাও থাকতে পারে এবং সত্তা যুক্ত / মোছার কারণে) / উপাদানগুলি এলোমেলোভাবে)
সুতরাং উপাদানগুলি মেমোরিতে সামঞ্জস্যপূর্ণ হলেও এগুলি এলোমেলোভাবে পড়া হয় এবং তাই এতে আরও ক্যাশে মিস থাকবে, না?
লুপের পরবর্তী উপাদানগুলি উপস্থাপনের উপায় না থাকলে?