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

نسخه‌ی کامل: سوال از فصل پایپلاین معماری کامپیوتر
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام به همگی
این سوال از فصل پایپلاین جزوه دکتر اجلالی هست،اگر کسی بتونه توضیح بده که چه جوری حل شده ممنون میشم
خط لوله ای با پیش بینی درجه یک داریم،در هر بار پیش بینی اشتباه ۳noop تولید می شود با اجرای تکه کد زیر چند بار حباب به وجود می اید؟
for i=0;i<10
for j=0;j<100
}
a[i][j]=b[i]*c[j
a[i][j]=a[i][j]*b[i]+c[j
{

حل:
تعداد خطای حلقه بیرون+(تعداد خطای حلقه درونی *تعداد اجرای حلقه درونی)
۲+۲*۱۰=۲۲
در هر خطا ۳حباب در نتیجه ۲۲*۳=۶۶
و تعداد حباب بدون استفاده از پیش بینی:
۱۰+۱۰*۱۰۰=۱۰۱۰
۱۰۱۰*۳=۳۰۳۰

با تشکرRolleyes[/align]
اول یک توضیح کلی درمورد پیش بینی درجه یک میدم:
در پیش بینی درجه یک به روش تزریق حباب عمل میشه تنها تفاوت در وجود یک جدول هست که سابقه دستورات اخیر نگهداری میکنه
در این روش میزان ایجاد حباب کاهش پیدا میکنه
مثلا وقتی حلقه ای در برنامه وجود داره بار اول که حلقه اجرا میشه جدول خالی هست پس به روش تزریق حباب عمل میشه برای اینکه مشخص بشه حلقه اجرا میشه یا نه چند حباب ایجاد میشه تا مرحله چک شدن شرط حلقه تموم بشه و اگر شرط برقرار باشه و حلقه اجرا بشه در جدول ثبت میشه و بطور پیش فرض وقتی دور دوم حلقه اجرا میشه فرض میشه که حلقه قراره اجرا بشه و دیگه نیازی به تزریق حباب برای چک کردن شرط حلقه وجود نداره اما در دور اخر که شرط برقرار نیست و حلقه نباید اجرا بشه مطابق جدول حلقه اجرا میشه پس قبل از اینکه اجرا به مرحله WB برسه CPU اون مراحلو که به اشتباه اجرا شدن به حباب تبدیل میکنه و جدول سوابق هم بروز میکنه، یعنی در اجرای یک حلقه به این روش یک بار در ابتدای اجرای حلقه و یکبار هم در پایان احرای حلقه حباب تزریق میشه
اما در مورد این سوال:
مطابق توضیحات بالا، در هر حلقه ای دور اول اجرا حباب تزریق میشه چون سابقه اون دستور در جدول ثبت نشده دور اخر اجرا هم حباب تزریق میشه چون در جدول ثبت شده باید حلقه اجرا بشه اما در دور اخر نباید حلقه اجرا بشه پس هر حلقه 2 بار خطا داره
حلقه درونی 10 بار تکرار میشه پس 20 خطا ایجاد میکنه و حلقه بیرونی هم 2 خطا پس در کل 22 خطا که برا هر خطا هم 3 حباب داریم پس در کل 66 حباب
اما اگر از روش تزریق حباب این دستور اجرا میشد شرط حلقه درونی 101 بار چک میشد که 100 بار درست و 1 بار شرط غلط بود پس 3*100 بار به اشتباه حباب تزریق شده ، از طرفی هم 10 بار این حلقه اجرا میشه پس 3*1000 بار به اشتباه حباب تزریق شده
درمورد حلقه بیرونی هم 11 بار شرط حلقه چک شده که از این 11 بار 10*3 بار حباب نادرست تزریق شده ، پس در کل 3*1010 بار به اشتباه حباب تزریق شده

امیدوارم توضیحاتم واضح بوده باشه Smile
تو حالت اول گفتین حلقه ی درونی 10 بار اجرا میشه ، ولی محدودش ار 0 تا 100 هست 10 رو از کجا آوردین؟
من حالت دوم رو فهمیدم ولی حالت اول رو اگه ممکنه یکم روشنتر بگین
ممنون
در حالت اول یکبار وقتی میخواد حلقه برای بار اول اجرا بشه چون جدول سوابق سابقه ای ثبت نکرده (چون بار اول اجرا هست) حباب تزریق میکنه یکبار هم بار اخر که شرط حلقه داره چک میشه بطور پیش فرض، فرض میشه که حلقه باید اجرا بشه (مطابق سوابقی که در جدول ثبت شده) پس دستورات درون حلقه fetch , decode ,.... اجرا میشه اما تا بخواد وارد مرحله WB بشه Cpu میفهمه که به اشتباه دستورات داخل حلقه اجرا شده و تمام اون fetch , decode ,... که مربوط به دستورات درون حلقه بوده به حباب تبدیل میکنه
تمام دفعاتی که بین بار اول و بار اخر که شرط حلقه چک میشه، مطابق سوابق درون جدول فرض میشه که باید دستورات درون حلقه اجرا بشه پس حبابی تزریق نمیشه و از اونجا که فرض هم درست پیش بینی شده مشکلی ایجاد نمیشه تا دور اخر
پس برای هر101 دوری که شرط حلقه چک میشه فقط یک دور اول و یک دور اخر حباب تزریق میشه
حالا حلقه درونی 10 بار توسط حلقه بیرونی اجرا میشه پس در کل در حلقه درونی 20 بار حباب تزریق میشه

اگر باز هم توضیحاتم واضح نبود بگید تا بیشتر توضیح بدم
لینک مرجع