کلمه دستورالعمل بسیار طولانی

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

کلمه دستورالعملی بسیار طولانی (VLIW) به معماری واحد پردازنده مرکزی اشاره می‌کند که برای بهره برداری از فواید توازی در سطح دستورالعمل (ILP) طراحی شده‌است. پردازشگری که هر دستورالعمل را بعد از دیگری اجرا می‌کند (معماری غیر خط لوله‌ای دارد)، ممکن است منابع پردازش را به نحو فریبنده‌ای استفاده کند که این امر می‌تواد باعث عملکرد ضعیف شود. کارایی می‌تواند با اجرای همزمان زیر گامهای مختلف از دنباله‌های دستورها (Pipelining) یا حتی اجرای دستورها چندتائی به شکل کاملاً همزما درست ماند معماری‌های Superscalar، بهبود یابد. برای بهبود بیشتر می‌توان دستورالعملها را با نظمی متفاوت از آنچه در برنامه نشان داده شده‌اند اجرا کرد. به این عمل اجرای خارج از نظم گفته می‌شود.

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

از طرف دیگر VLIW اعمال موازی را بر اساس برنامه‌ای ثابت که در زمان کامپایل برنامه معین شده اجرا می‌کند. از آنها که مشخص کردند نظم اجرای اعمال بوسیله کامپایلر انجام می‌شود، پردازشگر به سخت افزار برنامه ریزی که سه تکنیک معرفی شده در بالا به آن احتیاج دارند، نیازی ندارند. در نتیجه CPU‌های VLIW توان محاسباتی مهم با پیچیدگی سخت افزاری کمتر (اما پیچیدگی کامپایلر بیشتر) از چیزی که بیشتر به پردازنده Superscalar نسبت داده می‌شود ارائه می‌دهد.

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

طراحی[ویرایش]

در طراحی‌های Superscalar تعدادی از واحدهای اجرائی برای مجموعه دستورالعمل‌ها غیر قابل رویت است. هر دستورالعمل تنها یک عمل را رمزگذاری می‌کند. برای اغلب طرح‌های Superscalar؛ بنای دستورالعمل ۳۲ بیت یا کمتر است.VLIW از نوع چند دستورالعمل، چند داده‌است.(MIMD)

دستورالعمل VLIW چندی عمل را رمزگذاری می‌کند. در موارد خاص یک دستورالعمل حداقل یک عمل را برای هر واحد اجرایی رمزگذاری می‌کند. برای مثال؛ اگر یک وسیله VLIW پنج واحد اجرایی داشته باشد، یک دستورالعمل VLIW برای آن وسیله می‌تواند پنج فیلد عمل داشته باشد که هر فیلد معین می‌کند که کدام عمل باید در واحد اجرایی مربوطه اجرا شود. برای سازگار سازی این فیلدها دستورالعملهای VLIW معمولاً حداقل ۶۴ بیت پهنا داشته و در برخی معماری‌ها بیشتر از این نیز پهنا دارند. برای مثال؛ مثالی که در ادامه آورده شده یک دستورالعمل SHARC می‌باشد. در یک دوره؛ این دستورالعمل ضرب همین شناور، یک جمع همین شناور و دوبارگذاری افزایش خودکار را انجام می‌دهد. همه اینها در یک دستورالعمل ۴۸ بیتی جور شده‌اند.

f۱۲=f۰*f۴، f۸=f۸+f۱۲، f۰=dm(i۰،m۳)، f۴=pm(i۸،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 ساخته شده توسط قطعات آنالوگ، خانوادهٔ C۶۰۰۰ DSP ساخته شده توسط Texas Instruments و خانوادهٔ STMicroelectronics ST۲۰۰ بر پایهٔ معماری Lx (که آن هم توسط Josh Fisher طراحی شده)، می‌شود.

این CPUهای VLIW اصولا به عنوان پردازنده‌های جاسازی شده برای وسایل الکترونیکی مصرف کننده موفق هستند. ویژگی‌های VLIW همچنین به هسته‌های پردازندهٔ قابل پیکربندی برای طراحی‌های SoC، اضافه شده‌است. کامپایلر Xtensa C/C++ می‌تواند به طور آزادانه دستورالعمل‌های ۳۲ یا ۶۴ بیتی FLIX را با دستورالعمل‌های تک عملیاتی RISC پردازنده‌های Xtensa مخلوط کند.

غیر از پردازنده‌های جاسازی شده، Intel Itanium IA-۶۴ 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 TMS۳۲۰ DSP Line، رشد پیدا کرده و در نتیجه در خانوادهٔ C۶xxx، در برابر خانوادهٔ قدیمی تر C۵xxx، بسیار بیشتر شبیه یک VLIW شده‌است.

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

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

پیوند به بیرون[ویرایش]