تالار گفتمان مانشت
سوال از فصل پایپلاین معماری کامپیوتر - نسخه‌ی قابل چاپ

سوال از فصل پایپلاین معماری کامپیوتر - SSaber - 18 دى ۱۳۹۱ ۰۴:۱۳ ب.ظ

سلام به همگی
این سوال از فصل پایپلاین جزوه دکتر اجلالی هست،اگر کسی بتونه توضیح بده که چه جوری حل شده ممنون میشم
خط لوله ای با پیش بینی درجه یک داریم،در هر بار پیش بینی اشتباه ۳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]

سوال از فصل پایپلاین معماری کامپیوتر - narges_r - 22 دى ۱۳۹۱ ۰۱:۲۲ ق.ظ

اول یک توضیح کلی درمورد پیش بینی درجه یک میدم:
در پیش بینی درجه یک به روش تزریق حباب عمل میشه تنها تفاوت در وجود یک جدول هست که سابقه دستورات اخیر نگهداری میکنه
در این روش میزان ایجاد حباب کاهش پیدا میکنه
مثلا وقتی حلقه ای در برنامه وجود داره بار اول که حلقه اجرا میشه جدول خالی هست پس به روش تزریق حباب عمل میشه برای اینکه مشخص بشه حلقه اجرا میشه یا نه چند حباب ایجاد میشه تا مرحله چک شدن شرط حلقه تموم بشه و اگر شرط برقرار باشه و حلقه اجرا بشه در جدول ثبت میشه و بطور پیش فرض وقتی دور دوم حلقه اجرا میشه فرض میشه که حلقه قراره اجرا بشه و دیگه نیازی به تزریق حباب برای چک کردن شرط حلقه وجود نداره اما در دور اخر که شرط برقرار نیست و حلقه نباید اجرا بشه مطابق جدول حلقه اجرا میشه پس قبل از اینکه اجرا به مرحله WB برسه CPU اون مراحلو که به اشتباه اجرا شدن به حباب تبدیل میکنه و جدول سوابق هم بروز میکنه، یعنی در اجرای یک حلقه به این روش یک بار در ابتدای اجرای حلقه و یکبار هم در پایان احرای حلقه حباب تزریق میشه
اما در مورد این سوال:
مطابق توضیحات بالا، در هر حلقه ای دور اول اجرا حباب تزریق میشه چون سابقه اون دستور در جدول ثبت نشده دور اخر اجرا هم حباب تزریق میشه چون در جدول ثبت شده باید حلقه اجرا بشه اما در دور اخر نباید حلقه اجرا بشه پس هر حلقه ۲ بار خطا داره
حلقه درونی ۱۰ بار تکرار میشه پس ۲۰ خطا ایجاد میکنه و حلقه بیرونی هم ۲ خطا پس در کل ۲۲ خطا که برا هر خطا هم ۳ حباب داریم پس در کل ۶۶ حباب
اما اگر از روش تزریق حباب این دستور اجرا میشد شرط حلقه درونی ۱۰۱ بار چک میشد که ۱۰۰ بار درست و ۱ بار شرط غلط بود پس ۳*۱۰۰ بار به اشتباه حباب تزریق شده ، از طرفی هم ۱۰ بار این حلقه اجرا میشه پس ۳*۱۰۰۰ بار به اشتباه حباب تزریق شده
درمورد حلقه بیرونی هم ۱۱ بار شرط حلقه چک شده که از این ۱۱ بار ۱۰*۳ بار حباب نادرست تزریق شده ، پس در کل ۳*۱۰۱۰ بار به اشتباه حباب تزریق شده

امیدوارم توضیحاتم واضح بوده باشه Smile

سوال از فصل پایپلاین معماری کامپیوتر - jafarir - 23 دى ۱۳۹۱ ۱۰:۳۲ ب.ظ

تو حالت اول گفتین حلقه ی درونی ۱۰ بار اجرا میشه ، ولی محدودش ار ۰ تا ۱۰۰ هست ۱۰ رو از کجا آوردین؟
من حالت دوم رو فهمیدم ولی حالت اول رو اگه ممکنه یکم روشنتر بگین
ممنون

سوال از فصل پایپلاین معماری کامپیوتر - narges_r - 23 دى ۱۳۹۱ ۱۰:۵۸ ب.ظ

در حالت اول یکبار وقتی میخواد حلقه برای بار اول اجرا بشه چون جدول سوابق سابقه ای ثبت نکرده (چون بار اول اجرا هست) حباب تزریق میکنه یکبار هم بار اخر که شرط حلقه داره چک میشه بطور پیش فرض، فرض میشه که حلقه باید اجرا بشه (مطابق سوابقی که در جدول ثبت شده) پس دستورات درون حلقه fetch , decode ,.... اجرا میشه اما تا بخواد وارد مرحله WB بشه Cpu میفهمه که به اشتباه دستورات داخل حلقه اجرا شده و تمام اون fetch , decode ,... که مربوط به دستورات درون حلقه بوده به حباب تبدیل میکنه
تمام دفعاتی که بین بار اول و بار اخر که شرط حلقه چک میشه، مطابق سوابق درون جدول فرض میشه که باید دستورات درون حلقه اجرا بشه پس حبابی تزریق نمیشه و از اونجا که فرض هم درست پیش بینی شده مشکلی ایجاد نمیشه تا دور اخر
پس برای هر۱۰۱ دوری که شرط حلقه چک میشه فقط یک دور اول و یک دور اخر حباب تزریق میشه
حالا حلقه درونی ۱۰ بار توسط حلقه بیرونی اجرا میشه پس در کل در حلقه درونی ۲۰ بار حباب تزریق میشه

اگر باز هم توضیحاتم واضح نبود بگید تا بیشتر توضیح بدم