حافظه نهان (cache) از نوع شرکت پذیر مجموعه ای دو راهه (۲ way set associative) با کلا ۸ بلوک ۴ کلمه ای موجود است. بزرگی حلقه اصلی ۲۵۶M کلمه است. با فرض اینکه cache در ابتدا خالی است نرخ فقدان (miss rate) بعد از اتمام رشته مراجعات به آدرس های حافظه اصلی (از چپ به راست) چقدر می شه؟ (آدرسها به صورت Hex نشان داده شده اند).
[tex]12F, 23F, 12B, 23B, 12C, 23C, 67D, 69D, 69F, 69C.[/tex]
۱)۴۰%
۲)۶۰%
۳)۵۰%
۴)۷۰%
بلوکها 4 کلمه هستند پس برای آدرس دهی داخل بلوک 2 بیت لازم هست.
8 تا بلوک داریم و حافظه 2way هست پس یعنی 4 تا ست داریم که برای آدرس دهی بهشون 2 بیت لازم هست.
یعنی در واقع 4 تا ست داریم که بیت شمارهی 2 و 3 شمارهی ست رو مشخص میکنه و هر ست هم دوتا جا داره!
توی این جا فقط لازمه که سمت راست ترین رقم هگز رو به باینری تبدیل کنیم تا بفهمیم که بلوک توی کدوم ست قرار میگیره.
مثلاً آدرس اول F=1111 پس این صفحه توی ست شماره 3 قرار میگیره Miss
23F --> F=1111 این هم توی ست شماره 3 قرار میگیره و با این که بخش سمت چپ آدرسش متفاوت هست، اما لازم نیست که کسی رو از کش بیرون کنیم، چون ستش 2 تا جا داره! Miss
12B --> B=1011 توی ست شماره 2 قرار میگیره Miss
23B --> B=1011 توی دومین خونه از ست شماره 2 قرار میگیره Miss
12C --> C=1101 این هم توی ست شماره 3 هست و اگه دقت کنید میبینید که این بلوک قبلاً به کش آورده شده بود (با 12F توی یه بلوک هستند) Hit
به همین ترتیب که ادامه بدید، به این نتیجه میرسید که 6 تا Miss میشه و بقیه Hit
به این ترتیب:
m m m m h h m m h h
(19 بهمن 1389 12:19 ق.ظ)arshad90 نوشته شده توسط: [ -> ]"بزرگی حلقه اصلی 256M کلمه است". یعنی عملا این جمله تاثیری تو حل نداره. درسته؟
بله!
(19 بهمن 1389 02:35 ق.ظ)sal_dovomi نوشته شده توسط: [ -> ]این 12B 12C چه جوری تویه بلاک قرار میگیرن؟
توی این مسئله آدرسها 12 بیتی هستند که 2 بیت پایینشون برای آدرس دهی داخل بلاک هست (چون بلاکها 4 کلمه ای هست) و 10 بیت بالا برای آدرس دهی به این بلاک ها! یعنی اگه دو تا آدرس 10 بیت بالاشون مثل هم باشه، توی یک بلاک هستند. که 12F و 12C همون طور که می بینید 10 بیت بالاشون یکی هست.
(18 بهمن 1389 11:18 ب.ظ)54m4n3h نوشته شده توسط: [ -> ]بلوکها 4 کلمه هستند پس برای آدرس دهی داخل بلوک 2 بیت لازم هست
میشه از 23C به بعدش را هم حل کنید؟
msdn جان شما
2 بیت سمت راست رو بیخیال شو
2 بیت بعدی (بیت 3 و 4) رو معیار قرار بده برای اینکه ببینی دو کلمه در یک ست هستند یا نه
بقیه بیت های سمت چپ (12 بیت) رو معیار قرار بده برای اینکه ببینی قبلا این بلوک رو از حافظه آوردی یا نه
-----------
برای اینکه بدونی قبلا بلوکی رو آوردی باید عدد دو رقمی (مبنای 16) ذکر شده در ارجاعات به حافظه یکسان باشه
مثلا 69=69 یا 12=12 و ...
حالا اگر این عدد دو رقمی (مبنای 16) یکی بود در دو ارجاع مختلف باید حتما شماره ست اش(دو بیت بعدی) یکسان باشه تا Hit بشه
در مثالها F و C با هم Hit دارن در مواردی که عدد دو رقمی سمت چپ (مبنای 16) شون یکی باشه
این حالت در 4 مورد از ده مورد اتفاق افتاده که می شه %40