ня - незважаючи на те, що значення, лічену в регістр, не знадобилося б ніякої іншої операції.
Існують різні варіанти інструкцій передвибірки - зчитування з пам'яті в L2-кеш, зчитування з пам'яті чи з L2-кеша в L1-кеш, зчитування блоку для його подальшої модифікації, або для одноразового використання. У процесорі P - 4 реалізована предвибірки тільки в L2-кеш.
Автоматична апаратна предвибірки являє собою механізм, який розпізнає послідовні (чи інші регулярні) звернення в пам'ять і намагається виробляти випереджальну підкачування даних. У деяких процесорах цей механізм вміє працювати як у прямому, так і в зворотному напрямку (тобто як за зростанням, так і по зменшенням адрес в пам'яті) і може розпізнавати декілька незалежних послідовностей адрес, забезпечуючи тим самим передвибірки декількох потоків даних.
Найбільш досконалі механізми програмної та апаратної передвибірки реалізовані в новому процесорі P8 (Intel Core).
Ще один механізм роботи з пам'яттю пов'язаний з особливостями завантаження і вивантаження в умовах позачергового виконання. У зв'язку з тим, що операція може вважатися коректно виконаної тільки до моменту відходу у відставку і не раніше, ніж буде відставлені всі попередні операції, фізичний запис в кеші або в пам'ять не може бути проведена до цього моменту. З цієї причини всі результати вивантаження (записи) в пам'ять накопичуються в спеціальному буфері впорядкування звернень до пам'яті MOB (Memory Order Buffer). Фізична запис даних з цього буфера в кеш проводиться тільки в момент відставки відповідної інструкції. Якщо операція завантаження (читання) з пам'яті адресує елемент даних, який опинився в цьому буфері, то він зчитується безпосередньо з буфера.
В умовах позачергового виконання може вийти, що операція завантаження виявиться готовою виконання раніше, ніж виконається операція вивантаження, що записує дані в пам'ять за тією ж адресою. Також може виявитися, що адреса даних в якої-небудь операції вивантаження ще не обчислений, і є ризик, що розглянута операція завантаження могла б звернутися якраз до цих даних за цією адресою. Щоб уникнути проблем такого роду, в процесорах зазвичай реалізують консервативні схеми управління операціями поводження в пам'ять, із забороною на виконання будь-яких ризикованих операцій, які могли б призвести до читання некоректних даних. Однак такі консервативні схеми можуть перешкодити позачергового виконанню «безпечних» операцій і привести до зниження продуктивності.
На практиці ймовірність конфліктів за адресами такого роду зазвичай невелика. Тому за наявності в процесорі механізму відновлення у разі виконання некоректної операції звернення в пам'ять можна було б відмовитися від заборони на виконання ризикованих операцій. У процесорі P8 (Intel Core) такий механізм реалізований - він ідентичний механізму відновлення після неправильно передвіщеного переходу, коли в момент відставки інструкції переходу проводиться остаточна перевірка правильності передбачення.
Крім механізму відновлення, в процесорі P8 є також додатковий «провісник», призначення якого полягає в зниженні ймовірності виконання ризикованої операції завантаження з пам'яті. Якщо такий завантаженні передує операція вивантаження з не обчисленим (на даний момент) адресою пам'яті, проводиться пророкування конфлікту за адресами на основі інформації про попередньому поведе?? ії цієї операції завантаження. Якщо передвіщається відсутність конфлікту, операція завантаження запускається на виконання. Якщо в момент відставки цієї інструкції з'ясується, що пророкування було невірним, і стався конфлікт за адресами з операцією вивантаження, то операція завантаження буде скасована разом з усіма подальшими операціями, і буде вироблено її повторне виконання. Описаний механізм отримав назву «усунення неоднозначностей в пам'яті» (Memory Disambiguation).
На закінчення розглянемо ще один мікроархітектурнимі механізм, який пов'язаний з обчисленням адрес для звернень в пам'ять - роботу з апаратним стеком. Адреса вершини апаратного стека зберігається в регістрі ESP. Зміна цього регістра може відбуватися як неявно, при приміщенні або видалення даних з стека (інструкції PUSH і POP) або при вході або виході в підпрограму (інструкції CALL і RET), так і явно, у звичайній целочисленной інструкції. Традиційно інструкції, що використовують регістр ESP і неявно змінюють його, перетворювалися декодером в два Мопа, один з яких виробляв змістовне дію, а інший - виконував операцію складання або віднімання для регістра ESP.
У процесорах PM, P-M2 і P8 введено спеціальний механізм під назвою «Dedicated Stack Engine». Цей механізм відстежує (на етапі декодування інструкцій) поточне положення вершини стека і замінює в породжуваних МОПах адресацію даних по «мінливого» регістру ESP на суму деякого «п...