خط لوله (رایانه)

برای اجرای دستورالعمل‌ها در پردازنده ابتدا فرض را بر این می‌گیریم که هر دستور در یک سیکل انجام می‌شود. یعنی در یک سیکل، فقط یک دستورالعمل در مسیر داده حرکت می‌کند. سپس ایدهٔ pipeline(خط لوله) را برای کارایی بیشتر پردازنده ارائه می‌دهیم. ابتدا کارمان را با طرح یک مثال آغاز می‌کنیم. فرض کنید می‌خواهید تعدادزیادی لباس را شسته، خشک کرده و در محلشان قرار دهید. پس ابتدا لباسها را در لباسشویی قرار داده تا شسته شوند، سپس آن‌ها را از لباسشویی خارج کرده و در خشک کن قرار می‌دهید و پس از خشک شدن، از خشک کن خارج کرده و در مرحلهٔ بعد، در محلشان قرار می‌دهید؛ و باز به سراغ سری بعدی لباسها رفته و برای آن‌ها نیز این مراحل را تکرار می‌کنید. روش دیگر برای شستن تعداد زیاد لباس این است که در ابتدا تعدادی لباس را در لباسشویی قرار داده و پس از شسته شدن، آن‌ها را از لباسشویی خارج کرده و در خشک کن قرار می‌دهیم، منتهی از سوی دیگر، تعدادی لباس دیگر را وارد لباسشویی (که فعلاً بیکار است) می‌کنیم. اینطور در زمانمان صرفه جویی می‌کنیم (از وقتهای مردهٔ هر مرحله استفاده می‌کنیم). حال به پردازنده بازمی‌گردیم تا ربط مثال فوق، مشخص شود. روش اول، معادل آن است که هر دستور، تنها در یک سیکل انجام شود و از آنجا که در یک سیکل، داده‌ها از عناصر موجود در مسیر داده تنها یک بار می‌گذرند پس در قسمتی از سیکل، بعضی عناصر داده بی‌مصرف می‌مانند. استفاده از روش دوم معادل آن است که در هر سیکل، علاوه بر آنکه یک دستور، اجرا شده و در طول سیکل، از مسیر داده عبور می‌کند، به دنبال آن بقیه دستورها وارد مسیر داده شوند که در اینصورت، در یک سیکل، تعداد بیشتری از عناصر داده شده استفاده می‌شوند و در نتیجه، سرعت و کارایی بهبود می‌یابند. پس pipeline، مجموعه‌ای از عناصر (مراحل) پردازش داده است که بصورت سری به یکدیگر متصلند و ورودی هر عنصر، خروجی عنصر قبلی است. در تکنیک pipeline، چند دستور می‌توانند در یک زمان اجرا شوند. یعنی دستورات از لحاظ زمان اجرا دارای همپوشانی هستند.

در مثال فوق، مراحل ما سه‌گانه بودند (شستن، خشک کردن، تا کردن و در محل قرار دادن) اما در پردازنده‌های مختلف، تعداد مراحل، متفاوت است.

مثلاً در پردازنده‌های ARM و MIPS تعدادمراحل، ۵ است که شامل موارد زیر است:

  1. fetch:بیرون کشیدن دستورالعمل از حافظه.
  2. decode:خواندن دستورالعمل (برای فهمیدن نوع دستورالعمل) و تشخیص registerهای مورد نیاز.
  3. execute:انجام محاسبات مانند محاسبهٔ آدرس پرش، جمع، تفریق و…(بسته به نوع دستور).
  4. memory:دستیابی به حافظه (مثلاً برای نوشتن یا خواندن داده).
  5. write back:بازنویسی نتیجه(نتیجهٔ محاسبات یا خواندن از حافظه) در register.

گاهی در پردازش به صورت خط لوله اتفاقاتی رخ می‌دهد که باعث می‌شود دستور بعدی برای پردازش آماده نباشد. به این اتفاقات، مخاطره گفته می‌شود که در ادامه به آن خواهیم پرداخت.

زبان های دیگر