موازی‌سازی در سطح دستورالعمل( ILP )

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

این مقاله در دست ترجمه از ویکی انگلیسی است، لطفاً حذف نشود .!!

موازی‌سازی در سطح دستورالعمل ( ILP ) معیاری برای تعیین این که چه تعداد از دستورالعمل‌ها می‌توانند در یک برنامه کامپیوتری به طور همزمان اجرا شوند نیز است.

ILP را نباید با همزمانی یا همروندی اشتباه گرفت:

  • اجرای موازی ، دنباله‌ای از دستورالعمل‌ها است که متعلق به یک رشته خاص از اجرای یک فرایند است (یک برنامه در حال اجرا با مجموعه‌ای از منابع آن: فضای آدرس ، مجموعه‌ای از ثبات‌ها ، شناسه‌های آن ، حالت آن ، شمارنده برنامه و ...)
  • از طرف دیگر ، همزمانی شامل تخصیص رشته های یک یا فرایندهای مختلف به هسته پردازنده در یک تغییر دقیق یا در موازی سازی واقعی اگر هسته های CPU کافی باشد ، در بهترین حالت یک هسته برای هر رشته قابل اجرا.

دو روش برای موازی‌سازی سطح دستورالعمل وجود دارد: سخت‌افزار و نرم‌افزار .

سطح سخت‌افزار بر پایه موازی‌سازی پویا کار می‌کند ، در حالی که سطح نرم‌افزار بر پایه موازی‌سازی استاتیک یا ایستا کار می‌کند. موازی‌سازی پویا به این معنی است که پردازنده در زمان اجرا تصمیم می‌گیرد که کدام دستورالعمل‌ها را به طور موازی اجرا کند ، در حالی که موازی‌سازی ایستا به این معنی است که کامپایلر تصمیم می‌گیرد که کدام دستورالعمل‌ها را به طور موازی اجرا کند. پردازنده پنتیوم روی توالی دینامیکی اجرای موازی کار می‌کند ، اما پردازنده ایتانیوم روی موازی‌سازی سطح استاتیک یا ایستا کار می کند.

برنامه زیر را در نظر بگیرید:

1  e = a + b
2  f = c + d
3  m = e * f

عملیات 3 به نتایج عملیات‌های 1 و 2 بستگی دارد ، بنابراین تا زمانی که هر دو به اتمام نرسند نمی‌توان آن را محاسبه کرد. با این‌حال ، عملیات 1 و 2 به هیچ عملیات دیگری بستگی ندارند ، بنابراین می توان آن‌ها را به طور همزمان محاسبه کرد. اگر فرض کنیم که هر عملیات می تواند در یک واحد زمان به اتمام برسد ، این سه دستورالعمل را می‌توان در مجموع ، در دو واحد زمان انجام داد ، در نتیجه در یک ILP 3/2 انجام می‌شود.

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

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

تکنیک‌های معماری خرد که برای بهره برداری از ILP استفاده می شود شامل موارد زیر است:

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

مشهور است که ILP توسط کامپایلر و پشتیبانی سخت‌افزاری مورد سوءاستفاده قرار می‌گیرد اما کامپایلر همچنین با بهره از بهینه‌سازی تلفیقی ، ILP ذاتی و ضمنی را در برنامه‌ها به سخت‌افزار ارائه می دهد. برخی از تکنیک‌های بهینه‌سازی برای استخراج ILP موجود در برنامه‌ها شامل برنامه‌ریزی ، تخصیص / ثبت نام / تغییر نام و بهینه سازی دسترسی حافظه است.

معماری‌های جریان داده کلاس دیگری از معماری‌ها هستند که ILP به طور واضح مشخص شده است ، برای مثال اخیر معماری TRIPS را ببینید.

در سال های اخیر ، از تکنیک های ILP برای بهبود عملکرد ، علی‌رغم اختلاف روزافزون بین فرکانس های عملکرد پردازنده و زمان دسترسی به حافظه ، استفاده شده است .(طرح های اولیه ILP مانند IBM System / 360 Model 91 از تکنیک های ILP برای غلبه بر محدودیت های اعمال شده توسط یک فایل ثباتی نسبتاً کوچک استفاده می‌کردند). در حال حاضر ، یک حافظه پنهان گمشده برای حافظه اصلی ، صدها چرخه پردازنده هزینه در بردارد. در حالی که در اصل ، استفاده از ILP برای تحمل و هموارسازی چنین تأخیرهایی از حافظه امکان پذیر است ، هزینه های مربوط به منابع و هزینه های اتلاف برق غیر متناسب هستند. علاوه بر این ، پیچیدگی و اغلب تأخیر در ساختارهای سخت افزاری زمینه ای منجر به کاهش فرکانس عملکرد می شود و باعث کاهش بیشتر مزایا نیز می‌شود. از این رو ، تکنیک های ذکر شده برای جلوگیری از متوقف شدن پردازنده برای داده‌های خارج از تراشه ناکافی هستند. در عوض ، صنعت به سمت بهره برداری از سطوح بالاتر موازی‌سازی حرکت می‌کند که می توان از میان آن‌ها تکنیک هایی مانند چند پردازشی و چند رشته‌ای یا چندریسمانی را نام برد.

جستارهای وابسته[ویرایش]

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

1. ."The History of Computing". mason.gmu.edu. Retrieved 2019-03-24..

2. .Reflections of the Memory Wall.

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