با مفهوم Pipeline بهتر آشنا شوید ;
عامل محدود کننده سرعت
در الکترونیک شاید بارها شنیده باشید که حداکثر سرعت این سیستم فلان مقدار است، دقیقا چه عواملی باعث میشوند که حداکثر سرعت یک سیستم محدود شود؟
اگر بخواهیم یک تعریف ساده و مفهومی از سرعت داشته باشیم، میگوییم که سرعت در رابطه است با مقدار زمانی که طول میکشد تا دیتا یا اطلاعات (فرض کنید یک بیت دیتا با مقدار 0 یا 1) از یک نقطه به نقطه دیگر برسد. اما همیشه محدودیتهایی وجود دارند که ما نتوانیم دیتا را سریع منتقل کنیم. اگر شما به عنوان یک فرد آشنا به الکترونیک یا حتی یک فرد معمولی که حداقل یک بار برایش سوال شده که وقتی میگوییم CPU کامپیوترمان 2.4GHZ است، دقیقا به چه معناست؟ به احتمال زیاد مفهوم فرکانس را میدانید.
ما در این مقاله قصد نداریم در مورد تکنولوژی ساخت صحبت کنیم، بلکه صحبت ما در مورد حداکثر فرکانس اعمالی به سیستم خواهد بود و فرض میکنیم که تکنولوژی ساخت و بسیاری از عوامل دیگر به ما این اجازه را دادند که بتوانیم مثلا حداکثر فرکانس 400MHZ را به سیستم اعمال کنیم. اما ما در عمل نمیتوانیم این فرکانس را به سیستم اعمال کنیم! مشکل از کجاست؟ عجله نکنید باید تا پایان این مقاله حوصله به خرج دهید تا متوجه شوید که مشکل از کجاست. در واقع ما با گفتن همه این حرفها قصد داریم مفهوم ( پایپ لاین ) Pipeline را به شما آموزش دهیم، اما قبل از آن باید چندین مفهوم دیگر را نیز بدانید که در زیر به معرفی آن ها خواهیم پرداخت.
Throughput و Latency
به مدت زمانی که طول میکشد تا دیتا از ورودی به خروجی برسد Latency و به تعداد خروجی در واحد زمان Throughput میگویند. فرض کنید یک لوله آب وجود دارد که یک ثانیه طول میکشد تا یک مولکول آب از ابتدا به انتهای آن برسد که همان مفهوم Latency را تداعی میکند و در خروجی در هر یک ثانیه ده مولکول آب خارج میشود و این موضوع نیز مفهوم Throughput را میرساند. حتما توجه دارید که هیچ لزومی ندارد که وقتی میخواهیم در خروجی مولکولهای آب را ببینیم به اندازه زمان Latency صبر کنیم، بلکه فقط برای اولین بار باید به اندازه زمان Latency صبر کرد تا در خروجی مولکول آبی ظاهر گردد ولی پس از آن میتوان با زمان بسیار کمتری مولکولهای آب را در خروجی دید. ما قبل از اینکه هر مولکول آب بخواهد به خروجی برسد، مولکول دیگری را وارد لوله خواهیم کرد. راه حل دیگر این بود که ما صبر کنیم تا زمانی که هر مولکول آب به خروجی رسید مولکول دیگری را وارد لوله کنیم. مقایسه این دو روش ما را به مفهوم Pipeline نزدیکتر میکند.
در سیستمهای دیجیتال ما با استفاده از کلاک (معمولا لبه بالا رونده کلاک) میتوانیم دیتا را از یک حافظه به حافظه دیگر منتقل کنیم و تا زمانی که دیتا به حافظه دوم نرسید ما نمیتوانیم یک لبه کلاک دیگر به سیستم اعمال کنیم. چون در این صورت دیتاها از دست میروند و در نهایت ما یک دیتای غیر صحیح را قرائت خواهیم کرد. اما در یک سیستم الکترونیکی و مشخصا الکترونیک دیجیتال ما تعداد بسیار زیادی حافظه یا رجیستر خواهیم داشت که هر کدام دو به دو با هم یک مسیر تشکیل میدهند و به تاخیری که در طول همین مسیرها اتفاق میافتد Latency میگوییم. در نهایت ما میتوانیم با توجه به طولانیترین مسیر، که مسیر بحرانی نام دارد حداکثر فرکانس را به مدار اعمال کنیم.
فرض کنید ما با توجه به مسیر بحرانی حداکثر فرکانس را اعمال کردیم و خواسته مسئله برآورده نشد چاره چیست؟ چاره این است که در مسیر بحرانی و در بین دو حافظه یک حافظه دیگر قرار بدهیم، حتما حدس میزنید که اگر این حافظه دقیقا در وسط مسیر بحرانی قرار گرفته باشد، مسیر بحرانی جدید نصف شده است و این بدان معناست که ما میتوانیم فرکانس اعمالی را دو برابر کنیم و در واحد زمان میتوانیم تعداد خروجی بیشتری دریافت کنیم که منجر به بهبود Throughput خواهد شد و این یعنی افزایش سرعت.
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 ساعت آن را بیکار خواهند بود.
با سیسوگ همراه باشید.
سلام
جالب بود.
ممنون
متشکر دوست عزیز
خیلی واضح نبود چون در شکل اول دوچرخه هم مثل شکل دوم، هر کسی خروجی خودش را میده بعدی و خروجی نفر قبلی را به عنوان ورودی میگیره.
شکل سوم هم اصلا توضیح ندادید چرا Troughput شده ۱/۲. جالب نبود.
سلام برادر
عالی بود
مفهوم را به زیبایی منتقل کردید
بسیار ممنونم
سلام حمید جان. سپاس از نظر مثبت شما. خوشحالم که این مقاله توانسته است این مفهوم مهم رو به سادگی و زیبایی به شما منتقل کنه.
ممنون. ساده و کاربردی بود.
سپاس از شما. خوشحالم از اینکه این مقاله برایتان مفید بوده است.
خیلی عالی بیان کردید
ممنون
سپاس از نظر مثبت شما.
سلام
مفهوم موضوع اصلی به همراه موضوعات جنبی آن، بسیار زیبا، روان و عمیق بیان شده، یعنی شما در طول این متن تونستید چندین موضوع رو به خوبی تحلیل و بیان کنید و این خودش یک نوع هنره، سپاسگزارم.
سلام دوست نازنینم. شما لطف دارید.
به قول انیشتین اگر نتوانید چیزی را به سادگی توضیح دهید، پس آن را خیلی خوب نفهمیدهاید.
یکی از مجهولات ذهنیم رو جالب و ساده حل کردی ممنون
قلمتون عالی و روان هست
این مدل مقالات مفهومی باعث میشه سایت تون از بقیه متمایز بشه
موفق باشید
سپاس از توجه شما، ما بسیار خرسندیم که توانستهایم موضوعی را شرح دهیم که حتی کوچکترین کمک به شما باشد.
هدف کلی مقاله این بود که مفهوم Pipline به ساده ترین نحو ممکن و البته به صورت کاربردی توضیح داده شود. و ظاهرا با فیدبکی که از طرف شما دریافت کردیم هدف مقاله به نتیجه انجامید. هدف ما قبل از متمایز بودن ارتقای علم الکترونیک به صورت متن باز در ایران عزیز میباشد و یقینا خود این موضوع در طول زمان تمایز ایجاد خواهد کرد.
فوق العاده بود ممنون
سپاس از توجه شما، امیدوارم که مفید بوده باشه براتون.