পাঠ ৪১ · ৫৭-এর মধ্যে · মডিউল ৮
Home / Courses / Computer Architecture & Digital Logic / ক্যাশ পারফরম্যান্স ও AMAT

ক্যাশ পারফরম্যান্স — Hit/Miss রেট ও AMAT

Cache performance — hit/miss rate & AMAT
৯ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • Hit rate ও miss rate-এর নির্ভুল সংজ্ঞা এবং কীভাবে গণনা করা হয়
  • AMAT ফর্মুলা — নির্ভুলভাবে বলা, এবং এর পেছনের স্বজ্ঞা (intuition)
  • একটি worked example কোড দিয়ে গণনা করে যাচাই করা (হাতে-লেখা নয়, প্রকৃত রান করা কোড থেকে)
  • বিভিন্ন miss rate-এ AMAT কীভাবে বদলায় তা তুলনা করে miss rate-এর প্রভাবের মাত্রা বোঝা
  • L42-এ মাল্টি-লেভেল ক্যাশে এই ফর্মুলা কীভাবে রিকার্সিভভাবে বিস্তৃত হবে তার সংক্ষিপ্ত পূর্বাভাস

১ · Hit Rate ও Miss Rate — মৌলিক সংজ্ঞা

L38-L40-এর প্রতিটি কোড সেলেই HIT ও MISS গোনা হয়েছে — এবার সেই গণনাগুলোকে একটা মানসম্মত পরিমাপে পরিণত করা যাক। Hit RateHit Rateমোট অ্যাক্সেসের মধ্যে কত ভাগ হিট হয়েছে তার অনুপাত হলো মোট অ্যাক্সেসের মধ্যে কত ভাগ হিট হয়েছে তার অনুপাত (hits ÷ total accesses), আর Miss RateMiss Rateমোট অ্যাক্সেসের মধ্যে কত ভাগ মিস হয়েছে -- 1 বিয়োগ hit rate হলো তার পরিপূরক (1 − hit rate)। এই দুটো সংখ্যাই একটা ক্যাশ ডিজাইন বাস্তবে কতটা কার্যকর তার সবচেয়ে সরাসরি পরিমাপ — ঠিক যেভাবে OS কোর্সের পেজ রিপ্লেসমেন্ট পাঠগুলোতেও হিট/মিস গোনার একই স্টাইল ব্যবহৃত হয়েছে।

২ · AMAT — গড় মেমরি অ্যাক্সেস সময়

শুধু hit rate/miss rate জানলেই পুরো ছবি পাওয়া যায় না — কারণ একটা miss-এর "খরচ" hit-এর খরচের চেয়ে ঢের বেশি। এই দুটোকে একটা একক, তুলনাযোগ্য সংখ্যায় মেলানোর মানসম্মত ফর্মুলাই হলো AMATAverage Memory Access Timeপ্রতিটি অ্যাক্সেসে গড়ে কত সময় লাগবে তার প্রত্যাশিত মান -- hit time ও miss penalty মিলিয়ে (Average Memory Access Time) —

$$AMAT = HitTime + MissRate \times MissPenalty$$

স্বজ্ঞাটা সহজ: প্রতিটি অ্যাক্সেসই কমপক্ষে HitTime সময় নেয় (ক্যাশ চেক করতেই এটুকু সময় লাগে, হিট হোক বা মিস)। তার উপর, অ্যাক্সেসের একটা ভগ্নাংশ (MissRate) অতিরিক্তভাবে MissPenalty সময়ও দেয় — কারণ মিস হলে মেইন মেমরি পর্যন্ত যেতে হয়। তাই AMAT আসলে একটা প্রত্যাশিত (expected) মান — hit-এর নিশ্চিত খরচ, প্লাস miss-এর সম্ভাব্যতা-ভারিত অতিরিক্ত খরচ।

৩ · Worked Example — একটি ছোট্ট miss rate-এর বড় প্রভাব

ধরা যাক একটা ক্যাশের HitTime = 1 সাইকেল, MissPenalty = 100 সাইকেল, আর পর্যবেক্ষিত MissRate = 0.05 (৫%)। ফর্মুলা অনুযায়ী —

$AMAT = 1 + 0.05 \times 100 = 1 + 5 = 6.0 \text{ সাইকেল}$

