Спекулятивне виконанняСпекулятивне виконання — (від лат. specio - погляд[1]) це метод прискорення обчислень, коли комп'ютер маючи виконує обчислення, не чекаючи чи буде виконана умова при яких ці обчислення будуть необхідні. Якщо виявиться що робота не була потрібна то зміни скасовуються та результати ігноруються. Такий підхід використовується в різних областях, у тому числі прогнозування розгалуження в конвеєрах процесорів, упереджувальна вибірка з пам'яті та файлів, і оптимістичне керування паралелізмом у системах баз даних.[2][3][4] Мета полягає в тому, щоб за умови наявності додаткових ресурсів використовувати їх, застосовувати паралелізм, робити декілька різновидів обчислень, які залежать від умови яка на даний момент невідома, проте не витрачати реальний час на очікування допоки умова стане відома. ОглядПід терміном «динамічне (спекулятивне) виконання» мається на увазі наступна сукупність можливостей:[джерело?]
Сучасні конвеєрні мікропроцесори використовують спекулятивне виконання, щоб знизити вартість команд умовного переходу з використанням схем, що передбачають шлях виконання програми. З метою підвищення ефективності та використання ресурсів комп'ютера, інструкції можуть бути заплановані в той час, коли ще не була визначено, що інструкції повинні бути виконані[5]. У оптимізації компіляторів для декількох систем обробки, спекулятивне виконання передбачає дозвільний процесор, що виконує код в наступному блоці процесора, якщо немає залежності від коду, який може бути запущений на інших процесорах. Перевага цієї схеми є скорочення часу відгуку для окремих процесорів і системи в цілому[6]. Компілятор обмежується видачею спекулятивної команди виконання, так як вона вимагає апаратного забезпечення за для буферизації. Без апаратної підтримки, компілятор може видати тільки спекулятивні інструкції, які не мають ніяких побічних ефектів у разі неправильної спекуляції[7]:16. Нетерпляче обчисленняНетерпляче обчислення (англ. eager evaluation) являє собою форму спекулятивного виконання, де виконуються обидві сторони умовної гілки; проте, залишається лише результат тієї гілки, чий предикат стає вірним. Наприклад ми перевіряємо Гіпотезу Коллатца на процесорі що має декілька блоків для обчислень. Якщо наступне число парне то ми його ділимо на 2, якщо непарне то множимо на 3 та додаємо 1. В один такт ми можемо одночасно робити ці арифметичні операції, але для перевірки на парність нам необхідно віддати результат на окремий блок, на що витратиться додатковий такт. Тому при нетерплячому обчисленні один блок ділить число послідовності на 2, другий множить на 3 та додає 1, а окремий блок визначає його парність, і в залежності від парності забирає результат з першого або другого блоку. Звісно обидва блоки навантажені роботою, проте ми виграємо в часі. З необмеженими ресурсами, нетерпляче обчислення (також відоме як пророкування виконання) могло б забезпечити таку ж продуктивність що і передбачення переходів. З обмеженими ресурсами нетерпляче обчислення слід використовувати обережно, тому що кількість необхідних ресурсів зростає з кожним етапом.[8]:148—150 Передбачуване виконанняПередбачуване виконання це різновид спекулятивного виконання, за якого процесор прогнозує результат певної операції та починає виконувати інструкції на основі цього прогнозу. Якщо прогноз виявляється вірним, виконані інструкції зберігаються. Але якщо прогноз виявиться помилковий, процесору доведеться скасовувати виконані інструкції та починати все знову. В загальній формі це називається передбачення значень, та використовується в модулі передбачення переходів та передбаченні залежності пам'яті[en]. Ліниві обчисленняЦе частина архітектури мови програмування, та моделі обчислень, а не процесора. З точки зору спекулятивного виконання це протилежна стратегія. Ліниві обчислення, або виклик за потребою — це стратегія обчислення при якій обчислення виразу не виконується до того моменту, поки значення виразу не стане потрібним. УразливостіПочинаючи з 2017 року було знайдено декілька уразливостей, які вдалось реалізувати завдяки реалізації спекулятивного виконання в процесорах. Примітки
Посилання
|