پیش‌نویس:پردازنده‌های فوق‌اسکالر

پردازنده ابررقمی (Superscalar) 
'''این مقاله در حال ترجمه از ویکی انگلیسی است لطفا حذف نشود.'''

یک پردازنده ابررقمی (یا پردازنده چندصادره) نوعی [[واحد پردازش مرکزی|CPU]] است که شکلی از موازی‌سازی به نام موازی‌سازی در سطح دستورالعمل را در داخل یک پردازنده واحد پیاده‌سازی می‌کند. در مقابل [[پردازنده اسکالر]] که حداکثر یک دستورالعمل واحد را در هر چرخه ساعت اجرا می‌کند، یک پردازنده ابررقمی می‌تواند با ارسال همزمان چندین دستورالعمل به واحدهای اجرایی مختلف پردازنده، بیش از یک دستورالعمل را در طول یک چرخه ساعت اجرا کند یا شروع به اجرای آن‌ها کند. از این رو توان عملیاتی (تعداد دستورالعمل‌هایی که می‌توان در یک واحد زمانی اجرا کرد) بیشتری نسبت به آنچه در یک نرخ ساعت معین ممکن است فراهم می‌کند.

هر واحد اجرایی یک پردازنده جداگانه (یا یک هسته در صورتی که پردازنده چند هسته‌ای باشد) نیست، بلکه یک منبع اجرایی در داخل یک CPU واحد مانند [[واحد منطق حسابی]] است.

در حالی که یک CPU ابررقمی معمولاً خط‌لوله‌ای نیز هست، اجرای ابررقمی و [[خط‌لوله دستورالعمل|خط‌لوله‌ای]] تکنیک‌های مجزای افزایش کارایی محسوب می‌شوند. اولی (ابررقمی) چندین دستورالعمل را با استفاده از چندین واحد اجرایی به صورت موازی اجرا می‌کند، در حالی که دومی (خط‌لوله‌ای) چندین دستورالعمل را در همان واحد اجرایی به صورت موازی با تقسیم واحد اجرایی به مراحل مختلف اجرا می‌کند.

تکنیک ابررقمی به طور سنتی با چند ویژگی شناسایی‌کننده مرتبط است:

 دستورالعمل‌ها از یک جریان دستورالعمل متوالی صادر می‌شوند
 CPU به صورت پویا وابستگی‌های داده‌ای بین دستورالعمل‌ها را در زمان اجرا بررسی می‌کند (در مقابل بررسی نرم‌افزاری در زمان کامپایل)
 CPU می‌تواند چندین دستورالعمل را در هر چرخه ساعت اجرا کند

 تاریخچه 
[[CDC 6600]] سیمور کری از سال ۱۹۶۴، در حالی که قادر به صدور چندین دستورالعمل در هر چرخه نبود، اغلب به عنوان تأثیرگذار اولیه بر پردازنده‌های ابررقمی مدرن به دلیل توانایی‌اش در اجرای همزمان دستورالعمل‌ها از طریق واحدهای عملکردی متعدد ذکر می‌شود. [[سیستم IBM/360 مدل ۹۱]] از سال ۱۹۶۷ تأثیرگذار اولیه دیگری بود که اجرای خارج از ترتیب را معرفی کرد و [[الگوریتم توماسولو]] را پیشگام شد.

[[Intel i960CA]] (1989)، [[AMD 29000|AMD 29050]] (1990)، و [[Motorola MC88110]] (1991) اولین ریزپردازنده‌های ابررقمی تک‌تراشه تجاری بودند. ریزپردازنده‌های RISC مانند اینها اولین‌هایی بودند که اجرای ابررقمی داشتند، زیرا معماری‌های RISC ترانزیستورها و فضای تراشه را آزاد می‌کنند که می‌توان از آن‌ها برای گنجاندن چندین واحد اجرایی استفاده کرد.

به جز CPUهای مورد استفاده در کاربردهای کم‌توان، سیستم‌های جاسازی‌شده و دستگاه‌های باتری‌دار، اساساً تمام CPUهای همه‌منظوره توسعه‌یافته از حدود سال ۱۹۹۸ به بعد ابررقمی هستند.

[[پنتیوم P5]] اولین پردازنده ابررقمی x86 بود.

 از اسکالر به ابررقمی 
