توصیه شده, متفرقه, مقاله های سیسوگ

با مفهوم Pipeline بهتر آشنا شوید

PipeLine

با مفهوم Pipeline بهتر آشنا شوید ;

عامل محدود کننده سرعت

در الکترونیک شاید بارها شنیده باشید که حداکثر سرعت این سیستم فلان مقدار است، دقیقا چه عواملی باعث می‌شوند که حداکثر سرعت یک سیستم محدود شود؟

اگر بخواهیم یک تعریف ساده و مفهومی از سرعت داشته باشیم، می‌گوییم که سرعت در رابطه است با مقدار زمانی که طول می‌کشد تا دیتا یا اطلاعات (فرض کنید یک بیت دیتا با مقدار 0 یا 1) از یک نقطه به نقطه دیگر برسد. اما همیشه محدودیت‌هایی وجود دارند که ما نتوانیم دیتا را سریع منتقل کنیم. اگر شما به عنوان یک فرد آشنا به الکترونیک یا حتی یک فرد معمولی که حداقل یک بار برایش سوال شده که وقتی می‌گوییم CPU کامپیوترمان 2.4GHZ است، دقیقا به چه معناست؟ به احتمال زیاد مفهوم فرکانس را می‌دانید.

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

ما در این مقاله قصد نداریم در مورد تکنولوژی ساخت صحبت کنیم، بلکه صحبت ما در مورد حداکثر فرکانس اعمالی به سیستم خواهد بود و فرض می‌کنیم که تکنولوژی ساخت و بسیاری از عوامل دیگر به ما این اجازه را دادند که بتوانیم مثلا حداکثر فرکانس 400MHZ را به سیستم اعمال کنیم. اما ما در عمل نمی‌توانیم این فرکانس را به سیستم اعمال کنیم! مشکل از کجاست؟ عجله نکنید باید تا پایان این مقاله حوصله به خرج دهید تا متوجه شوید که مشکل از کجاست. در واقع ما با گفتن همه این حرف‌ها قصد داریم مفهوم ( پایپ لاین ) Pipeline را به شما آموزش دهیم، اما قبل از آن باید چندین مفهوم دیگر را نیز بدانید که در زیر به معرفی آن ها خواهیم پرداخت.

 

Throughput و Latency

به مدت زمانی که طول می‌کشد تا دیتا از ورودی به خروجی برسد Latency و به تعداد خروجی در واحد زمان Throughput می‌گویند. فرض کنید یک لوله آب وجود دارد که یک ثانیه طول می‌کشد تا یک مولکول آب از ابتدا به انتهای آن برسد که همان مفهوم Latency را تداعی می‌کند و در خروجی در هر یک ثانیه ده مولکول آب خارج می‌شود و این موضوع نیز مفهوم Throughput را می‌رساند. حتما توجه دارید که هیچ لزومی ندارد که وقتی می‌خواهیم در خروجی مولکول‌های آب را ببینیم به اندازه زمان Latency صبر کنیم، بلکه فقط برای اولین بار باید به اندازه زمان Latency صبر کرد تا در خروجی مولکول آبی ظاهر گردد ولی پس از آن می‌توان با زمان بسیار کمتری مولکول‌های آب را در خروجی دید. ما قبل از اینکه هر مولکول آب بخواهد به خروجی برسد، مولکول دیگری را وارد لوله خواهیم کرد. راه حل دیگر این بود که ما صبر کنیم تا زمانی که هر مولکول آب به خروجی رسید مولکول دیگری را وارد لوله کنیم. مقایسه این دو روش ما را به مفهوم Pipeline نزدیک‌تر می‌کند.

 

در سیستم‌های دیجیتال ما با استفاده از کلاک (معمولا لبه بالا رونده کلاک) می‌توانیم دیتا را از یک حافظه به حافظه دیگر منتقل کنیم و تا زمانی که دیتا به حافظه دوم نرسید ما نمی‌توانیم یک لبه کلاک دیگر به سیستم اعمال کنیم. چون در این صورت دیتاها از دست می‌روند و در نهایت ما یک دیتای غیر صحیح را قرائت خواهیم کرد. اما در یک سیستم الکترونیکی و مشخصا الکترونیک دیجیتال ما تعداد بسیار زیادی حافظه یا رجیستر خواهیم داشت که هر کدام دو به دو با هم یک مسیر تشکیل می‌دهند و به تاخیری که در طول همین مسیر‌ها اتفاق می‌افتد Latency می‌گوییم. در نهایت ما می‌توانیم با توجه به طولانی‌ترین مسیر، که مسیر بحرانی نام دارد حداکثر فرکانس را به مدار اعمال کنیم.

