এটি সম্ভবত আপনার এল 2 ক্যাশে দ্বন্দ্বগুলির সাথে রয়েছে।
Matice1 এ ক্যাশে মিস করা সমস্যা নয় কারণ তারা ক্রমানুসারে অ্যাক্সেস করা হয়েছে। তবে ম্যাটিস 2-এর ক্ষেত্রে যদি কোনও সম্পূর্ণ কলাম এল 2-তে ফিট করে (যেমন আপনি যখন matice2 [0, 0], matice2 [1, 0], matice2 [2, 0] ... ইত্যাদি অ্যাক্সেস করবেন তখন কিছুই বাদ নেই) এর সাথে কোনও সমস্যা নেই ক্যাশে matice2 এর সাথে মিস হয়।
এখন ক্যাশেগুলি কীভাবে কাজ করে তার আরও গভীরতর বিষয়ে যদি আপনার ভেরিয়েবলের বাইট অ্যাড্রেস এক্স হয় তবে এর জন্য ক্যাশে লাইনটি হবে (এক্স >> 6) এবং (এল - 1)। যেখানে এল আপনার ক্যাশে মোট ক্যাশে রেখার সংখ্যা। এল সর্বদা ২. পাওয়ার হয়। ছয়টি 2 from 6 == 64 বাইটগুলি ক্যাশে লাইনের মান আকার size
এখন এই মানে কি? ঠিক আছে এর অর্থ হ'ল যদি আমার কাছে X এবং ঠিকানা Y থাকে এবং (X >> 6) - (Y >> 6) এল দ্বারা বিভাজ্য হয় (অর্থাত 2 এর বৃহত শক্তি) তবে সেগুলি একই ক্যাশেলিনে সংরক্ষণ করা হবে।
এখন আপনার সমস্যায় ফিরে যেতে 2048 এবং 2049 এর মধ্যে পার্থক্য কী,
যখন 2048 আপনার আকার হয়:
যদি আপনি & matice2 [x, k] এবং & matice2 [y, k] পার্থক্য নেন (& matice2 [x, k] >> 6) - (& matice2 [y, k] >> 6) 2048 * 4 (আকার) দ্বারা বিভাজ্য হবে of float)। সুতরাং একটি বড় শক্তি 2।
সুতরাং আপনার এল 2 আকারের উপর নির্ভর করে আপনার অনেকগুলি ক্যাশে লাইন বিবাদ হবে এবং কেবলমাত্র আপনার এল 2 এর ছোট্ট অংশটি একটি কলাম সংরক্ষণ করতে ব্যবহার করবে, সুতরাং আপনি প্রকৃতপক্ষে আপনার ক্যাশে পুরো কলামটি সংরক্ষণ করতে সক্ষম হবেন না, সুতরাং আপনি খারাপ পারফরম্যান্স পাবেন ।
যখন আকার 2049 হয়, তারপরে পার্থক্যটি 2049 * 4 হয় যা 2 এর শক্তি নয় সুতরাং আপনার কম বিরোধ হবে এবং আপনার কলামটি নিরাপদে আপনার ক্যাশে ফিট করবে।
এখন এই তত্ত্বটি পরীক্ষা করার জন্য কয়েকটি জিনিস আপনি করতে পারেন:
আপনার অ্যারে ম্যাটিস 2 অ্যারেটিকে এই ম্যাটিস 2 [রেজমর, 4096] এর মতো বরাদ্দ করুন এবং রেজমোর = 1024, 1025 বা যে কোনও আকারের সাথে চালান এবং আপনার আগের তুলনায় আপনার খুব খারাপ পারফরম্যান্স দেখা উচিত see এর কারণ আপনি সমস্ত কলামকে একে অপরের সাথে বিরোধে জোর করে সংযুক্ত করেছেন।
তারপরে ম্যাটিস 2 [রেজার, 4097] ব্যবহার করে এটি যে কোনও আকারের সাথে চালান এবং আপনার আরও ভাল পারফরম্যান্স দেখতে হবে।