ساده‌ترین پردازنده‌ها پردازنده‌های اسکالر هستند. هر دستورالعمل اجراشده توسط یک پردازنده اسکالر معمولاً یک یا دو آیتم داده را در یک زمان دستکاری می‌کند. در مقابل، هر دستورالعمل اجراشده توسط یک [[پردازنده برداری]] به طور همزمان روی بسیاری از آیتم‌های داده عمل می‌کند. یک پردازنده ابررقمی ترکیبی از این دو است: هر دستورالعمل یک آیتم داده پردازش می‌کند، اما چندین واحد اجرایی در هر CPU وجود دارد که بنابراین چندین دستورالعمل می‌توانند آیتم‌های داده جداگانه را به صورت همزمان پردازش کنند.

طراحی CPU ابررقمی بر بهبود دقت پخش‌کننده دستورالعمل (Instruction Dispatcher) و اجازه دادن به آن برای نگه داشتن چندین واحد اجرایی در استفاده دائمی تأکید می‌کند. این موضوع با افزایش تعداد واحدها اهمیت فزاینده‌ای پیدا کرده است. در حالی که CPUهای اولیه ابررقمی دو ALU و یک FPU داشتند، طراحی‌های بعدی مانند [[PowerPC 970]] شامل چهار ALU، دو FPU و دو واحد SIMD است.

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

 محدودیت‌ها 
بهبود کارایی موجود از تکنیک‌های ابررقمی توسط سه حوزه کلیدی محدود می‌شود:

 درجه موازی‌سازی ذاتی در جریان دستورالعمل (دستورالعمل‌هایی که به منابع محاسباتی یکسانی از CPU نیاز دارند)
 پیچیدگی و هزینه زمانی منطق بررسی وابستگی و مدار [[تغییر نام ثبات]]
 پردازش دستورالعمل‌های شاخه

برنامه‌های اجرایی دودویی موجود دارای درجات متفاوتی از موازی‌سازی ذاتی هستند. در برخی موارد دستورالعمل‌ها به یکدیگر وابسته نیستند و می‌توانند به صورت همزمان اجرا شوند. در موارد دیگر به هم وابسته‌اند: یک دستورالعمل بر منابع یا نتایج دیگری تأثیر می‌گذارد.

برای مثال دستورالعمل‌های a = b + c و d = e + f می‌توانند به صورت موازی اجرا شوند زیرا هیچ‌یک از نتایج به محاسبات دیگری وابسته نیست. با این حال، a = b + c و b = e + f ممکن است نتوانند به صورت موازی اجرا شوند.

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

 جایگزین‌ها 
این محدودیت‌ها در مجموع تحقیقات را به سمت تغییرات معماری جایگزین سوق می‌دهند مانند:

 کلمه دستورالعمل بسیار بلند ([[VLIW]]): وظیفه سنگین بررسی وابستگی توسط منطق سخت‌افزاری در زمان اجرا حذف شده و به کامپایلر واگذار می‌شود.
 محاسبات دستورالعمل موازی صریح ([[EPIC]]): مانند VLIW با دستورالعمل‌های پیش‌واکشی حافظه پنهان اضافی است.
 چندرشتگی همزمان ([[SMT]]): تکنیکی برای بهبود کارایی کلی پردازنده‌های ابررقمی است. SMT اجازه می‌دهد چندین رشته اجرایی مستقل از منابع ارائه‌شده توسط معماری‌های پردازنده مدرن بهتر استفاده کنند.
 پردازش چند هسته‌ای ([[Multi-core]])

پردازنده‌های ابررقمی از پردازنده‌های چند هسته‌ای متفاوتند زیرا واحدهای اجرایی متعدد، پردازنده‌های کامل نیستند. یک پردازنده واحد از واحدهای اجرایی ریزدانه‌تری مانند ALU، ضرب‌کننده صحیح، جابه‌جاگر صحیح، FPU و غیره تشکیل شده است.

این تکنیک‌های جایگزین مانعة‌الجمع نیستند - می‌توانند (و اغلب هستند) در یک پردازنده واحد ترکیب شوند. بنابراین یک CPU چند هسته‌ای ممکن است وجود داشته باشد که هر هسته یک پردازنده مستقل حاوی چندین خط‌لوله موازی است، که هر خط‌لوله ابررقمی باشد.

 منابع 

 Smith, James E.; Sohi, Gurindar S. (December 1995). "The Microarchitecture of Superscalar Processors". ''Proceedings of the IEEE''. 83 (12): 1609.
 Mike Johnson, ''Superscalar Microprocessor Design'', Prentice-Hall, 1991.

[[:رده:معماری کامپیوتر]] [[:رده:پردازنده‌های ابررقمی]] [[:رده:پردازش موازی]]