تالار گفتمان مانشت

نسخه‌ی کامل: محاسبه درصدhitدر نگاشت های مختلف
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام ی سوال از فصل حافظه از درصد hit
لطففاراهنمایی کنید وبگید در روش های مختلف نگاشت hit چجوری حساب میشه
ممنونم(سوال38 پوران)

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
ببین توی این سوال ها باید اندازه بلاک رو دقیق حساب کنی. خب این سوال خودش اندازه بلاک رو گفته 32. و البته نکته مهم اینه که در آخر سوال گفته دستورات هم 32 بیتی هست. (مثل اون یکی سوال نیست که هر بار که واسه یه دستور به بلاک می رفتیم، یه سری دستورات دیگه رو هم بشه آورد!) در هر مراجعه به حافظه فقط میشه یه دستور رو آورد چون هر دستوری یه بلاک رو پر می کنه.
چون 256 بایت حافظه کش داریم ، و هر بلاک هم 32 بیت هست (یعنی 4 بایت) پس به تعداد 256/4= 64 بلاک داریم.
اگه فرض کنیم دستورات ما از 0 تا 63 هستن، خب طبیعتا در اولین آدرس یعنی Inst0 نقص صفحه داریم، میریم اون رو به کش میاریم و در بلاک صفر میگذاریم و چون 32 بیت هست تمام بلاک رو پر میکنه، آدرس بعدی یعنی Inst1 نیر نقص صفحه داریم و دوباره اون رو به کش میاریم و در بلاک 1 می گذاریم ، همین روند تا دستور 63 ادامه پیدا میکنه، دستور 64 نیز نقص صفحه داریم و الان دیگه کش پر شده و البته Inst64 نیز جای ثابتی دارد یعنی بلاک صفر پس به جای دستور صفر کپی میشه، حالا برای دور های دوم و سوم ، دستورات 1 تا 63 در کش هست، در بلاک صفر هم دستور 64، در دور دوم دوباره از دستور صفر شروع میشه که در کش نیست، Miss داریم و به جای دستور 64 که الان در بلاک صفر هست کپی میشه ، دستور 1 تا 63 hit اتفاق می افته، دستور 64 دوباره miss داریم ، دور سوم هم به همین ترتیب.
پس دور اول هیچی hit نداشتیم، دور دوم و سوم 63 hit داشتیم. پس hit ratio میشه :
2*63/3*65
در حالت fully assciative برعکس direct آدرس هایی که از حافظه اصلی آورده میشه مکان ثابتی در کش نداره، مثل حالت اول ، در دور اول آدرس های 0 تا 63 Miss اتفاق می افته، حالا در دستور 64 هم miss داریم، در Direct دستور 64ام باید در بلاک صفر گذاشته بشه ولی Fully assciative این اجبار نیست و چون مقایسه به طور موازی با همه بلاک ها انجام میشه، براسال الگوریتم جایگزینی، بلاکی انتخاب میشه و دستور مورد نظر در آن کپی میشه الان چون گفته LRU، دستوری که زمان زیادی از استفاده ی اون گذشته را جایگزین می کنیم یعنی دستور 64 جایگزین دستور 1 میشه، در دور دوم دوباره دستور 1 رو میخوایم که نیست، اون رو میاریم و طبق الگوریتم LRU جایگزین دستور 2 می کنیم، همین طور جلو میریم و می بینیم که همه ش دستورات قبلی جایگزین میشه و هیچ وقت hit نخواهیم داشت.
یعنی تمام تشکیلات مقایسه موازی و الگوریتم LRU به هیچ دردی نخورد!Big Grin
شکل هم در ضمیمه آورده شده!
(12 آذر 1393 08:34 ب.ظ)ana9940 نوشته شده توسط: [ -> ]ببین توی این سوال ها باید اندازه بلاک رو دقیق حساب کنی. خب این سوال خودش اندازه بلاک رو گفته ۳۲/ و البته نکته مهم اینه که در آخر سوال گفته دستورات هم ۳۲ بیتی هست. (مثل اون یکی سوال نیست که هر بار که واسه یه دستور به بلاک می رفتیم، یه سری دستورات دیگه رو هم بشه آورد!) در هر مراجعه به حافظه فقط میشه یه دستور رو آورد چون هر دستوری یه بلاک رو پر می کنه.
چون ۲۵۶ بایت حافظه کش داریم ، و هر بلاک هم ۳۲ بیت هست (یعنی ۴ بایت) پس به تعداد ۲۵۶/۴= ۶۴ بلاک داریم.
اگه فرض کنیم دستورات ما از ۰ تا ۶۳ هستن، خب طبیعتا در اولین آدرس یعنی Inst0 نقص صفحه داریم، میریم اون رو به کش میاریم و در بلاک صفر میگذاریم و چون ۳۲ بیت هست تمام بلاک رو پر میکنه، آدرس بعدی یعنی Inst1 نیر نقص صفحه داریم و دوباره اون رو به کش میاریم و در بلاک ۱ می گذاریم ، همین روند تا دستور ۶۳ ادامه پیدا میکنه، دستور ۶۴ نیز نقص صفحه داریم و الان دیگه کش پر شده و البته Inst64 نیز جای ثابتی دارد یعنی بلاک صفر پس به جای دستور صفر کپی میشه، حالا برای دور های دوم و سوم ، دستورات ۱ تا ۶۳ در کش هست، در بلاک صفر هم دستور ۶۴، در دور دوم دوباره از دستور صفر شروع میشه که در کش نیست، Miss داریم و به جای دستور ۶۴ که الان در بلاک صفر هست کپی میشه ، دستور ۱ تا ۶۳ hit اتفاق می افته، دستور ۶۴ دوباره miss داریم ، دور سوم هم به همین ترتیب.
پس دور اول هیچی hit نداشتیم، دور دوم و سوم ۶۳ hit داشتیم. پس hit ratio میشه :
2*63/3*65
در حالت fully assciative برعکس direct آدرس هایی که از حافظه اصلی آورده میشه مکان ثابتی در کش نداره، مثل حالت اول ، در دور اول آدرس های ۰ تا ۶۳ Miss اتفاق می افته، حالا در دستور ۶۴ هم miss داریم، در Direct دستور ۶۴ام باید در بلاک صفر گذاشته بشه ولی Fully assciative این اجبار نیست و چون مقایسه به طور موازی با همه بلاک ها انجام میشه، براسال الگوریتم جایگزینی، بلاکی انتخاب میشه و دستور مورد نظر در آن کپی میشه الان چون گفته LRU، دستوری که زمان زیادی از استفاده ی اون گذشته را جایگزین می کنیم یعنی دستور ۶۴ جایگزین دستور ۱ میشه، در دور دوم دوباره دستور ۱ رو میخوایم که نیست، اون رو میاریم و طبق الگوریتم LRU جایگزین دستور ۲ می کنیم، همین طور جلو میریم و می بینیم که همه ش دستورات قبلی جایگزین میشه و هیچ وقت hit نخواهیم داشت.
یعنی تمام تشکیلات مقایسه موازی و الگوریتم LRU به هیچ دردی نخورد!Big Grin
شکل هم در ضمیمه آورده شده!
ببخشید تو حالت اول دستورات 0 تا 64 که آورد وقتی دستور 64 جایگزین 0 شد چرا دور بعدی از 1 شرو شده دستورات؟؟ :-؟
نه دستورات از 1 شروع نشده!
در دور دوم هم دستورات از 0 تا 64 هست، دیتاهایی که الان توی کش داریم(یعنی در دور دوم ) به این ترتیبه: دستور64 در آدرس صفر، دستور 1 در آدرس 1 ، دستور 2 در آدرس 2 و ..... .
حالا برای دسترسی به دستور 0 ، نیازه اون رو از حافظه اصلی بیارم داخل کش، به همین خاطر miss داریم، سپس دستور1 رو میخوایم که توی کش هست، دستورات 2 تا 63 هم، در کش هست، ( 1 تا 63 hit داریم) دستور 64 در کش نیست، اون از حافظه اصلی به داخل کش میاریم و در آدرس صفر جایگزین دستور صفر می کنیم.
توشکل مربوط به نگاشت کامل چرا 64نیستش؟
(13 آذر 1393 12:37 ب.ظ)abji22 نوشته شده توسط: [ -> ]توشکل مربوط به نگاشت کامل چرا ۶۴نیستش؟
شماره دستورات رو از 0 تا 64 گرفتم، بعد در حالت Fully اشتباهی 65 رو نوشتم به جای 64. Cool
لینک مرجع