اجرای پیش بینانه
اجرای پیش بینانه یک تکنیک بهینهسازی برنامه است که در آن یک سیستم کامپیوتری وظایفی را انجام میدهد که ممکن است نیازی به آن نباشد. محاسبه قبل از اینکه مشخص شود واقعاً به آن نیاز است یا خیر انجام میشود تا از تأخیری که باید با انجام کار پس از مشخص شدن نیاز به آن ایجاد شود، جلوگیری شود. اگر معلوم شود که در نهایت کار مورد نیاز نبودهاست، اکثر تغییرات ایجاد شده توسط کار برگردانده میشود و نتایج نادیده گرفته میشوند.
هدف این است که در صورت وجود منابع سیستم اضافی، همروندی بیشتری ارائه شود. این رویکرد در زمینههای مختلفی از جمله پیشبینی پرشی در پردازندههای خط لوله، پیشبینی ارزش برای بهرهبرداری از موقعیت ارزش، واکشی از قبل حافظه و فایلها، و کنترل همروندی خوشبینانه در سیستمهای پایگاه داده استفاده میشود.[۱]
اجرای پیش بینانه با استفاده از پردازندههای چند رشتهای یک مورد خاص از اجرای پیش بینانه است.
بررسی اجمالی
[ویرایش]ریزپردازندههای خط لوله مدرن از اجرای پیش بینانه برای کاهش هزینه دستورالعملهای شاخه مشروط با استفاده از طرحهایی استفاده میکنند که مسیر اجرای یک برنامه را بر اساس تاریخچه اجرای شاخهها پیش بینی میکنند. به منظور بهبود عملکرد و استفاده از منابع کامپیوتری، دستورالعملها را میتوان در زمانی برنامهریزی کرد که هنوز مشخص نشدهاست که دستورالعملها باید قبل از یک رشته اجرا شوند.
انواع
[ویرایش]محاسبات حدسی به مفهوم قبلی مرتبط بود.
اعدام مشتاقانه (همچنین به عنوان اجرای اوراکل شناخته میشود)
[ویرایش]اجرای مشتاق شکلی از اجرای پیش بینانه است که در آن هر دو طرف شاخه مشروط اجرا میشوند. با این حال، نتایج تنها در صورتی تأیید میشوند که نتیجه درست باشد. با منابع نامحدود، اجرای مشتاق در تئوری عملکردی مشابه پیشبینی پرش کامل را ارائه میدهد. با منابع محدود، اجرای مشتاقانه باید با دقت به کار گرفته شود، زیرا تعداد منابع مورد نیاز به طور تصاعدی با هر سطح از شاخه اجرا شده افزایش مییابد.
اجرای پیشبینی کننده
[ویرایش]اجرای پیشبینیکننده شکلی از اجرای پیش بینانه است که در آن برخی از نتایج پیشبینی میشود و اجرا در مسیر پیشبینیشده پیش میرود تا زمانی که نتیجه واقعی مشخص شود. اگر پیشبینی درست باشد، اجرای پیشبینیشده مجاز به انجام است. با این حال، اگر پیش بینی نادرستی وجود داشته باشد، اجرا باید باز شده و دوباره اجرا شود. اشکال رایج این مدل شامل پیشبینیکنندههای شاخه و پیشبینی وابستگی حافظه است. یک فرم کلی از این حالت گاهی اوقات به عنوان پیش بینی ارزش نامیده میشود.
مفاهیم مرتبط
[ویرایش]اجرای تنبل
[ویرایش]اجرای تنبل وارونهٔ اجرای مشتاقانه است و شامل حدس و گمان نمیشود. ادغام اجرای گمانهزنی در پیادهسازی زبان برنامهنویسی Haskell، یک زبان که در دستهٔ زبانهای تنبل قرار میگیرد، یک موضوع تحقیقاتی در حال حاضر است. Eager Haskell، گونهای از این زبان، بر اساس ایده اجرای حدس و گمان طراحی شدهاست. یک پایاننامه دکترا در سال ۲۰۰۳ باعث شد GHC از نوعی اجرای گمانه زنی با مکانیسم abort حمایت کند تا در صورت انتخاب بدی به نام اجرای خوشبینانه از آن صرف نظر کند.[۲] اما خیلی پیچیده به نظر میرسید.[۳]
آسیبپذیریهای امنیتی
[ویرایش]از سال ۲۰۱۷، یک سری از آسیبپذیریهای امنیتی در پیادهسازی اجرای گمانهزنی بر روی معماریهای پردازنده رایج یافته شد که بهطور مؤثری افزایش دسترسی را آسان میکرد.
این آسیبپذیریها شامل:
- Foreshadow
- Meltdown
- Microarchitectural Data Sampling
- Spectre
- SPOILER
- پکمن
جستارهای وابسته
[ویرایش]- پیشبینی شاخه
- اجرای خارج از دستور
- Slipstream (علوم کامپیوتر)
- چند رشتهای حدس و گمان
- اشکال امنیتی سختافزار
- آسیبپذیریهای CPU اجرای گذرا
منابع
[ویرایش]- ↑ Lazy and Speculative Execution Butler Lampson Microsoft Research OPODIS, Bordeaux, France 12 December 2006
- ↑ Jones, Simon Peyton; Ennals, Robert (1 August 2003). "Optimistic Evaluation: a fast evaluation strategy for non-strict programs". Retrieved 15 May 2019 – via www.microsoft.com.
{{cite journal}}
: Cite journal requires|journal=
(help) - ↑ https://mail.haskell.org/pipermail/haskell/2006-August/018424.html