Intel NetBurst (мікроархітектура)
NetBurst (робоча назва — P68) — суперскалярна гіперконвеєрна мікроархітектура, розроблена компанією Intel і яка лежить в основі мікропроцесорів Pentium 4, Pentium D, Celeron і Xeon.
Архітектура NetBurst прийшла на зміну архітектурі P6 на ринку процесорів для настільних і серверних систем. Вона не була розвитком архітектури P6, а являла собою принципово нову порівняно з усіма попередниками архітектуру.
Перші процесори архітектури NetBurst були анонсовані 20 листопада 2000. 8 серпня 2007 компанія Intel оголосила про початок дії програми зі зняття з виробництва всіх процесорів цієї архітектури. На зміну процесорам архітектури NetBurst прийшли процесори сімейства Core 2 Duo, архітектура яких являє собою розвиток архітектури P6.
Архітектура NetBurst розроблялася, в першу чергу, з метою досягнення високих тактових частот процесорів. Характерними особливостями архітектури NetBurst є гіперконвеєризація і застосування кешу послідовностей мікрооперацій замість традиційного кешу інструкцій. АЛП процесорів архітектури NetBurst також має суттєві відмінності від АЛП процесорів інших архітектур. Також можливе застосування технології Hyper-threading.
Процесори Pentium 4 на ядрах Willamette і Northwood мають конвеєр глибиною 20 стадій, а процесори на ядрах Prescott і Cedar Mill — 31 стадію. При цьому стадії декодування інструкцій не враховуються: у зв'язку із застосуванням кешу послідовностей мікрооперацій, декодер (англ. Instruction decoder) винесений за межі конвеєра. Це дозволяє процесорам Pentium 4 досягати вищих тактових частот в порівнянні з процесорами, що мають більш короткий конвеєр при однаковій технології виробництва. Так, наприклад, максимальна тактова частота процесорів Pentium III на ядрі Coppermine (180 нм. Технологія) становить 1333 МГц, а процесори Pentium 4 на ядрі Willamette здатні працювати на частоті, що перевищує 2000 МГц.
Для мінімізації впливу невірно передбачених переходів, в процесорах архітектури NetBurst використовуються збільшений у порівнянні з попередниками буфер передбачення розгалужень (BTB, англ. Branch target buffer) і новий алгоритм передбачення розгалужень, що дозволило досягти високої точності передбачення (близько 94 %) в процесорах на ядрі Willamette. У наступних ядрах механізм передбачення розгалужень піддавався модернізаціям, які підвищили точність передбачення.
Процесори архітектури NetBurst, як і більшість сучасних x86-сумісних процесорів, є CISC-процесорами з RISC-ядром: перед виконанням складні інструкції x86 перетворюються в більш простий набір внутрішніх інструкцій (мікрооперацій), що дозволяє підвищити швидкість обробки команд. Однак, внаслідок того, що інструкції x86 мають змінну довжину і не мають фіксованого формату, їх декодування пов'язано з істотними витратами часу.
У зв'язку з цим, при розробці архітектури NetBurst було прийнято рішення відмовитися від традиційної кеш-пам'яті інструкцій першого рівня, що зберігає команди x86, на користь кешу послідовностей мікрооперацій, що зберігає послідовності мікрооперацій відповідно до передбачуваного порядку їхнього виконання. Ємність trace cache становила близько 12 тис. мікрооперацій. Така організація кеш-пам'яті дозволила також знизити часові витрати на виконання умовних переходів і на вибірку інструкцій.
АЛП і механізм прискореного виконання цілочислових операцій (англ. Rapid Execution Engine)
[ред. | ред. код]Оскільки основною метою розробки архітектури NetBurst було підвищення продуктивності внаслідок досягнення високих тактових частот, виникла необхідність збільшення темпу виконання основних цілочисельних операцій. Для досягнення цієї мети АЛП процесорів архітектури NetBurst розділений на кілька блоків: «повільний АЛП» (англ. slow ALU), здатний виконувати велику кількість цілочисельних операцій, і два «швидких АЛП» (англ. 2X ALU), що виконують тільки найпростіші цілочисельні операції (наприклад, додавання). Виконання операцій на «швидких АЛП» відбувається послідовно в три етапи: спочатку обчислюються молодші розряди результату, потім старші, після чого можуть бути отримані прапори.
«Швидкі АЛП», обслуговуючі їх планувальники (англ. Fast scheduler), а також регістровий файл (англ. Integer register file) синхронізуються по половині такта процесора, таким чином, ефективна частота їх роботи вдвічі перевищує частоту ядра. Ці блоки утворюють механізм прискореного виконання цілочислових операцій.
У процесорах на ядрах Willamette і Norhtwood «швидкі АЛП» здатні виконувати лише ті операції, які обробляють операнди в напрямку від молодших розрядів до старших. При цьому результат обчислення молодших розрядів може бути отриманий через половину такту. Таким чином, ефективна затримка становить половину такту. У процесорах на ядрах Willamette і Norhtwood відсутні блоки цілочисельного множення і зсуву, а дані операції виконуються іншими блоками (зокрема, блоком інструкцій MMX).
У процесорах на ядрі Prescott (а також більш нових ядрах) присутній блок цілочисельного множення, а «швидкі АЛП» здатні виконувати операції зсуву. Ефективна затримка операцій, виконуваних «швидкими АЛП», зросла в порівнянні з процесорами на ядрі Norhtwood і становить один такт.
Основним завданням планувальників мікрооперацій є визначення готовності мікрооперацій до виконання і передача їх на конвеєр. Внаслідок великого числа стадій конвеєра, планувальники змушені відправляти мікрооперації на виконавчі блоки до того, як завершиться виконання попередніх мікрооперацій. Це забезпечує оптимальне завантаження виконавчих блоків процесора і дозволяє уникнути втрати продуктивності в тому випадку, якщо дані, необхідні для виконання мікрооперації, знаходяться в кеш-пам'яті першого рівня, регістровому файлі, або можуть бути передані минаючи регістровий файл.
При визначенні готовності нових мікрооперацій до передачі на виконавчі блоки, планувальником необхідно визначити час виконання тих попередніх мікрооперацій, результатом яких є дані, необхідні для виконання нових мікрооперацій. У тому випадку, якщо час виконання заздалегідь не визначено, планувальник для його визначення використовує найменший час її виконання (так, наприклад, якщо для виконання деякої мікрооперації необхідно завантажити дані з пам'яті, планувальник при передачі цієї мікрооперації на конвеєр буде виходити з припущення, що необхідні дані знаходяться в кеш-пам'яті даних першого рівня і будуть отримані через кількість тактів, рівну сумі латентності кеш-пам'яті першого рівня і кількості тактів, яке займе передача мікрооперації від планувальника до виконавчого блоку).
Якщо оцінка часу, необхідного для отримання даних, виявилася вірною, мікрооперація виконується успішно. У тому випадку, якщо дані не були отримані вчасно, перевірка коректності результату закінчується невдачею. При цьому мікрооперація, результат виконання якої виявився некоректний, ставиться в спеціальну чергу (англ. replay queue), а потім знову направляється планувальником на виконання.
Існують такі несприятливі ситуації, в яких повторне виконання мікрооперацій може призвести до блокування. Вихід з таких ситуацій здійснюється припиненням передачі нових мікрооперацій на виконавчі блоки і напрямом перевиконуваних мікрооперацій в спеціальний буфер для того, щоб вони могли звільнити конвеєр.
Всупереч тому, що повторне виконання мікрооперацій призводить до значних втрат продуктивності, застосування даного механізму дозволяє в разі помилкового виконання мікрооперацій уникнути зупину і скидання конвеєра, який приводив би до більш серйозних втрат.