فرض کنید ما با توجه به مسیر بحرانی حداکثر فرکانس را اعمال کردیم و خواسته مسئله برآورده نشد چاره چیست؟ چاره این است که در مسیر بحرانی و در بین دو حافظه یک حافظه دیگر قرار بدهیم، حتما حدس می‌‌زنید که اگر این حافظه دقیقا در وسط مسیر بحرانی قرار گرفته باشد، مسیر بحرانی جدید نصف شده است و این بدان معناست که ما می‌توانیم فرکانس اعمالی را دو برابر کنیم و در واحد زمان می‌توانیم تعداد خروجی بیشتری دریافت کنیم که منجر به بهبود Throughput خواهد شد و این یعنی افزایش سرعت.

دقیقا به همین عملی که ما بین دو حافظه، یک حافظه دیگر قرار دادیم Pipeline می‌گویند.

Throughput و Latency چه تغییری می کنند؟

توجه کنید که با پایپ لاین کردن Throughput بیشتر خواهد شد (بهبود می‌یابد) اما Latency یا تغییر نمی‌کند یا بیشتر خواهد شد! حتما دارید به این فکر می‌کنید که چگونه ممکن است Latency بیشتر شود؟ عجله نکنید با مثالی که در ادامه برای شما خواهیم آورد کاملا متوجه این موضوع خواهید شد. پس اگر کمی گیج شده‌اید برگردید و دوباره تعاریف را بخوانید چون شاید فکر کنید قصد ما این است که Latency را کاهش بدهیم اما این گونه نیست و قصد ما کاهش مسیر بحرانی می‌باشد. Latency تنها در صورتی تغییر نمی‌کند که حافظه را دقیقا در وسط مسیر بحرانی قرار دهیم که همچین چیزی در عمل غیر ممکن خواهد بود، مثلا وقتی شما دارید با FPGA سیستمی را طراحی می‌کنید نهایتا در گزارش‌ها به شما حداکثر فرکانس اعمالی گزارش خواهد شد، حال اگر این فرکانس خواسته شما را برآورده نکند شما باید به دنبال پایپ لاین کردن باشید و وقتی که پایپ لاین می‌کنید تقریبا هیچ احتمالی وجود ندارد که الگوریتم ها بتوانند حافظه میانی را دقیقا در وسط مسیر بحرانی قرار بدهند.

شاید برای شما مفید باشد: آموزش FPGA

در ادامه قصد داریم که پایپ لاین کردن را با استفاده از مراحل تولید یک دوچرخه بیان کنیم تا هر سوالی در مورد این موضوع در ذهنتان برطرف شود.

فرض کنید در کارخانه ی دوچرخه سازی در پنج مرحله یک دوچرخه کامل خواهد شد و هر کدام از این مراحل یک ساعت طول می‌کشد. پایپ لاین کردن

 پایپ لاین کردن

 پایپ لاین کردن

 پایپ لاین کردن

 پایپ لاین کردن

 

همانطور که از تصاویر بالا مشخص است برای ساخت کامل یک دوچرخه حداقل 5 ساعت زمان لازم داریم پس Throughput و Latency به قرار زیر خواهند بود:

 

  Throughput = 1/5               Latency = 5

 

یک ایده جالب، ما به جای اینکه در هر مرحله پس از اتمام کار بیکار باشیم، نتیجه کار مرحله خودمان را به مرحله بعد می‌دهیم و نتیجه کار مرحله قبل را تحویل می‌گیریم. به تصویر زیر دقت کنید:

 پایپ لاین کردن

نتیجه فوق العاده بهتر شده است، Throughput پنج برابر حالت قبل است اما در خوش بینانه‌ترین حالت Latency تغییری نکرده است. وقتی پایپ لاین می‌کنیم دقیقا همین اتفاق می‌افتد و سرعت بالاتر خواهد رفت.

اما هنوز یک سوال پاسخ داده نشد، چگونه ممکن است Latency بیشتر شود؟ فرض کنید یکی از مراحل بالا به جای 1 ساعت 2 ساعت به طول بینجامد، به تصویر زیر نیز دقت کنید:

 پایپ لاین کردن

