وعده اجرای موازی بدون هزینه‌های پنهان

در نیمه دوم دهه 1990، مهندسان کامپیوتر به این باور رسیدند که سخت‌افزار باید کاملاً از مسئولیت مدیریت موازی‌سازی دستورالعمل‌ها معاف شود. به جای طراحی مدارهای پیچیده تشخیص وابستگی و پیش‌بینی انشعاب، تمرکز به سمت کامپایلر منتقل شد. در این رویکرد که با نام معماری VLIW شناخته می‌شود، کامپایلر دستورالعمل‌های مستقل را در یک کلمهٔ دستورالعمل بسیار طولانی قرار می‌دهد تا سخت‌افزار به‌طور هم‌زمان آن‌ها را اجرا کند. حذف واحدهای برنامه‌ریزی پویا از روی چیپ، وعده کاهش مصرف انرژی، صرفه‌جویی در مساحت ترانزیستور و افزایش سرعت کلاک را می‌داد.

نقطه قوت واقعی در پردازش سیگنال دیجیتال

موفقیت خیره‌کنندهٔ این معماری فقط در یک حوزه به اثبات رسید: پردازشگرهای سیگنال دیجیتال. بار کاری در سیستم‌های DSP به‌شدت الگوریتمی، حلقه‌مانند و قابل پیش‌بینی است. داده‌ها در آرایه‌ها جابجا می‌شوند و وابستگی‌های پیچیده بین دستورات به ندرت دیده می‌شود. کامپایلر می‌تواند بدون درگیر شدن با انشعاب‌های شرطی غیرقابل پیش‌بینی، ده‌ها عملیات ریاضی و انتقال داده را در کنار هم قرار دهد. این هم‌خیزی ذاتی بارهای کاری مالتی‌مدیا، مخابرات و سیستم‌های کنترل صنعتی، باعث شد ویلیو به انتخاب استانداردی برای تولیدکنندگانی مانند تگزاس اینسترومنتز و ST تبدیل شود.

نمودار مقایسه معماری‌های فزاینده و ویلیو در پردازش دستورالعمل

کابوس سازگاری باینری و شکست پروژه EPIC

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

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

پایان راه نهایی: برتری مدیریت پویا

در این میان، معماری‌های فزاینده با اجرای خارج از ترتیب و پیش‌بینی انشعاب پویا، راه‌حل عملی و فوری را برای توسعه‌دهندگان ارائه دادند. پردازنده‌های ایکس86 با پذیرش هزینهٔ مساحت و انرژی، پیچیدگی محاسبات وابستگی را در زمان اجرا مدیریت کردند. نتیجهٔ این رقابت در بازار مشخص بود. معماری ویلیو نتوانست با بلوغ بلندمدت ایکس86 و بعدها با ظهور معماری‌های ریسک کمتر رقابت کند.

ویلیو از میان نرفت. فلسفهٔ برنامه‌ریزی استاتیکِ کامپایلر در معماری‌های اختصاصی حوزه و شتاب‌دهنده‌های هوش مصنوعی زنده ماند. چیپ‌های امروزی که بار کاری خود را روی داده‌های ثابت یا الگوهای از پیش تعریف‌شده اجرا می‌کنند، نسخهٔ تکامل‌یافتهٔ همان ایدهٔ اولیه هستند. آیندهٔ محاسبات به سمت پردازنده‌های همگرا حرکت می‌کند که جایی برای حدس‌وگمان سخت‌افزار باقی نمی‌گذارند.