پاراللیسم در سطح دستوری
یکی از ساده ترین شیوه های مورد استفاده برای انجام افزایش پاراللیسم این است که اولین مراحل fetching و decoding
دستوری را پیش از اینکه اجرای دستور قبلی تمام شود، شروع کنیم
بقیه در ادامه مطلب
پاراللیسم در سطح دستوری
یکی از ساده ترین شیوه های مورد استفاده برای انجام افزایش پاراللیسم این است که اولین مراحل fetching و decoding
دستوری را پیش از اینکه اجرای دستور قبلی تمام شود، شروع کنیم. این روش ساده ترین فرم یک تکنیک بنام instruction pipelining است و در تقریباً تمام سی پی یو های عمومی جدید استفاده می شود. پایپ لاینینگ، با شکستن مسیر دستوری
و تبدیل ان به مراحل جداگانه، باعث می شود تا در هر زمان بیش از یک دستور اجرا شود. این جدا کردن را می توان با خط
مونتاژ مقایسه کرد که در آن یک دستور در هر مرحله کاملتر می شود تا اینکه کامل شود.
با این وجود pipelining ممکن است موقعیتی را بوجود آورد که در آن یافته های عمل قبلی برای کامل کردن عمل بعدی
لازم است. این وضعیت را معمولاً آشفتگی ناشی از وابستگی می نامند. برای جلوگیری از این وضعیت، باید توجه بیشتری شود
تا در صورت رخ دادن این شرایط بخشی از خط تولید دستوری را به تاخیر اندازیم. بطور طبیعی برآورده کردن این شرایط نیازمند
مدار هایی اضافه است، بنابراین پردازنده های pipelined پیچیده تر از انواع ساب اسکیلر هستند البته نه خیلی چشمگیر.
یک پردازنده pipelined می تواند بسیار نزدیک به حد اسکیلر شود، در این شرایط تنها مانع موجود stall ها )دستوری که
بیش از یک چرخه ساعتی در یک مرحله طول می کشد( هستند. ارتقاء بیشتر در مورد ایده instruction pipelining منجر
به ایجاد روشی شده است که زمان خالی اجزای سی پی یو را حتی به میزان بیشتری کاهش می دهد. طراحی هایی که گفته
می شود سوپراسکیلر هستند شامل یک خط ایجاد) pipeline ( دستور طولانی و واحدهای اجرایی مشابه متعدد هستند. در یک
خط ایجاد سوپراسکیلر دستورهای متعددی خوانده شده و به dispatcher )توزیع گر( می روند، توزیع گر تصمیم می گیرد که
آیا دستورات مذکور می توانند بطور موازی )همزمان( اجرا شوند یا نه. در صورتی که پاسخ مثبت باشد، دستورات مذکور به
واحدهای اجرایی موجود ارسال ) dispatch ( می شوند. این کار باعث می شود تا چندین دستور به طور همزمان اجرا شوند. به
طور کلی هر قدر یک سی پی یو ی سوپراسکیلر بتواند دستورات بیشتری را بطور همزمان به واحدهای اجرایی در حال انتظار
ارسال ) dispatch ( کند، دستورات بیشتری در یک سیکل مشخص اجرا می شوند.
بیشترین دشواری در طراحی یک معماری سوپراسکیلر سی پی یو مربوط به ساخت یک dispatcher مؤثر است. دیسپچر باید
قادر باشد تا به سرعت و بدون اشتباه مشخص کند که آیا دستورات می توانند بطور موازی اجرا شوند و آنها را به شیوه ای ارسال
( dispatch ( کند تا بیشترین واحدهای اجرایی ممکن را از بیکاری خارج کند. این امر نیازمند این است که خط ایجاد دستوری
حداکثر اوقات ممکن پر باشد و معماری های سوپراسکیلر را نیازمند مقادیر چشمگیری از کش سی پی یو) cache ( می کند.
همچنین در این شرایط تکنیک های پیشگیری از خطری نظیر پیش بینی شاخه ای ) branch prediction (، اجرای حدسی
( speculative execution ( و اجرای خارج از نوبت ) out of order execution ( برای حفظ سطوح بالای عملکرد ضروری
هستند. با تلاش برای پیش بینی اینکه یک دستور شرطی کدام شاخه )یا مسیر( را انتخاب می کند، سی پی یو می تواند تعداد
زمان هایی را که تمام خط تولید ) pipeline ( باید منتظر بماند تا یک دستور شرطی کامل شود به حداقل برساند. اجرای حدسی
با اجرای بخش هایی از کد که ممکن است بعد از کامل شدن یک عمل شرطی نیاز نباشند، معمولاً موجب افزایش متوسط
عملکرد می شود. اجرای خارج از نوبت ترتیبی را که دستورات اجرا می شوند تا حدی دوباره چینی می کند تا تاخیر ناشی از
وابستگی اطلاعات را کاهش دهد. همچنین در موارد یک دستور -چند دیتا Single Instructions Multiple Data زمانیکه اطلاعات زیادی از یک نوع باید پردازش شود، پردازنده های جدید می توانند بخش هایی از خط ایجاد مذکور را غیر
فعال کنند، در این حالت زمانیکه یک دستور چند بار اجرا می شود، سی پی یو می تواند از فاز های fetch و decode صرفه
نظر کند و بنابراین در موقعیت های خاصی )خصوصاً در موتور های برنامه ای بسیار مونوتون نظیر نرم افزار ایجاد ویدیو و پردازش
عکس( به میزان زیادی عملکرد افزایش می یابد.
در مواردی که فقط بخشی از سی پی یو سوپراسکیلر است، بخشی که سوپراسکیلر نیست دچار جبران عملکردی ناشی از وقفه
های زمانبندی می شود. Intel P5 Pentium اینتل پنتیوم 5 ( دو تا واحد محاسبه و منطق ) ALU سوپراسکیلر داشت که
می توانست یک دستور را به ازای یک clock بپذیرد اما FPU ی آن نمی توانست یک دستور را به ازای یک clock بپذیرد؛
بنابراین P5 سوپراسکیلر از نوع integer است اما از نوع floating point ممیز شناور نیست. جانشین اینتل برای معماری
P5 ، نوع P6 بود که قابلیت های سوپراسکیلر را به ویژگی های floating point آن اضافه می کرد و بنابراین موجب افزایش
چشمگیری در عملکرد دستوری floating point می شد.
هم طراحی pipeline ساده و هم طراحی سوپر اسکیلر موجب می شوند تا یک پردازنده منفرد با سرعتی بیش از یک دستور
به ازای یک چرخه IPC دستورات را اجرا کند و بدین وسیله ILP ی سی پی یو را افزایش می دهند. بیشتر طراحی های
جدید سی پی یو حداقل تا حدی سوپراسکیلر هستند و تقریباً تمام سی پی یو های عمومی که در دهه اخیر طراحی شده اند
سوپراسکیلر هستند. در سال های اخیر بخشی از تاکید در طراحی کامپیوترهای ILP بالا از حوزه سخت افزاری سی پی یو
خارج شده و در اینترفیس نرم افزاری، یا همان ISA متمرکز شده است. استراتژی کلمه دستوری خیلی بلند VLIW موجب
می شود تا بخشی از ILP بطور مستقیم توسط نرمافزار درگیر شود و بدین وسیله میزان کاری را که سی پی یو باید انجام دهد
تا ILP را افزایش دهد )بوست کند( و پیچیدگی طراحی مذکور را کاهش دهد، کم می کند.
برچسب:
نویسنده: نگار حسینپور