Latency = 10، اشتباه است؟ نه، پاسخ دقیقا درست است. اما ما در بالا مشاهده می‌کنیم که از ورودی تا خروجی 6 ساعت طول کشیده است؟! همانطور که می‌دانید عاملی که دیتا را از ورودی حافظه به خروجی حافظه منتقل می‌کند کلاک است، و همانطور که می‌دانیم کلاک نمی‌تواند به نحوی عمل کند که همه مراحل 1 ساعت طول بکشند و فقط یک مرحله خاص 2 ساعت طول بکشد، کلاک عاملی منظم خواهد بود و بر اساس طولانی‌ترین مسیر یا همان مسیر بحرانی تنظیم می‌شود، در نتیجه می‌توان گفت که زمان همه‌ی مسیر‌ها گرچه زمان خودشان کمتر باشد، باید برابر با زمان مسیر بحرانی در نظر گرفته شود. در مثال بالا فقط مرحله سوم 2 ساعت طول کشیده است اما بقیه مراحل نیز مجبور خواهند بود به دلیلی که ذکر کردیم 2 ساعت زمان صرف کنند و عملا 1 ساعت آن را بیکار خواهند بود.

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

با سیسوگ همراه باشید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

15 دیدگاه در “با مفهوم Pipeline بهتر آشنا شوید

  1. Avatar for علی علی گفت:

    سلام
    جالب بود.
    ممنون

    1. Avatar for zeus zeus گفت:

      متشکر دوست عزیز

      1. Avatar for رضا رضا گفت:

        خیلی واضح نبود چون در شکل اول دوچرخه هم مثل شکل دوم، هر کسی خروجی خودش را میده بعدی و خروجی نفر قبلی را به عنوان ورودی میگیره.
        شکل سوم هم اصلا توضیح ندادید چرا Troughput شده ۱/۲. جالب نبود.

  2. Avatar for حميد حميد گفت:

    سلام برادر
    عالی بود
    مفهوم را به زیبایی منتقل کردید
    بسیار ممنونم

    1. Avatar for کامین جلیلی کامین جلیلی گفت:

      سلام حمید جان. سپاس از نظر مثبت شما. خوشحالم که این مقاله توانسته است این مفهوم مهم رو به سادگی و زیبایی به شما منتقل کنه.

  3. Avatar for روح اله احمدی روح اله احمدی گفت:

    ممنون. ساده و کاربردی بود.

    1. Avatar for کامین جلیلی کامین جلیلی گفت:

      سپاس از شما. خوشحالم از اینکه این مقاله برایتان مفید بوده است.

  4. Avatar for حسن حسن گفت:

    خیلی عالی بیان کردید
    ممنون

    1. Avatar for Phoenix Phoenix گفت:

      سپاس از نظر مثبت شما.

  5. Avatar for سردار دلها سردار دلها گفت:

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

    1. Avatar for Phoenix Phoenix گفت:

      سلام دوست نازنینم. شما لطف دارید.

      به قول انیشتین اگر نتوانید چیزی را به سادگی توضیح دهید، پس آن را خیلی خوب نفهمیده‌اید.

  6. Avatar for مهدی مهدی گفت:

    یکی از مجهولات ذهنیم رو جالب و ساده حل کردی ممنون
    قلمتون عالی و روان هست
    این مدل مقالات مفهومی باعث میشه سایت تون از بقیه متمایز بشه
    موفق باشید

    1. Avatar for Phoenix Phoenix گفت:

      سپاس از توجه شما، ما بسیار خرسندیم که توانسته‌ایم موضوعی را شرح دهیم که حتی کوچکترین کمک به شما باشد.

      هدف کلی مقاله این بود که مفهوم Pipline به ساده ترین نحو ممکن و البته به صورت کاربردی توضیح داده شود. و ظاهرا با فیدبکی که از طرف شما دریافت کردیم هدف مقاله به نتیجه انجامید. هدف ما قبل از متمایز بودن ارتقای علم الکترونیک به صورت متن باز در ایران عزیز می‌باشد و یقینا خود این موضوع در طول زمان تمایز ایجاد خواهد کرد.

  7. Avatar for امید امید گفت:

    فوق العاده بود ممنون

    1. Avatar for Phoenix Phoenix گفت:

      سپاس از توجه شما، امیدوارم که مفید بوده باشه براتون.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *