رای اجرای دستورالعملها در پردازنده ابتدا فرض را بر این میگیریم که هر دستور در یک سیکل انجام میشود. یعنی در یک سیکل، فقط یک دستورالعمل در مسیر داده حرکت میکند. سپس ایده ی pipeline(خط لوله) را برای کارایی بیشتر پردازنده ارائه میدهیم. ابتدا کارمان را با طرح یک مثال آغاز میکنیم.فرض کنید میخواهید تعدادزیادی لباس را شسته، خشک کرده و در محلشان قرار دهید.پس ابتدا لباسها را در لباسشویی قرار داده تا شسته شوند، سپس آنها را از لباسشویی خارج کرده و در خشک کن قرار میدهید و پس از خشک شدن، از خشک کن خارج کرده و در مرحله ی بعد، در محلشان قرار میدهید.و باز به سراغ سری بعدی لباسها رفته و برای آنها نیز این مراحل را تکرار میکنید. روش دیگر برای شستن تعداد زیاد لباس این است که در ابتدا تعدادی لباس را در لباسشویی قرار داده و پس از شسته شدن، آنها را از لباسشویی خارج کرده ودر خشک کن قرار میدهیم، منتهی از سوی دیگر، تعدادی لباس دیگر را وارد لباسشویی(که فعلاً بیکار است)می کنیم.اینطور در زمانمان صرفه جویی میکنیم(از وقتهای مرده ی هر مرحله استفاده میکنیم). حال به پردازنده باز میگردیم تا ربط مثال فوق، مشخص شود.روش اول، معادل آن است که هر دستور، تنها در یک سیکل انجام شود واز آنجا که در یک سیکل، داده ها از عناصر موجود در مسیر داده تنها یک بار میگذرند پس در قسمتی از سیکل، بعضی عناصر داده بی مصرف میمانند. استفاده از روش دوم معادل آن است که در هر سیکل، علاوه بر آنکه یک دستور، اجرا شده ودر طول سیکل، از مسیر داده عبور میکند، به دنبال آن بقیه دستورها وارد مسیر داده شوند که در اینصورت، در یک سیکل، تعداد بیشتری از عناصر داده شده استفاده میشوند و در نتیجه، سرعت و کارآیی بهبود می یابند. پس pipeline، مجموعه ای از عناصر(مراحل) پردازش داده است که بصورت سری به یکدیگر متصلند و ورودی هر عنصر، خروجی عنصر قبلی است. در تکنیک pipelinee، چند دستور میتوانند در یک زمان اجرا شوند.یعنی دستورات از لحاظ زمان اجرا دارای همپوشانی هستند.
در مثال فوق، مراحل ما سه گانه بودند(شستن، خشک کردن، تا کردن و در محل قرار دادن) اما در پردازنده های مختلف، تعداد مراحل، متفاوت است.
مثلاً در پردازنده های ARM و MIPS تعدادمراحل، ۵ است که شامل موارد زیر است:
- fetch:بیرون کشیدن دستورالعمل از حافظه.
- decode:خواندن دستور العمل(برای فهمیدن نوع دستورالعمل) و تشخیص registerهای مورد نیاز.
- execute:انجام محاسبات مانند محاسبه ی آدرس پرش، جمع، تفریق و...(بسته به نوع دستور).
- memory:دستیابی به حافظه(مثلاً برای نوشتن یا خواندن داده).
- write back:بازنویسی نتیجه(نتیجه ی محاسبات یا خواندن از حافظه)در register.
گاهی در پردازش به صورت خط لوله اتفاقاتی رخ می دهد که باعث می شود دستور بعدی برای پردازش آماده نباشد.به این اتفاقات، مخاطره گفته می شود.
مخاطرات خط لوله
با توجه به اتفاقاتی که برای دستوربعدی (که میخواهد وارد خط لوله شود)می افتد، مخاطرات به سه دسته تقسیم می شوند:
- مخاطرات ساختاری
- مخاطرات داده ای
- مخاطرات کنترلی
مخاطرات ساختاری
فرض کنید دو مرحله از خط لوله ی ما فقط قابل استفاده در یک مرحله بود.مثلاً در مثال لباسشویی خشک کن و شستن لباس در یک مرحله انجام میشد.در اینصورت در این مرحله فقط یک دستور می تواند به یکی از این دو دسترسی داشته باشد و این باعث به وجود آمدن تاخیر در خط لوله می شود، چرا که بجای آنکه دو دستور در یک پالس ساعت یک گام جلو روند باید صبر کنیم تا یکی جلو رود و در پالس ساعت بعدی دیگری وارد این مرحله شود.
- مثالی از این نوع مخاطره وجود یک حافظه برای دستورالعمل و داده بجای دو حافظه برای این دو است.وقتی یک حافظه داشته باشیم نمیتوان در یک پالس ساعت هم از حافظه واکشی دستور داشته باشیم وهم داده از آن بگیریم در نتیجه مرحله یک و چهار بصورت همزمان نمیتوانند اجرا شوند.در صورت بروز این نوع مخاطره، برای رفع مشکل از روش تعلیق(حباب انداختن)استفاده می کنیم که در مباحث آتی به آن خواهیم پرداخت.
مخاطرات دادهای
این مخاطره در صورتی رخ می دهد که داده ی مورد نیاز، که در دستور یا دستورات قبلی تهیه می شده، آماده نباشد.در صورت بروز این نوع مخاطره، بسته به نوع ایجاد آن به چند روش می توان مشکل را رفع کرد:
- تعلیق
- پیش فرستادن
- تغییر ترتیب کد اسمبلی برنامه
فهرست:
پردازش موازی
خط لوله
تصویر کلی
مسیر داده
کنترل
هازاردهای داده
توقف خط لوله
ارسال به جلو
هازاردهای کنترلی
استثناها
پاورپوینت با عنوان پردازش موازی و خط لوله در رایانه (Pipeline) در 65 اسلاید