سوپراسکالر

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

'این پروسسورها همزمان بیش از یک دستور العمل را اجرا می‌کنند؛ به عبارت دیگر پایپ لاین دستوری در این پروسسور به بهترین شکل ممکن استفاده می‌شود. که نمونه ایی از سوپر اسکالر درجه ۳ را در شکل زیر میبینیم

دستور اول OF۱ OPRF۱ EXE۱ ST۱
دستور دوم OF۱ OPRF۲ EXE۲ ST۲
دستور سوم OF۱ OPRF۳ EXE۳ ST۳
دستور چهارم OF۱ OPRF۱ EXE۱ ST۱
دستور پنجم OF۱ OPRF۲ EXE۲ ST۲
دستور ششم OF۱ OPRF۳ EXE۳ ST۳
دستور هفتم OF۱ OPRF۱ EXE۱ ST۱
دستور هشتم OF۱ OPRF۲ EXE۲ ST۲
دستور نهم OF۱ OPRF۳ EXE۳ ST۳

-معماری سوپراسکالر یک فرم از موازی سازی را به نام "موازی سازی در سطح دستور" با یک تک پردازنده پیاده سازی می کند. موازی سازی در سطح دستور با استفاده از چندین پایپ لاین مستقل تامین می شود، در واقع هر بار چند دستور(در شکل فوق ۳ دستور) به صورت موازی پردازش می شوند. از این رو اجازه می دهند توان عملیاتی سریع تر از دیگر حالات ممکن در یک کلاک باشد.
-یک پردازشگر سوپراسکالر با توزیع همزمان دستورالعمل های متفاوت به واحدهای عملیاتی اضافی (redundant)، پردازش بیش از یک دستور العمل را انجام می دهد. هر واحد عملیاتی یک هسته جداگانه ندارد ولی یک منبع اجرایی جداگانه مانند ALU، شیفت دهنده بیتی یا یک ضرب کننده را دارد.
-در طبقه بندی فلین(Flynn) یک پردازشگر سوپر اسکالر به عنوان یک پردازشگر MIMD طبقه بندی شده است.(دستورالعمل چندگانه، داده چندگانه)
-در حالی که CPU سوپراسکالر به طور معمول پایپ لاین هم است ولی معماری پایپ لاین و سوپر اسکالر تکنیک های متفاوتی برای افزایش کارایی دارند. که تکنیک های سوپر اسکالر معمولاً شامل مشخصه های زیر است.

  • دستورالعمل ها از یک جریان ترتیبی دستوری ناشی می شوند.
  • وابستگی بین دستورالعمل ها به صورت سخت افزاری در زمان اجرا(run time)دائماً چک می شود.
  • CPU چندین دستورالعمل را در یک سیکل کلاک می پذیرد

تاریخچه[ویرایش]

