تالار گفتمان مانشت
محاسبه درصدhitدر نگاشت های مختلف - نسخه‌ی قابل چاپ

محاسبه درصدhitدر نگاشت های مختلف - abji22 - 12 آذر ۱۳۹۳ ۰۲:۱۴ ب.ظ

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

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: محاسبه درصدhitدر نگاشت های مختلف - ana9940 - 12 آذر ۱۳۹۳ ۰۸:۳۴ ب.ظ

ببین توی این سوال ها باید اندازه بلاک رو دقیق حساب کنی. خب این سوال خودش اندازه بلاک رو گفته ۳۲/ و البته نکته مهم اینه که در آخر سوال گفته دستورات هم ۳۲ بیتی هست. (مثل اون یکی سوال نیست که هر بار که واسه یه دستور به بلاک می رفتیم، یه سری دستورات دیگه رو هم بشه آورد!) در هر مراجعه به حافظه فقط میشه یه دستور رو آورد چون هر دستوری یه بلاک رو پر می کنه.
چون ۲۵۶ بایت حافظه کش داریم ، و هر بلاک هم ۳۲ بیت هست (یعنی ۴ بایت) پس به تعداد ۲۵۶/۴= ۶۴ بلاک داریم.
اگه فرض کنیم دستورات ما از ۰ تا ۶۳ هستن، خب طبیعتا در اولین آدرس یعنی Inst0 نقص صفحه داریم، میریم اون رو به کش میاریم و در بلاک صفر میگذاریم و چون ۳۲ بیت هست تمام بلاک رو پر میکنه، آدرس بعدی یعنی Inst1 نیر نقص صفحه داریم و دوباره اون رو به کش میاریم و در بلاک ۱ می گذاریم ، همین روند تا دستور ۶۳ ادامه پیدا میکنه، دستور ۶۴ نیز نقص صفحه داریم و الان دیگه کش پر شده و البته Inst64 نیز جای ثابتی دارد یعنی بلاک صفر پس به جای دستور صفر کپی میشه، حالا برای دور های دوم و سوم ، دستورات ۱ تا ۶۳ در کش هست، در بلاک صفر هم دستور ۶۴، در دور دوم دوباره از دستور صفر شروع میشه که در کش نیست، Miss داریم و به جای دستور ۶۴ که الان در بلاک صفر هست کپی میشه ، دستور ۱ تا ۶۳ hit اتفاق می افته، دستور ۶۴ دوباره miss داریم ، دور سوم هم به همین ترتیب.
پس دور اول هیچی hit نداشتیم، دور دوم و سوم ۶۳ hit داشتیم. پس hit ratio میشه :
۲*۶۳/۳*۶۵
در حالت fully assciative برعکس direct آدرس هایی که از حافظه اصلی آورده میشه مکان ثابتی در کش نداره، مثل حالت اول ، در دور اول آدرس های ۰ تا ۶۳ Miss اتفاق می افته، حالا در دستور ۶۴ هم miss داریم، در Direct دستور ۶۴ام باید در بلاک صفر گذاشته بشه ولی Fully assciative این اجبار نیست و چون مقایسه به طور موازی با همه بلاک ها انجام میشه، براسال الگوریتم جایگزینی، بلاکی انتخاب میشه و دستور مورد نظر در آن کپی میشه الان چون گفته LRU، دستوری که زمان زیادی از استفاده ی اون گذشته را جایگزین می کنیم یعنی دستور ۶۴ جایگزین دستور ۱ میشه، در دور دوم دوباره دستور ۱ رو میخوایم که نیست، اون رو میاریم و طبق الگوریتم LRU جایگزین دستور ۲ می کنیم، همین طور جلو میریم و می بینیم که همه ش دستورات قبلی جایگزین میشه و هیچ وقت hit نخواهیم داشت.
یعنی تمام تشکیلات مقایسه موازی و الگوریتم LRU به هیچ دردی نخورد!Big Grin
شکل هم در ضمیمه آورده شده!

RE: محاسبه درصدhitدر نگاشت های مختلف - khordad.girl - 13 آذر ۱۳۹۳ ۱۲:۴۲ ق.ظ

