رایانش موازی صریح دستورالعمل‌ها

رایانش موازی صریح دستور العمل‌ها (Explicitly parallel instruction computing یا EPIC) واژه‌ای است که در سال ۱۹۹۷ توسط اتحاد اچ‌پی و اینتل برای توصیف شیوه‌ای از محاسبات که محققان از اوایل ۱۹۸۰ راجع به آن تحقیق می‌کردند، ابداع شد. به این شیوه معماری‌های مستقل هم گفته می‌شود. این شیوه پایه‌ای برای توسعه معماری Itanium توسط اچ‌پی و اینتل بود، و اچ‌پی بعدها اظهار داشت که EPIC تنها نامی قدیمی برای معماری Itanium بوده‌است.
رایانش موازی صریح دستورالعمل‌ها به ریزپردازنده‌ها اجازه می‌دهد دستورالعمل‌های نرم‌افزار را به جای استفاده از مدارهای پیچیده روی تراشه برای کنترل اجرای موازی، به کمک کامپایلر به صورت موازی اجرا کند. هدف از ابداع آن، ایجاد امکان مقیاس پذیری ساده عملکرد، بدون به‌کارگیری فرکانس کلاک بالاتر بود.
ریشه در VLIW
در سال ۱۹۸۹، محققان اچ‌پی به این نتیجه رسیدند که معماری RISC دارد به محدودیت یک دستورالعمل در هر سیکل فرکانس می‌رسد. آن‌ها آغاز به تحقیق درباره معماری جدید کردند که بعدها EPIC نامیده شد.
پایه این پژوهش VLIW بود. در VLIW چند عملیات درون هر دستورالعمل کد می‌شوند و سپس توسط واحدهای اجرای متعدد پردازش می‌شوند.
یکی از اهداف EPIC این بود که پیچیدگی زمان‌بندی دستور العمل‌ها را از سخت‌افزار پردازنده به کامپایلر نرم‌افزار انتقال دهد، که می‌تواند این زمان‌بندی را به صورت استاتیک انجام دهد (با کمک ردیابی اطلاعات بازخورد). این امر باعث حذف ضرورت وجود مدارات زمان‌بندی پیچیده در پردازنده می‌شود و بدین ترتیب فضا و توان را برای کاربردهای دیگر، از جمله منابع اجرایی بیشتر، آزاد می‌گذارد. هدف دیگری که به همان اندازه اهمیت داشت این بود که از موازی‌سازی در سطح دستورالعمل (ILP) بهره‌برداری بیشتری شود. این امر با به‌کارگیری کامپایلر برای یافتن و استفاده بیشتر از فرصت‌هایی افزون بر قبل برای اجرای موازی انجام می‌شود.
VLIW (دست کم نسخه‌های اولیه آن) کمبودهای زیادی دارد که مانع گسترش پیدا کردن آن می‌شوند:
مجموعه دستورالعمل‌های VLIW در پیاده‌سازی‌های مختلف با نسخه‌های قدیمی سازگار نیست. وقتی پیاده‌سازی‌های گسترده‌تر (با واحدهای اجرایی بیشتر) ساخته می‌شوند، مجموعه دستورالعمل آن‌ها با ماشین‌های قدیمی‌تر و کوچک‌تر سازگار نیست.
پاسخ دستور بار کردن در یک حافظه سلسله مراتبی که شامل حافظه نهان پردازنده یا DRAM باشد، تاخیر قطعی ندارد. این مسئله برنامه‌ریزی ایستا توسط کامپایلر برای دستورهای بار کردن را بسیار دشوار می‌کند.
معماری EPIC از معماری VLIW مشتق شده‌است و در عین حال مفاهیم زیادی از معماری سوپراسکالر را دربردارد.
فراتر از VLIW
معماری EPIC برای جبران کاستی‌های VLIW ویژگی‌های بسیاری دارد:
هر دسته چندتایی از دستورات نرم‌افزاری یک bundle نامیده می‌شوند. هر کدام از این باندل‌ها یک بیت توقف دارد که مشخص می‌کند آیا دسته‌های بعدی به این دسته از دستورالعمل‌ها وابسته‌اند یا خیر. با وجود این ویژگی می‌توان نسخه‌های بعدی را طوری پیاده‌سازی کرد که بتوانند چند باندل را به صورت موازی اجرا کنند. اطلاعات وابستگی توسط کامپایلر محاسبه می‌شوند و نیازی نیست که سخت‌افزار رویه بررسی وابستگی عملوند را انجام دهد.
یک دستور پیش‌واکشی نرم‌افزاری به عنوان نوعی از پیش‌واکشی داده به کار می‌رود. این پیش‌واکشی احتمال موفقیت در مراجعه به حافظه نهان برای دستورات بار کردن را افزایش می‌دهد و می‌تواند درجه محلی بودن زمانی را که در سطوح مختلف حافظه نهان مورد نیاز است، تعیین کند.
از یک دستور بار کردن حدسی برای بار کردن داده به صورت حدسی، پیش از این که مشخص شود استفاده خواهد شد (با عبور از وابستگی‌های کنترلی)، یا قبل از استفاده تغییر خواهد کرد (با عبور از وابستگی‌های داده‌ای) استفاده می‌شود.
یک دستور بررسی بار کردن به بار کردن حدسی کمک می‌کند تا بررسی کند که آیا آن بار کردن حدسی به دستور ذخیره‌سازی جلوتری وابسته بوده‌است یا خیر، و بدین ترتیب مشخص می‌شود که باید دوبار بار کردن انجام شود یا نه.
معماری EPIC مجموعه‌ای از مفاهیم معماری را نیز برای افزایش موازی‌سازی در سطح دستورالعمل دربردارد:
از اجرای پیش‌بینی شده برای کاهش رخ دادن پرش و افزایش اجرای حدسی دستورالعمل‌ها استفاده می‌شود. در این ویژگی حالات پرش به ثبات‌های پیش‌بینی تبدیل می‌شوند که برای از بین بردن نتایج اجرای دستورالعمل‌هایی به کار می‌رود که پرش به آن‌ها انجام نشده‌است.
استفاده از استثناهای با تاخیر، با به‌کارگیری NaT برای ثبات‌های همه منظوره، این امکان را می‌دهد که اجرای حدسی درگیر استثناهای قابل گذر نشود.
فایل‌های ثبات بسیار بزرگ از ضرورت تغییر نام ثبات‌ها جلوگیری می‌کنند.
دستورالعمل‌های پرش چند مسیره با ترکیب چند پرش که یکی از آن‌ها اجرا خواهد شد، پیش‌بینی پرش را بهبود می‌بخشند.
معماری Itanium تغییر نام ثبات و فایل‌های ثبات چرخشی را نیز به این موارد افزوده‌است، که ابزاری مفید برای خط لوله نرم‌افزاری می‌باشد زیرا اجبار انجام دستی باز کردن حلقه‌ها و تغییر نام ثبات‌ها را از بین می‌برد.