گزینش دستورالعمل

از ویکی‌پدیا، دانشنامهٔ آزاد

انتخاب دستورالعمل در علوم کامپیوتر یک سطح از پشت صحنه کامپایلر(کارهایی که کامپایلر دور از دید و دسترس کاربر انجام می دهد) است که ارائه سطح میانی خود را به یک IR سطح پایین تبدیل میکند. در یک کامپایلر معمولی ، انتخاب دستورالعمل مقدم بر زمانبندی دستورالعمل و تخصیص ثبات(رجیستر ) است. بنابراین  خروجی IR  دارای یک مجموعه نامحدود از ثبات های کاذب (pseudo) (غالباً به عنوان موقت شناخته می شود) است و ممکن است هنوز - و به طور معمول - منوط به بهینه سازی peephole است . در غیر این صورت ، شباهت زیادی به کد ماشین هدف ، کد بایت یا زبان اسمبلی دارد.

به عنوان مثال ، برای کد IR سطح متوسط دنباله ی زیر

t1 = a
t2 = b
t3 = t1 + t2
a = t3
b = t1

دستورالعمل زیر یک توالی دستورالعمل خوب برای معماری x86 است

MOV EAX, a
XCHG EAX, b
ADD a, EAX

برای بررسی جامع در مورد انتخاب دستورالعمل ، به این لینک مراجعه کنید .

گسترش ماکرو[ویرایش]

ساده ترین روش انتخاب دستورالعمل به عنوان توسعه ماکرو یا تولید کد تفسیری شناخته می شود. یک اپراتور انتخابگر دستورالعمل گسترش ـ ماکرو با تطبیق الگوها با IR سطح متوسط کار می کند. پس از تطبیق ، ماکرو مربوط با استفاده از قسمت همسان IR به عنوان ورودی ، که دستورالعمل های هدف مناسب را (خارج میکند) منتشر می کند، اجرا می شود. گسترش ماکرو را می توان مستقیماً بر روی نمایش متنی IR سطح متوسط انجام داد و یا IR می تواند ابتدا به نمایش گرافیکی تبدیل شود و سپس در عمق اول عبور کند یا اینکه یک (template) الگو با یک یا چند گره مجاور در گراف مطابقت دارد.

مگر اینکه ماشین مورد نظر بسیار ساده نباشد ، گسترش ماکرو در حالت انزوا معمولاً کد ناکارآمد تولید می کند. برای کاهش این محدودیت، کامپایلرهایی که این روش را اعمال می کنند معمولاً آن را با بهینه سازی peephole ترکیب می کنند تا ترکیب دستورالعمل های ساده را با معادل های پیچیده تر جایگزین کنند که عملکرد را افزایش می دهد و اندازه کد را کاهش می دهد.این روش به روش Davidson-Fraser معروف است و در حال حاضر در GCC اعمال می شود .

پوشش گراف[ویرایش]

روش دیگر این است که ابتدا IR سطح متوسط را به نمایش گرافیکی تبدیل کرده و سپس گراف را با استفاده از الگوها پوشش دهیم . الگو یک template است که با بخشی از گراف مطابقت دارد و می تواند با یک دستورالعمل ارائه شده (آماده شده ) توسط ماشین هدف پیاده سازی شود. هدف این است که گراف را به گونه ای پوشش دهیم که هزینه کل الگوهای انتخاب شده به حداقل برسد ، که هزینه به طور معمول تعداد چرخه های اجرای دستورالعمل را نشان می دهد.برای گرافهای  شکل درخت  ، کمترین هزینه پوشش را می توان با استفاده از برنامه نویسی پویا در زمان خطی یافت ،اما برای DAG ها و گرافهای کامل مساله  NP کامل می شود و بنابراین اغلب با استفاده از الگوریتم های حریصانه یا روشهایی از بهینه سازی ترکیبی حل می شود. [۱]

استراتژی کمترین مخرج مشترک[ویرایش]

استراتژی کمترین مخرج مشترک ، یک روش انتخاب دستورالعمل است که در platformهایی که دستورالعمل های اضافی (مکمل)پردازنده برای ایجاد برنامه های اجرایی قابل حمل در طیف وسیعی از رایانه ها وجود دارد ، استفاده می شود. طبق استراتژی کمترین مخرج ، رفتار پیش فرض کامپایلر ایجاد کمترین معماری مشترک است. استفاده از هر  extension پردازنده موجود به طور پیش فرض خاموش است ، مگر اینکه صریحاً توسط سوئیچ های خط فرمان روشن شود.

استفاده از استراتژی کمترین مخرج مشترک به این معنی است که به طور پیش فرض از دستورالعمل ها و قابلیت های تکمیلی پردازنده استفاده نمی شود.

  1. Floch, A.; Wolinski, C.; Kuchcinski, K. (2010). "Combined Scheduling and Instruction Selection for Processors with Reconfigurable Cell Fabric". Proceedings of the 21st International Conference on Application-Specific Architectures and Processors (ASAP'10): 167–174.