(۱۲ آذر ۱۳۹۳ ۰۸:۳۴ ب.ظ)ana9940 نوشته شده توسط:  ببین توی این سوال ها باید اندازه بلاک رو دقیق حساب کنی. خب این سوال خودش اندازه بلاک رو گفته ۳۲/ و البته نکته مهم اینه که در آخر سوال گفته دستورات هم ۳۲ بیتی هست. (مثل اون یکی سوال نیست که هر بار که واسه یه دستور به بلاک می رفتیم، یه سری دستورات دیگه رو هم بشه آورد!) در هر مراجعه به حافظه فقط میشه یه دستور رو آورد چون هر دستوری یه بلاک رو پر می کنه.
چون ۲۵۶ بایت حافظه کش داریم ، و هر بلاک هم ۳۲ بیت هست (یعنی ۴ بایت) پس به تعداد ۲۵۶/۴= ۶۴ بلاک داریم.
اگه فرض کنیم دستورات ما از ۰ تا ۶۳ هستن، خب طبیعتا در اولین آدرس یعنی Inst0 نقص صفحه داریم، میریم اون رو به کش میاریم و در بلاک صفر میگذاریم و چون ۳۲ بیت هست تمام بلاک رو پر میکنه، آدرس بعدی یعنی Inst1 نیر نقص صفحه داریم و دوباره اون رو به کش میاریم و در بلاک ۱ می گذاریم ، همین روند تا دستور ۶۳ ادامه پیدا میکنه، دستور ۶۴ نیز نقص صفحه داریم و الان دیگه کش پر شده و البته Inst64 نیز جای ثابتی دارد یعنی بلاک صفر پس به جای دستور صفر کپی میشه، حالا برای دور های دوم و سوم ، دستورات ۱ تا ۶۳ در کش هست، در بلاک صفر هم دستور ۶۴، در دور دوم دوباره از دستور صفر شروع میشه که در کش نیست، Miss داریم و به جای دستور ۶۴ که الان در بلاک صفر هست کپی میشه ، دستور ۱ تا ۶۳ hit اتفاق می افته، دستور ۶۴ دوباره miss داریم ، دور سوم هم به همین ترتیب.
پس دور اول هیچی hit نداشتیم، دور دوم و سوم ۶۳ hit داشتیم. پس hit ratio میشه :
۲*۶۳/۳*۶۵
در حالت fully assciative برعکس direct آدرس هایی که از حافظه اصلی آورده میشه مکان ثابتی در کش نداره، مثل حالت اول ، در دور اول آدرس های ۰ تا ۶۳ Miss اتفاق می افته، حالا در دستور ۶۴ هم miss داریم، در Direct دستور ۶۴ام باید در بلاک صفر گذاشته بشه ولی Fully assciative این اجبار نیست و چون مقایسه به طور موازی با همه بلاک ها انجام میشه، براسال الگوریتم جایگزینی، بلاکی انتخاب میشه و دستور مورد نظر در آن کپی میشه الان چون گفته LRU، دستوری که زمان زیادی از استفاده ی اون گذشته را جایگزین می کنیم یعنی دستور ۶۴ جایگزین دستور ۱ میشه، در دور دوم دوباره دستور ۱ رو میخوایم که نیست، اون رو میاریم و طبق الگوریتم LRU جایگزین دستور ۲ می کنیم، همین طور جلو میریم و می بینیم که همه ش دستورات قبلی جایگزین میشه و هیچ وقت hit نخواهیم داشت.
یعنی تمام تشکیلات مقایسه موازی و الگوریتم LRU به هیچ دردی نخورد!Big Grin
شکل هم در ضمیمه آورده شده!
ببخشید تو حالت اول دستورات ۰ تا ۶۴ که آورد وقتی دستور ۶۴ جایگزین ۰ شد چرا دور بعدی از ۱ شرو شده دستورات؟؟ :-؟

RE: محاسبه درصدhitدر نگاشت های مختلف - ana9940 - 13 آذر ۱۳۹۳ ۱۱:۰۶ ق.ظ

نه دستورات از ۱ شروع نشده!
در دور دوم هم دستورات از ۰ تا ۶۴ هست، دیتاهایی که الان توی کش داریم(یعنی در دور دوم ) به این ترتیبه: دستور۶۴ در آدرس صفر، دستور ۱ در آدرس ۱ ، دستور ۲ در آدرس ۲ و ..... .
حالا برای دسترسی به دستور ۰ ، نیازه اون رو از حافظه اصلی بیارم داخل کش، به همین خاطر miss داریم، سپس دستور۱ رو میخوایم که توی کش هست، دستورات ۲ تا ۶۳ هم، در کش هست، ( ۱ تا ۶۳ hit داریم) دستور ۶۴ در کش نیست، اون از حافظه اصلی به داخل کش میاریم و در آدرس صفر جایگزین دستور صفر می کنیم.

RE: محاسبه درصدhitدر نگاشت های مختلف - abji22 - 13 آذر ۱۳۹۳ ۱۲:۳۷ ب.ظ

توشکل مربوط به نگاشت کامل چرا ۶۴نیستش؟

RE: محاسبه درصدhitدر نگاشت های مختلف - ana9940 - 13 آذر ۱۳۹۳ ۰۱:۰۹ ب.ظ

(۱۳ آذر ۱۳۹۳ ۱۲:۳۷ ب.ظ)abji22 نوشته شده توسط:  توشکل مربوط به نگاشت کامل چرا ۶۴نیستش؟
شماره دستورات رو از ۰ تا ۶۴ گرفتم، بعد در حالت Fully اشتباهی ۶۵ رو نوشتم به جای ۶۴/ Cool