লক্ষ্য করুন — মাত্র ৫% অ্যাক্সেস মিস হওয়া সত্ত্বেও, গড় সময় hit time-এর (১ সাইকেল) তুলনায় ৬ গুণ বেড়ে গেছে! কারণ miss penalty (১০০ সাইকেল) hit time-এর তুলনায় এত বড় যে অল্প কিছু miss-ও গড় সময়ে বিশাল প্রভাব ফেলে — নিচের কোড সেলে এই গণনাটা প্রকৃতভাবে চালিয়ে যাচাই করা হয়েছে, এবং miss rate বদলে গেলে AMAT কতটা সংবেদনশীল তাও দেখানো হয়েছে।

Python
def compute_amat(hit_time, miss_rate, miss_penalty):
    """AMAT = HitTime + MissRate * MissPenalty"""
    return hit_time + miss_rate * miss_penalty

# মূল worked example: HitTime=1, MissRate=0.05 (5%), MissPenalty=100
hit_time = 1
miss_rate = 0.05
miss_penalty = 100

amat = compute_amat(hit_time, miss_rate, miss_penalty)
print(f"AMAT = {hit_time} + {miss_rate} * {miss_penalty} = {amat}")
assert amat == 6.0, "worked example মিলছে না!"
print("যাচাই সফল -- AMAT ঠিক 6.0 সাইকেল।")

print()
print("HitTime ও MissPenalty স্থির রেখে বিভিন্ন MissRate-এ AMAT কেমন বদলায়:")
print()
print("MissRate | AMAT (সাইকেল)")
print("-" * 26)
for mr in (0.01, 0.05, 0.10, 0.20):
    a = compute_amat(hit_time, mr, miss_penalty)
    print(f"{mr:>8.0%} | {a:>6.2f}")

print()
print("লক্ষ্য করুন: MissRate মাত্র 1% থেকে 20%-এ (২০ গুণ) বাড়লে, AMAT প্রায়")
low = compute_amat(hit_time, 0.01, miss_penalty)
high = compute_amat(hit_time, 0.20, miss_penalty)
print(f"{low} থেকে {high} সাইকেলে গিয়ে পৌঁছায় -- ছোট্ট একটা miss rate-এর প্রভাব কতটা বড়, তা স্পষ্ট।")

    
মাত্র ১% থেকে ২০% মিস রেটে (২০ গুণ বৃদ্ধি) গিয়ে AMAT বেড়েছে মাত্র সাড়ে দশ গুণ (২.০ থেকে ২১.০) — অর্থাৎ সম্পর্কটা রৈখিক (linear), miss rate যতই থাকুক miss penalty-র প্রভাবই প্রাধান্য পায়। এই কারণেই বাস্তব CPU ডিজাইনাররা miss rate সামান্য কমানোর জন্যও (L39-L40-এর associativity/replacement improvements) প্রচুর হার্ডওয়্যার বিনিয়োগ করতে রাজি হন — কারণ প্রতিদান অনুপাতে অনেক বড়।
সংক্ষিপ্ত পূর্বাভাস · Multi-Level AMAT

এখানে MissPenalty-কে একটা স্থির সংখ্যা ধরা হয়েছে — কিন্তু বাস্তবে আধুনিক CPU-তে একাধিক ক্যাশ স্তর থাকে (L1, L2, কখনো L3)। L1-এর "miss penalty" আসলে হলো L2-এর নিজস্ব AMAT-এর সমান — একটা রিকার্সিভ সম্পর্ক। এই ধারণাটাই পরের পাঠে (L42) পুরোপুরি বিস্তৃত করে দেখানো হবে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ AMAT ফর্মুলায় শুধু miss rate-কে সরাসরি "খরচ" হিসেবে না ধরে HitTime-এর সাথে যোগ করে miss penalty-কে গুণ করা হয় কেন?