CDC ۶۶۰۰های Seymour Cray از سال ۱۹۶۵ اغلب به عنوان اولین طرح سوپر اسکالر مورد توجه قرار گرفند.
ریز پردازنده های (Intel i۹۶۰ CA (۱۹۸۸و سری های AMD ۲۹۰۰۰، ۲۹۰۵۰ نخستین ریز پردازنده های سوپر اسکالر تک تراشه ایی(single chip) تجاری بودند. CPU های RISK مانند این ها نخستین ریز پردازنده هایی بودند که از ایده سوپر اسکالر استفاده کرد، برای اینکه طرح RISK منجر به یک هسته ساده (simple core) گردد. بنابراین اجازه در برگرفتن واحد های چند عملکردی (مانند ALUها) بر یک CPU در طراحی محدود به قواعد زمانی را می دهد.(این پاسخ پرسشی بود که چرا طرح های RISK در دهه ی ۱۹۸۰ و ۱۹۹۰ از طرح های CISC سریع تر بودند.)
به استثنای CPU هایی که در کاربرد کم مصرف قرار می گرفتند و سیستم های جاسازی شده (embedded systems) و دستگاه های باتری (Battery-powered) اساساً تمامی CPU های همه منظوره که از حدود سال ۱۹۸۸ توسعه یافت همگی سوپر اسکالر بودند.
P۵ Pentium نخستین پردازشگر سوپر اسکالر X۸۶ بود. Nx۵۸۶، P۶ Pentium Pro و AMD K۵ جزو اولین طرح هایی بودند که دستور های آسنکرون X۸۶ را به صورت dynamic microcode (مانند سری های قبلی micro-op) برای اجرای واقعی بر یک microarchitecture سوپر اسکالر، رمز گشایی(decode) می کردند. این امر راه را برای زمان بندی دینامیک بافر شدن بخشی از دستور ها باز نمود. و موارد موازی سازی بیشتری را در مقایسه با متد های صلبی که در P۵ Pentium مورد استفاده قرار می گرفت قادر ساخت تا استخراج (extract) شوند. ضمناً مسئله speculative execution را ساده ساخت و موجب بالاتر رفتن فرکانس کلاک در مقایسه با طرح هایی چون Cyrix ۶x۸۶ گردید.

از اسکالر به سوپراسکالر[ویرایش]

ساده ترین پردازشگرها، اسکالر پردازشگرها (scalar processor) می باشند. هر دستورالعملی با یک پردازشگر اسکالر اجرا می شود نوعاً یک یا دو آیتم اطلاعات را در یک زمان اداره می کند. در مقابل هر دستورالعملی که به وسیله یک پردازشگر برداری (Vector processor) اجرا می شود در یک زمان بر روی تعداد زیادی آیتم اطلاعاتی کار می کند. یک پردازشکر سوپر اسکالر از یک ترکیب چندتایی، مرتب شده است.
هر دستورالعمل یک آیتم اطلاعاتی را پردازش می کند. اما واحد های چند عملکردی اضافی با هر CPU وجود دارد. از این رو چندین دستورالعمل می توانند آیتم های اطلاعاتی جداگانه ایی را همزمان پردازش کنند.
طرح CPU سوپر اسکالر بر افزایش دقت توزیع دستورالعمل ها تاکید دارد و همچنین اجازه می دهد تا واحد های چند عملکردی در هر زمانی قابل استفاده باشند. این امر به طور فزاینده ایی از زمانی که تعداد واحد ها(Units) زیاد شده، مهم شده است. در هنگامی که CPUهای سوپر اسکالر اولیه تنها دو ALU و یک FPU داشتند، یک طرح مدرن مانند PowerPC ۹۷۰ شامل چهار ALU، دو FPU و دو واحد SIMD بود. هنگامیکه توزیع کننده واحد ها را با دستورالعمل ها تغذیه می کند اگر با مشکل روبه رو شود، عملکرد سیستم صدمه خواهد دید.
یک پردازشگر سوپر اسکالر معمولاً اجرای یک دستورالعمل اضافی را متحمل می شود اما فقط پردازش چندین دستورالعمل به صورت همزمان، یک معماری سوپر اسکالر را نمی‌سازد تا زمانی که، معماری های پایپ لاین، چند پردازندگی یا چند هسته ایی، آن را بدست بیاورند اما با یک متد متفاوت.
در یک CPU سوپر اسکالر پخش کننده، دستور العمل ها را از روی حافظه می خواند و تصمیم می گیرد که کدامیک می توانند به صورت موازی انجام گیرند، سپس آن ها را به واحد های عملیاتی اضافی که در کنار CPU های منفرد هستند می فرستند. علاوه براین، پردازشگرهای سوپر اسکالر می توانند داشتن چندین پایپ لاین موازی را پیش بینی نماید که هر یک از دستورالعمل های پردازشی آن، از یک نخ (Thread)مجزا باشد.

محدودیت ها[ویرایش]

بالا بردن کارایی که از طریق تکنیک های سوپر اسکالر بدست می آید به ۳ چیز محدود می شود:

  1. درجه ذاتی موازی سازی در جریان دستورالعمل ها. به سطح موازی سازی دستورالعمل ها محدود می شود.
  2. پیچیدگی و زمان صرف شده ایی که توزیع کننده برای چک کردن وابستگی ها دارد.
  3. انشعاب های دستورالعمل در حال پردازش

برنامه های باینری قابل اجرایی وجود دارند که درجه ذاتی موازی سازی آن ها با هم متفاوت است. در بعضی موارد دستورالعمل ها به یک دیگر وابسته نمی‌باشند و می توانند به طور همزمان اجرا شوند. در موارد دیگر آن ها وابستگی داخلی دارند: اثرات یک دستورالعمل در منابع یا نتیجه آن در دیگر منابع. دستورالعمل های ;a = b + c; ، d = e + f می توانند موازی با هم اجرا شوند و هیچ کدام از نتایج وابسته به محاسبه ی دیگری نیست. اما دستورالعمل های ;a = b + c; ، b = e + f ممکن است به طور موازی قابل اجرا نباشند.

وقتی که تعداد دستورالعمل های موازی افزایش پیدا می کند. هزینه چک کردن وابستگی به سرعت افزایش می یابد، و این موضوع با نیاز به چک کردن وابستگی در زمان اجرا و در کلاک CPU، تشدید می شود. این هزینه ها شامل گیت های منطقی اضافی مورد نیاز برای چک کردن و زمان تاخیری که به خاطر این گیت ها به وجو می آید می باشد. تحقیقات نشان می دهد که تعداد گیت ها در بعضی موارد به n^k گیت و تاخیر نیز به k^2 \log n رسیده است که n تعداد دستورالعمل هایی است که جزو دستور العمل های پردازشی می باشند و k تعداد دستورالعمل هایی که به صورت همزمان توزیع شده اند.
اگر چه جریان دستورالعمل ها ممکن است شامل هیچ وابستگی داخلی نباشد، با این حال یک CPU سوپر اسکالر باید این موضوع را چک کند زیرا هیچ تضمینی وجود ندارد. و یا به طور دیگر در تشخیص یک وابستگی، خطا حاصل شود، نتایج غیر صحیح می باشد.
در این جا یک محدودیت عملی روی تعداد دستورالعمل هایی که به صورت موازی قابل توزیع هستند داریم. در حالی که روند پیشرفت اجازه خواهد داد واحد های عملیاتی را بیشتر کنیم، باری که از چک کردن وابستگی دستورالعمل هاست به سرعت زیاد می شود، که سوپر اسکالر دست یافتنی را به ۵ با ۶ دستورالعمل هایی که به طور همزمان توزیع شوند محدود می کند.

مباحث مرتبط[ویرایش]

در مجموع این محدودیت ها تحقیق را به سمت تغییرات دیگر معماری ها مانند VLIW ، EPIC ، SMT و همچنین چند نخی و پردازش چند هسته ایی سوق می دهد.
با VLIW وظیفه سنگین چک کردن وابستگی، در زمان اجرا به وسیله سخت افزار برداشته شده و به کامپایلر محول می گردد.EPIC همانند VLIW است، با حافظه ی نهان اضافی برای پیش واکشی دستورالعملها

چند نخی همزمان با نام اختصاری SMT، تکنیکی است جهت ارتقای بازده کلی CPU های سوپر اسکالر. SMT به نخ های مستقل چندگانه اجرایی این امکان را می دهد تا بهتر مورد استفاده منابع تولید شده توسط معماری های مدرن پردازشگرها قرار گیرند.
سوپر اسکالر با پردازشگرهای چند هسته ایی که واحد های عملیاتی اضافی در تمام پردازشگر های نیستند متفاوت است. یک تک پردازنده محاسبات خود را به وسیله واحد های عملیاتی مانند ALU و شیفت دهنده و ضرب کننده و ممیز شناور و غیره انجام می دهد. ممکن است نسخه های چندگانه ایی از هر واحد عملیاتی وجود داشته باشد که اجرای تعداد زیادی دستورالعمل را به طور موازی ممکن سازد. که این با پردازشگرهای چند هسته ایی که همزمان دستورالعمل ها را از چند نخی (هر نخ برای یک هسته)گرفته و پردازش می کند متفاوت است و همچنین این با CPU های پایپ لاین، که دستورالعمل های چندگانه می توانند همزمان در مراحل مختلف اجرا باشند نیز تفاوت دارد.
تکنیک های پیشنهادی متنوع صرفاً انحصاری نیستند. آن ها می توانند در یک تک پردازنده با هم ترکیب شوند. بنابراین یک CPU چند هسته ایی جایی که هر هسته، یک پردازشگر مستقل شامل موازی سازی پایپ لاین که هر پایپ لاین سوپر اسکالر باشد، محتمل وامری شدنی است وهمچنین تعداد زیادی از پردازنده ها هم دارای قابلیت برداری (Vector) باشد.

منابع[ویرایش]

مشارکت‌کنندگان ویکی‌پدیا، «Superscalar»، ویکی‌پدیای en، دانشنامهٔ آزاد (بازیابی در ۲۰۱۱).