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

0
1882
Pipeline
Pipeline

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

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

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

Throughput و Latency

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

Pipeline
Pipeline

 

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

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

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

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

 

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

Throughput = ۱/۵                Latency = ۵

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

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

 

نتیجه فوق العاده بهتر شده‌است، Throughput پنج برابر حالت‌قبل است اما در خوش‌بینانه‌ترین حالت Latency تغییری نکرده‌است. وقتی پایپ لاین می‌کنیم دقیقا همین اتفاق می‌افتد و سرعت بالاتر خواهد رفت. اما هنوز یک سوال پاسخ داده نشد، چگونه ممکن‌است Latency بیشتر شود؟ فرض‌کنید یکی‌از مراحل بالا به جای ۱ساعت ۲ساعت به طول بینجامد، به تصویر زیر نیز دقت‌کنید:

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

 

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

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

با ما همراه باشید.

 

منبع: یبیوگ

مطلب قبلیقسمت سوم: ابزارهای آلتیوم دیزاینر
مطلب بعدیآموزش FPGA قسمت دوم: چرا و چگونه FPGA را انتخاب کنیم؟

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید