Cache Line
ক্যাশ লাইন
Cache যে ন্যূনতম, স্থির আকারের ব্লক নিয়ে কাজ করে — সাধারণত 64 বাইট। এক বাইট চাইলেও পুরো line আনা হয়, spatial locality exploit করতে।
[[cache]] কখনো এক বাইট বা এক word আনে না — সবসময় একটা পূর্ণ line, ব্যবহার
হোক বা না হোক বাকি বাইট। প্রায় সব আধুনিক x86-64/ARM64 CPU-তে 64 বাইট
(sysconf বা /sys/.../coherency_line_size দিয়ে যাচাইযোগ্য)।
কেন পুরো line, এক বাইট না: memory row/line access করার একটা “fixed cost” আছে (address decode, sense amplify — [[dram]]/[[sram]] লেসনের row/column addressing দ্রষ্টব্য); একসাথে বেশি ডেটা আনা প্রায় বিনামূল্যে, আর [[locality-of-reference]]-এর spatial অংশ নিশ্চিত করে বাড়তি বাইট শীঘ্রই কাজে লাগবে।
Address বিভাজনে ভূমিকা: line আকারই offset বিট সংখ্যা নির্ধারণ করে —
64-বাইট line মানে log2(64) = 6 বিট offset, address-এর সবচেয়ে নিচের
বিটগুলো (কারণ পাশাপাশি ঠিকানা শুধু নিচের বিটে আলাদা হয়)।
Trade-off: বড় line spatial locality বেশি কাজে লাগায় কিন্তু miss-এ
বেশি bandwidth খরচ করে আর multi-core-এ false sharing-এর ঝুঁকি বাড়ায়
(দুই core ভিন্ন variable লিখলেও, একই line-এ থাকলে line বারবার
ping-pong করে) — এটা advanced-architecture module-এ cache coherence
প্রসঙ্গে ফিরে আসে।