کلمه دستورالعمل بسیار طولانی
کلمه دستورالعملی بسیار طولانی (به انگلیسی: Very long instruction word) (اختصاری VLIW) به معماری واحد پردازنده مرکزی اشاره میکند که برای بهرهبرداری از فواید توازی در سطح دستورالعمل (ILP) طراحی شدهاست. پردازشگری که هر دستورالعمل را بعد از دیگری اجرا میکند (معماری غیر خط لولهای دارد)، ممکن است منابع پردازش را به نحو فریبندهای استفاده کند که این امر میتواند باعث عملکرد ضعیف شود. کارایی میتواند با اجرای همزمان زیر گامهای مختلف از دنبالههای دستورها (Pipelining) یا حتی اجرای دستورها چندتایی به شکل کاملاً همزمان درست مانند معماریهای Superscalar، بهبود یابد. برای بهبود بیشتر میتوان دستورالعملها را با نظمی متفاوت از آنچه در برنامه نشان داده شدهاند اجرا کرد. به این عمل اجرای خارج از نظم گفته میشود.
در اغلب پیادهسازیها این سه تکنیک هزینهای دربردارند و آن افزایش پیچیده گی سختافزار است. قبل از اجرای هر دستور به صورت موازی پردازشگر باید بررسی کند که بین دستورالعملها وابستگی وجود نداشته باشد. برای مثال؛ نتیجه دستورالعمل اول به عنوان ورودی دستورالعمل دوم استفاده شدهاست. واضح است که چنین دستورالعملهایی نمیتوانند در یک زمان اجرا شوند و همچنین دستورالعمل دوم نمیتواند مثل اولی اجرا شود. پردازشگرهای خارج از نظم مدرن سختافزاری که وظیفه برنامهریزی دستورالعملها و مشخص نمودن وابستگی بین آنها را بر عهده دارند، افزایش دادهاند.
از طرف دیگر VLIW اعمال موازی را بر اساس برنامهای ثابت که در زمان کامپایل برنامه معین شده اجرا میکند. از آنها که مشخص کردند نظم اجرای اعمال به وسیلهٔ کامپایلر انجام میشود، پردازشگر به سختافزار برنامهریزی که سه تکنیک معرفی شده در بالا به آن احتیاج دارند، نیازی ندارند. در نتیجه CPUهای VLIW توان محاسباتی مهم با پیچیدگی سختافزاری کمتر (اما پیچیدگی کامپایلر بیشتر) از چیزی که بیشتر به پردازنده Superscalar نسبت داده میشود ارائه میدهد.
درست مثل هر روش معماری نوین؛ ایده تا جایی که اجازه دهد کارایی دارد. در حقیقت تعدادی از دستورالعملهای خاص منظوره موجود که باعث تسهیل اعمال پیچیده میشود. اگر کامپایلرها نتوانند ساختارهای کد سنج مربوطه را بشناسند و نتوانند که هدف را که معمولاً از پیشنهادهای پیشرفته CPU استفاده میکند نمایش دهند، بلا استفاده میشوند؛ بنابراین برنامه نویسان باید بتواند الگوریتمهای خودشان را به شیوهای که کار برای کامپایلرها آسان تر شود، ارائه دهند.
طراحی
در طراحیهای Superscalar تعدادی از واحدهای اجرائی برای مجموعه دستورالعملها غیرقابل رویت است. هر دستورالعمل تنها یک عمل را رمزگذاری میکند. برای اغلب طرحهای Superscalar؛ بنای دستورالعمل ۳۲ بیت یا کمتر است.VLIW از نوع چند دستورالعمل، چند دادهاست. (MIMD)
دستورالعمل VLIW چندی عمل را رمزگذاری میکند. در موارد خاص یک دستورالعمل حداقل یک عمل را برای هر واحد اجرایی رمزگذاری میکند. برای مثال؛ اگر یک وسیله VLIW پنج واحد اجرایی داشته باشد، یک دستورالعمل VLIW برای آن وسیله میتواند پنج فیلد عمل داشته باشد که هر فیلد معین میکند که کدام عمل باید در واحد اجرایی مربوطه اجرا شود. برای سازگار سازی این فیلدها دستورالعملهای VLIW معمولاً حداقل ۶۴ بیت پهنا داشته و در برخی معماریها بیشتر از این نیز پهنا دارند. برای مثال؛ مثالی که در ادامه آورده شده یک دستورالعمل SHARC میباشد. در یک دوره؛ این دستورالعمل ضرب همین شناور، یک جمع همین شناور و دوبارگذاری افزایش خودکار را انجام میدهد. همه اینها در یک دستورالعمل ۴۸ بیتی جور شدهاند.
f12=f۰*f4, f8=f8+f۱۲، f0=dm(i0,m۳)، f4=pm(i8,m۹)
از روزهای آغازین معماری کامپیوتر برخی CPUها بسیاری واحدهای منطقی محاسباتی (ALU) برای اجرای موازی به معماری اضافه کردهاند. CPUهای Superscalar برای اینکه تصمیم بگیرند کدام اعمال میتوانند به شکل موازی اجرا شوند از سختافزار استفاده میکنند.CPUهای VLIW برای اینک په تصمیم بگیرند کدام اعمال میتوانند به شکل موازی اجرا شوند از نرمافزار (کامپایلر) استفاده میکنند. از آنجایی که پیچیدگی برنامهریزی دستورالعمل بر دوش کامپایلر گذاشته شده، پیچیدگی سختافزار اساساً میتواند کاسته شود.
هنگامی که نتیجه یک دستورالعمل با شکل اجرای موازی به عنوان ورودی یک شاخه مورد استفاده قرار گیرد، اغلب مشکل مشابهی اتفاق میافتد.CPUهای مدرن قبل از اینکه محاسبات کامل شود حدس میزنند که کدام شاخه انتخاب خواهد شد. این عمل بدین منظور انجام میشود که CPUها بتوانند دستورالعملها را برای شاخه بارگذاری کنند یا حتی به شکل گمانی شروع به محاسبه کنند. اگر CPU اشتباه حدس بزند همه دستورالعملها و متن آنها لازم است که پاکسازی شود و دستورالعملهای درست جایگزین شوند که باعث اتلاف زمان میشود.
این امر منجر به منطقگیری دستورالعمل پیچیدهای میشود که تلاش میکند به درستی حدس بزند و سادگی طرحهای اصلی (RISC) را نیز تخریب میکند.VLIW این منطق را ندارد و بنابراین مصرف توان این منطق، کمبودهای احتمالی طراحی و بقیه ویژگیهای منفی آن را ندارد.
در یک VLIW کامپایلر برای جهت یابی یک شاخه، از اطلاعات کاوشی یا شرح حال استفاده میکند. این ویژگی این امکان را به VLIW میدهد تا حرکت کرده و اعمال را قبل از انتخاب شاخه به شکل گمانی پیش برنامهریزی کند. بدین شکل که شبیهترین راه را در شاخه علامت گذاری میکند. اگر شاخه به راهی غیرمنتظره برود، کامپایلر قبلاً کد جبرانی را تولید کرده تا نتایج بر اساس گمان کنار گذاشته شود تا معناشناسی برنامه حفظ شود.
کلمه VLIWمیتواند مخفف کلمه دستورالعمل با طول متغیر (Variable Length Instruction Word) نیز باشد. مجموعه دستورالعمل یک CPU که برای بارگذاری یا کپی یک تعداد مقدار حرف به حرف از یک کد ماشین بر روی یک RAM روی برد یا دیکد روی CPUهای با مدت بالاتر طراحی شدهاست.
تاریخچه
واژه VLIW و خود ایده معماری VLIW توسط جاش فیشر در تحقیقات گروهی در دانشگاه Yale در اوایل ۱۹۸۰ ابداع شد. گسترش اولیه برنامهریزی ردیابی به عنوان مجموعهای از تکنیکها برای VLIW وقتی او از دانشگاه نیویورک فارغالتحصیل بود گسترش یافت. قبل از VLIW، ایده کلی واحدهای تابعی بین برنامهریزی و توازی سطح دستورالعمل در نرمافزار در گسترش ریز کد افقی بنیان نهاده شد. ابداعات فیشر پیرامون گسترش کامپایلری بود که بتواند ریز کد افقی را از کد نوشته شده توسط برنامه نویسان در زبانهای برنامهنویسی معمولی تمیز دهد. او متوجه شد برای داشتن عملکرد بهتر، رسیدن به یک ماشین کامل لازم است، توازی را در یک بلاک عمومی پیادهسازی کند. وی تکنیکهای برنامهریزی ناحیهای را برای پیادهسازی توازی در بین بلاکهای پایه گسترش داد. برنامهریزی، راه چنین تکنیکی است و ابتدا با مسیرهای بلاک پایهای که شبیه تر هستند کار میکند. بدین صورت که کد جبرانی را برای سر و کار داشتن با حرکات بر اساس حدس در برنامه قرار میدهند، برنامهریزی دومین مسیر شبیه و… تا زمانی که برنامهریزی به پایان برسد.
ایده دوم فیشر از این ایده نشات گرفت که معماری CPU هدف، باید برای کامپایل منطقی باشد. کامپایلر و معماری VLIW باید با یکدیگر طراحی شوند. بخشی از این ایده از آنجا الهام گرفت که فیشر در دانشگاه Yale برای کامپایل سیستمهای ممیز شناور دچار مشکلاتی شده بود. این سیستمهای معماری مجموعه دستورالعملهای پیچیدهای داشتند (CISC) که دستورالعمل آغازین را از دستورالعملهایی که نتایج را ذخیره کردهاند که الگوریتمهای برنامهریزی خیلی پیچیدهای نیاز دارند، جدا کردند. فیشر مجموعهای از قواعد را که ویژگیهای طراحی یک VLIW مناسب مثل پایپلاینهای خود تخلیه کن، فایلهای رجیستری چند پورته و معماری حافظه ارائه داد. این قواعد نوشتن کدهای سریع را برای کامپایلها آسان تر میکند. اولین کامپایلر VLIW در مقطع Ph.D به وسیلهٔ جان الیس زیر نظر جان فیشر تشریح شد، کامپایلرBulldog نامگذاری شد. جان روتنبرگ الگوریتمهای مهمی معین را برای برنامهریزی ارائه داد.
فیشر در سال ۱۹۸۴ دانشگاهYale را برای پیدا کردن کمپانی برای شروع ترک کرد. شرکت Multiflow نام گرفت که با همکاری جان روتنبرگ تأسیس شد. Multiflow سری TRACE از سوپر کامپیوترهای کوچک VLIW را ساخت، که اولین ماشین آنها در سال ۱۹۸۷ به حساب میآمد. VLIW این شرکت میتوانست ۲۸ عمل را در یک دستورالعمل جای دهد. سیستم TRACE در بسته MSI/LSI/VLSI بکار گرفته شد. این تکنیک وقتی به جمع کردن تمام اجزای مدار پردازش گر به روی یک Chip به صرفه تر شناخته شد از چشم بنیانگذاران افتاد. برای Multiflow زود بود که بتواند جلوی این موج را بگیرد در حالی که معماریهای Chip,CPUهای چند کاره را پشتیبانی میکرد. کمپانیهای نیمه هادی ارزش تکنولوژی Multiflow را در این زمینه دریافتند و متعاقباً کامپایلر و معماری آن را تحت لیسانس خود درآوردند.
پیادهسازی
Cydrome شرکتی بود که با استفاده از تکنولوژی ECL در اواخر ۱۹۸۰ پردازندههای عددی VLIW را تولید میکرد. این شرکت، مانند Multiflow، بعد از چند سال منحل شد.
یکی از دارندگان امتیاز تکنولوژی Multiflow, Hewlett-Packard است، که Josh Fisher پس از انحلال Multiflow به آن پیوست. همچنین Bob Rau محقق Cydrome، پس از شکست آن به HP پیوست. این دو نفر تحقیقات معماری کامپیوتر را در Hewlett-Packard در طول سال ۱۹۹۰ هدایت میکردند.
همچنین، حدوداً در همان سال (۱۹۸۹–۱۹۹۰)، اینتل VLIW را در Intel i۸۶۰ پیادهسازی کردکه اولین ریز پردازنده ۶۴ بیتی آنها بود، i۸۶۰ همچنین اولین پردازندهای بود که VLIW را روی یک چیپ تنها پیادهسازی کرد. این پردازنده میتوانست در هر دو حالت RISC ساده و VLIW عمل کند:
«در اوایل ۱۹۹۰، اینتل ریزپردازنده RISC با نام i۸۶۰ را معرفی کرد. این چیپ ساده دو حالت عملیاتی داشت: یک حالت اسکالر و یک حالت VLIW. در حالت VLIW پردازنده همیشه دو دستورالعمل را واکشی میکرد و فرض میکرد که یکی صحیح و دیگری اعشاری (ممیز شناور) باشد.»
حالت VLIW در i۸۶۰، بهطور گسترده در برنامههای جاسازی شده DSP استفاده میشد. در حالت VLIW, i۸۶۰ قابلیت پشتیبانی عملکرد اعشاری را در بازه ۲۰ تا ۴۰ با دقت مضاعف MFLOPS داشت.
CPUهای VLIW معمولاً از چندین واحد تابعی شبیه RISC ساخته میشدند که بهطور مستقل عمل میکردند. VLIWهای معاصر عموماً ۴ تا ۸ واحد اصلی تابعی دارند. کامپایلرها رشته دستورالعمل اولیه را برای CPUهای VLIW تقریباً شبیه همان روشی که آنها برای CPUهای قدیمی انجام میدادند، تولید میکنند. آنها یک رشته از دستورالعملها را بر طبق اولویت آنها زمانبندی میکنند. در این فرایند، دستورالعمل مستقل میتوانند بهطور موازی، زمانبندی شوند. چون VLIWها عموماً دستورالعملها را موازی با یک دستورالعمل طولانیتر زمانبندی میکنند، این نتایج در یک opcode باز هم بزرگتر (خیلی طولانی = Very Long) برای مشخص کردن این که چه چیز در یک چرخهٔ معین اجرا میشود، قرار میگیرد.
مثالهای معاصر CPUهای VLIW شامل پردازندههای Trimedia ساخته شده توسط NXP, SHARP DSP ساخته شده توسط قطعات آنالوگ، خانوادهٔ C6000 DSP ساخته شده توسط Texas Instruments و خانوادهٔ STMicroelectronics ST۲۰۰ بر پایهٔ معماری Lx (که آن هم توسط Josh Fisher طراحی شده)، میشود.
این CPUهای VLIW اصولاً به عنوان پردازندههای جاسازی شده برای وسایل الکترونیکی مصرفکننده موفق هستند. ویژگیهای VLIW همچنین به هستههای پردازندهٔ قابل پیکربندی برای طراحیهای SoC، اضافه شدهاست. کامپایلر Xtensa C/C++ میتواند بهطور آزادانه دستورالعملهای ۳۲ یا ۶۴ بیتی FLIX را با دستورالعملهای تک عملیاتی RISC پردازندههای Xtensa مخلوط کند.
غیر از پردازندههای جاسازی شده، Intel Itanium IA-64 EPIC به عنوان تنها مثالی که بهطور گسترده از معماری CPUهای VLIW استفاده میشود، قابل اشارهاست. به هر حال معماری EPIC گاهی اوقات از یک معماری مطلق VLIW متمایز میشود.
سازگاری وارونه
وقتی که تکنولوژی سیلیکون مجاز شد تا برای پیادهسازی گستردهتر (با واحدهای اجرایی بیش تر) ساخته شود، برنامههای کامپایل شده برای تولید اولیه نمیتوانند روی پیادهسازیهای گستر ده تر اجرا شوند.
معماری Itanium اینتل، (در بین دیگر معماریها) مشکل سازگاری وارونه را با یک مکانیزم خیلی عادی حل کرد. از آن جایی که تعداد ترانزیستورهای روی یک چیپ در حال افزایش است، اشکالات VLIW کاهش یافتهاست. معماری VLIW مخصوصاً در قسمت جاسازی شده، توسط شرکتهای متعددی در دسترس هستند، مانند FR-V از Fujitsu و BSP۱۵/۱۶ از Pixelworks و ST۲۳۱ از STMicroelectronics و Trimedia از NXP و CEVA-X DSP از CEVA و Jazz DSP از Improve systems و Silicon Hive. معماری Texas Instruments TMS320 DSP Line، رشد پیدا کرده و در نتیجه در خانوادهٔ C6xxx، در برابر خانوادهٔ قدیمی تر C5xxx، بسیار بیشتر شبیه یک VLIW شدهاست.
منابع
مشارکتکنندگان ویکیپدیا، "VLIW"، ویکیپدیای en، دانشنامهٔ آزاد (بازیابی در ۲۰۱۱).