কারণ AMAT আসলে একটা প্রত্যাশিত (expected) মান হিসাব — প্রতিটি অ্যাক্সেসই নিশ্চিতভাবে HitTime "খরচ" করে (ক্যাশ প্রথমে চেক তো করতেই হয়), তাই এটা সবসময় যোগ হয়। কিন্তু MissPenalty শুধু ততটুকু ভগ্নাংশ অ্যাক্সেসের ক্ষেত্রেই প্রযোজ্য যেগুলো আসলে মিস হয় — তাই সেটাকে MissRate দিয়ে গুণ করে "সম্ভাব্যতা-ভারিত" করা হয়, ঠিক যেভাবে সম্ভাব্যতা তত্ত্বে প্রত্যাশিত মান (expected value) গণনা করা হয়।

প্র ০২ একটা ক্যাশ ডিজাইনার যদি HitTime সামান্য বাড়িয়ে (যেমন ১ থেকে ২) MissRate অনেক কমাতে (যেমন ৫% থেকে ১%) পারেন, এটা কি লাভজনক হবে?

গণনা করে দেখা যাক: আগের AMAT = 1 + 0.05×100 = 6.0। নতুন AMAT = 2 + 0.01×100 = 2 + 1 = 3.0। হ্যাঁ, এই ক্ষেত্রে স্পষ্টভাবে লাভজনক — AMAT প্রায় অর্ধেকে নেমে এসেছে, যদিও HitTime দ্বিগুণ হয়েছে। এটাই দেখায় কেন বাস্তব ক্যাশ ডিজাইনে (L39-এর বেশি associativity, L40-এর ভালো রিপ্লেসমেন্ট পলিসি) সামান্য HitTime বাড়িয়ে হলেও MissRate কমানোর প্রচেষ্টা প্রায়ই সামগ্রিকভাবে লাভজনক হয় — নির্দিষ্ট সংখ্যাগুলো গণনা করেই সিদ্ধান্ত নেওয়া উচিত, শুধু অনুমান করে নয়।

প্র ০৩ উপরের কোড সেলে MissRate=0 (অর্থাৎ কোনো মিসই হয় না) হলে AMAT-এর মান কী হবে, এবং এটা কী বোঝায়?

MissRate=0 হলে AMAT = HitTime + 0×MissPenalty = HitTime = 1 সাইকেল — অর্থাৎ MissPenalty পুরোপুরি অপ্রাসঙ্গিক হয়ে যায়, কারণ কখনোই মিস ঘটছে না। এটাই একটা আদর্শ (কিন্তু বাস্তবে অসম্ভব) পরিস্থিতি বোঝায় — যেখানে ক্যাশ সবসময় ঠিক সঠিক ডেটা ধরে রাখে। বাস্তবে MissRate কখনো ঠিক শূন্য হয় না (ক্যাশ সসীম আকারের), তাই AMAT সবসময় HitTime-এর চেয়ে সামান্য হলেও বেশি থাকে।

অনুশীলন

  1. চিন্তা করুন: একটি ক্যাশের HitTime=2, MissPenalty=50, MissRate=0.10। হাতে-কলমে AMAT গণনা করুন।

    AMAT = HitTime + MissRate × MissPenalty = 2 + 0.10 × 50 = 2 + 5 = 7 সাইকেল। উপরের কোড সেলের compute_amat(2, 0.10, 50) কল করেও একই ফলাফল যাচাই করা যাবে।

  2. পরীক্ষা করুন: কোড সেলের লুপে যদি miss_penalty-কে ১০০ থেকে কমিয়ে ১০ করা হতো (কোড পরিবর্তন করবেন না, শুধু ভাবুন), তাহলে MissRate 1% থেকে 20%-এ যাওয়ার প্রভাব AMAT-এ আগের মতোই বড় থাকত, নাকি কমে যেত?

    অনেকটাই কমে যেত। miss_penalty=10 হলে: MissRate=1% এ AMAT = 1 + 0.01×10 = 1.1, আর MissRate=20% এ AMAT = 1 + 0.20×10 = 3.0 — পরিবর্তনটা এখন মাত্র ~২.৭ গুণ, আগের (miss_penalty=100-এ ~১০.৫ গুণ) তুলনায় অনেক কম নাটকীয়। এটাই নিশ্চিত করে যে AMAT-এর miss rate-সংবেদনশীলতা সরাসরি নির্ভর করে miss penalty কত বড় তার উপর — যত বড় penalty, তত বেশি সংবেদনশীল।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
ক্যাশ রিপ্লেসমেন্ট ও রাইট পলিসি