AMD Piledriver і K10: віч-на-віч. Порівняння К10 та К10.5. Нові процесори лінійки AMD A вже у продажу

Побудова ЕОМ на основі мікропроцесорних БІС дозволяє зменшити вартість мікроЕОМ, порівнянних за своїми параметрами з раніше створеними ЕОМ, у 10 3 - 10 4 разів, габаритних розмірів - у (2-3) x10 4 разів, за потужністю споживання - у 10 5 разів. Це означає, що збільшення загальних витрат мікроелектронна технологія дозволяє суспільству виробити у сотні і тисячі разів більше ЕОМ, ніж раніше.

Мікропроцесор– функціонально закінчений пристрій обробки інформації, керований програмою, що зберігається в пам'яті. Поява мікропроцесорів (МП) стала можливою завдяки розвитку інтегральної електроніки. Це дозволило перейти від схем малого та середнього ступеня інтеграції до великих та надвеликих інтегральних мікросхем (ВІС та НВІС).

За логічними функціями та структуроюМП нагадує спрощений варіант процесора стандартних ЕОМ. Конструктивно він являє собою одну або кілька ВІС або НВІС.

За конструктивною ознакою МП можна розділити на однокристальні МП з фіксованою довжиною (розрядністю) слова та певною системою команд; багатокристальні (секційні) МП з розрядністю слова, що нарощується, і мікропрограмним управлінням (вони складаються з двох БІС і більше).

Останнім часом з'явилися однокристальні МП із мікропрограмним управлінням.

Архітектура багатокристального МП з мікропрограмним управлінням дозволяє досягти гнучкості у його застосуванні та порівняно простими засобами організувати паралельне виконання окремих машинних операцій, що підвищує продуктивність ЕОМ на таких МП.

У цій роботі будуть розглянуті два покоління мікропроцесорної архітектури – К10 і К10.5

Історія створення

K 10 - покоління архітектури мікропроцесорів x86 компанії AMD Процесори цієї архітектури з'явилися у продажу наприкінці 2007 року.

Перша згадка про мікроархітектуру наступного покоління з'явилася в 2003 році, на форумі Microprocessor Forum 2003. На форумі зазначалося, що в нову мікроархітектуру буде покладено багатоядерність процесорів, які працюватимуть на тактових частотах до 10 ГГц. Пізніше тактові частоти у кілька разів занижені. Перші офіційні згадки AMD про розробку чотириядерних процесорів з'явилися в травні 2006-го в роадмапі, опублікованому терміном до 2009 року. Щоправда, тоді нова мікроархітектура значилася під кодовою назвою AMD K8L, і лише в лютому 2007 року було затверджено остаточне найменування AMD K10. Процесори, засновані на покращеній архітектурі AMD K8, повинні були стати першими чотириядерними процесорами AMD, а також першими процесорами на ринку, в якому всі 4 ядра розташовані на одному кристалі (раніше ходили чутки про появу чотириядерного процесора AMD, що представляє собою два двоядерні кристали) .

Серійний випуск чотириядерних Phenom II X4 розпочався в січні 2009 року, триядерних Phenom II X3 – у лютому 2009 року, двоядерних Phenom II X2 – у червні 2009 року, а шестиядерних Phenom II X2 – у квітні.

Athlon II – заміна Sempron – є Phenom II, позбавлений однієї з найважливіших його переваг – великої кеш-пам'яті третього рівня (L3), загальної всім ядер. Випускається у дво-, трьох-і чотириядерних варіантах. Athlon II X2 виробляється з червня 2009 року, X4 - з вересня 2009 року, а X3 - з листопада 2009 року.

У 2008 році здійснено випуск архітектури К10.5, заснованої на К10.

Опис К10

К10 є 65нм процесор SOI. Складається з 450 млн транзисторів і має площу ядра: 283 кв.мм. Напруга:1.05V-1.38V. Socket: AM2+(940 pin)/F(1207 pin)

Оригінальне ядро ​​K10 має кодове ім'я Barcelona (AMD) для співпроцесорів, призначених для серверів. Пізніше було випущено процесори для настільних комп'ютерів, там ядро ​​K10 отримало назву Agena.

Всі процесори з ядром К10, що потрапили на ринок у 2007 році, мають степінг В2 і ВА та містять помилку в контролері пам'яті, через яку в певних умовах мікропроцесор може неправильно функціонувати (так званий TLBbug).

TLB bug

У зв'язку з процесорами Agena та Barcelona (AMD) часто згадується так звана TLB bug або помилка TLB. Ця помилка зустрічається у всіх чотириядерних процесорах AMD ревізії B2 і може призвести в дуже рідкісних випадках до непередбачуваної поведінки системи при високих навантаженнях. Ця помилка критична в серверному сегменті, що стало причиною припинення всіх поставок процесорів Barcelona (AMD) ревізії В2. Для настільних процесорів Phenom було запропоновано TLB patch який запобігає виникненню помилки шляхом відключення частини логіки TLB. Цей патч, хоч і рятує від TLB bug, але також негативно впливає на продуктивність. Помилка виправлена ​​у ревізії B3.

TDP та ACP

З виходом процесорів Opteron 3G на ядрі Barcelona (AMD) компанія AMD запровадила нову енергетичну характеристику під назвою ACP (Average CPU Power) – середній рівень енергоспоживання нових процесорів при навантаженні. AMD також продовжить зазначати і максимальний рівень енергоспоживання – TDP.

Позначення

З появою процесорів покоління К10 в асортименті AMD змінилися також їх позначення - під новими позначеннями ховаються моделі, засновані на К10, так і на AMD K8

Система позначень процесорів AMD

Серія процесорів Позначення
Phenom X4 quad-core (Agena) X4 9xx0
Phenom X3 triple-core (Toliman) X3 8xx0
Athlon dual-core (Kuma) 7xx0
Athlon single-core (Lima) 1xx0
Semporn single-core (Sparta) 1xx0

Опис До 10.5

Наступне за Barcelona ядро ​​серверних процесорів має кодове ім'я Shanghai та виробляється за 45 нм нормами. Однак це не просто перенесення архітектури K10 на новий техпроцес. Його архітектура називається K10.5 і має розширений набір інструкцій, має 6 Мб розподіленого кеша L3 і підтримкою сокету 1207+Ядро Deneb (Shanghai) є 45нм процесор покоління К10.5. Складається з ~758 млн транзисторів і має площу 243 мм (проти 731 млн і 246 мм у Intel Nehalem). Відрізняється збільшеним кешем L3 (з 2 до 6 МБ), а також незначними оптимізаціями архітектури.

Основна мета – підвищення частот процесорної лінійки Phenom, зниження TDP, а також собівартості виробництва. За словами AMD, процесори Deneb/Shanghai обходять рівночастотні Agena/Barcelona на величину до 35%, володіючи енергоспоживанням на 30% нижче. Анонс процесорів Opteron на ядрі Shanghai відбувся 13 листопада 2008 року. Процесори Deneb очікувалися в 1-му кварталі 2009. Перші процесори на ядрі Deneb випущені AMD 8 січня 2009 року під ім'ям Phenom II X4 (моделі 920 і 940).

Особливості архітектури К10

Основною відмінністю процесорів покоління K10 від своїх попередників на базі AMD K8 є об'єднання чотирьох ядер на одному кристалі, оновлення протоколу Hyper-Transport до версії 3.0, загальний для всіх ядер кеш L3, а також перспективна підтримка контролером пам'яті DDR3. Самі ядра також модернізували в порівнянні з ядрами AMD K8.

· Чіпи K10 можуть виконувати 64-бітові SSE-інструкції як одну. Саме тому збільшення розрядності SSE-блоків таке важливе і продуктивність має зрости досить значно.

· Збільшено розрядність інтерфейсу між SSE-блоками та кешем даних першого рівня. Тепер за один такт стало можливим завантаження двох 128-бітових інструкцій за такт проти двох 64-бітних у K8.

· Зв'язок між кешем L2 і контролером пам'яті також збільшив розрядність і тепер становить 128 біт.

· Підтримуються інструкції SSE4a, які, крім стандартного набору, включають: комбінований набір інструкцій (EXTRQ/INSERTQ) та векторні потокові інструкції (MOVNTSD/MOVNTSS).

· Архітектура K10 дозволяє відстежувати набагато більше переходів та розгалужень, за рахунок чого підвищується точність передбачень. А що точніше передбачення переходів, то повніше процесор здатний завантажити роботою свої виконавчі блоки.

· Також вдвічі порівняно з K8 збільшено розмір стека повернення. У K8 при виконанні довгого ланцюжка запитів можлива ситуація, коли місця для запису початкової адреси в стеку повернення не вистачає і тоді прогнози розгалужень стають неможливими. Наразі ймовірність цього значно знизилася.

· Дозволяє збільшити продуктивність та ефективність шляхом прямого з'єднання контролера пам'яті та каналу введення/виводу з ядром.

· Розроблено для одночасного виконання як 32-бітових, так і 64-бітових обчислень.

· Інтеграція контролера пам'яті стандарту DDR2 (аж до режиму 533 (1066) МГц, а також з перспективною підтримкою DDR3)

Особливості архітектури К10.5

· Ширина шини пам'яті контролера: 128 біт

· Підтримка шини Hyper Transport 3.0

· Частота системної шини: 1800 – 2600 МГц (ефективна 3600 – 5200 МГц)

· Підтримка технології AMD64 Technology

· Підтримка 64-бітових обчислень

· Підтримка технологій AMD Cool "n" Quiet 3.0, AMD CoolCore, Dual Dynamic Power Management

· Підтримка технологій EVP (Enhanced Virus Protection) та AMD Virtualization Techology

· Підтримка інструкцій SSE, SSE2, SSE3, SSE4a, ABM, MMX, 3DNow!

· Максимальна температура: 62 ° С

· Розсіювана потужність (TDP) 125 Вт

Порівняння К10 та К10.5

Найбільш примітною особливістю чотириядерних процесорів з мікроархітектурою К10 є покращена схема управління живленням та тактовою частотою. Тепер кожне процесорне ядро ​​має право саме "вирішувати", на якій частоті йому працювати, причому зміна відбувається динамічно і ніяк не впливає на частоту роботи інших ядер.

На початку вересня компанія AMD обіцяє представити свої нові чотириядерні процесори архітектури K10. Цими першими процесорами з новою архітектурою будуть серверні чіпи Opteron на ядрі з кодовою назвою Barcelona. На жаль, інженерам AMD у поточній ревізії не вдалося досягти масового виробництва процесорів, що працюють на високих частотах. Основною перешкодою до нарощування частоти, мабуть, став той факт, що чотири ядра на високих частотах споживають потужність, яка перевищує значення, передбачене термопакетом платформи. Потужність буде знижуватися, а частоти підвищуватимуться з випуском нових ревізій і переходом більш тонкі техпроцессы. Поки ж AMD необхідно терміново розпочинати продаж, щоб вибиратися з важкого економічного становища, тому постачання Barcelona почнеться із серверних чотириядерних процесорів, що працюють на частоті 2 ГГц.

У четвертому кварталі 2007 року AMD обіцяє підвищити частоти Opteron до 2,4–2,5 ГГц та випустити настільні версії процесорів архітектури K10:

Phenom FX (кодове ім'я Agena FX) – 4 ядра, 2 МБ кешу L3, орієнтовні стартові частоти 2,2–2,4 ГГц, сокети AM2+ та F+;
Phenom X4 (кодове ім'я Agena) – 4 ядра, 2 МБ кешу L3, орієнтовні стартові частоти 2,2–2,4 ГГц, сокет AM2+.

Пізніше, на початку 2008 року, AMD обіцяє подати спрощені версії нових процесорів:

Phenom X2 (кодове ім'я Kuma) – 2 ядра, 2 МБ кешу L3, орієнтовні стартові частоти 2,2–2,6 ГГц, сокет AM2+;
Athlon X2 (кодове ім'я Rana) – 2 ядра, без кешу L3, орієнтовна стартова частота 2,2 ГГц, сокет AM2+;
Sempron (кодове ім'я Spica) - 1 ядро, орієнтовні стартові частоти 2,2-2,4 ГГц, сокет AM2+.

Але це вся справа хоч і найближчого, але майбутнього, а поки давайте подивимося, які нововведення привнесла нова архітектура AMD. У цій статті я спробую докладно розкрити її деталі та оцінити, що ми можемо від неї очікувати.

Вибірка інструкцій

Виконання коду процесором починається з вибірки інструкцій з кешу команд L1I та їх декодування. Інструкції x86 мають змінну довжину, що ускладнює визначення їх меж перед декодуванням. Щоб визначення довжини інструкцій не впливало на темп декодування, процесори K8/K10 виконують передекодування команд під час завантаження рядків в кеш команд L1I. Інформація про розмітку команд зберігається в кеші L1I у спеціальних полях (3 біти інформації передекодування на кожен байт інструкції). Передекодування під час завантаження в кеш дозволяє винести накладні витрати на визначення меж інструкцій за межі каналів декодування та підтримувати постійний темп декодування незалежно від довжини та структури команд.

Процесори завантажують команди з кешу блоками, з яких виділяються інструкції, що направляються на декодування. Процесор архітектури К10 робить вибірку інструкцій з кешу команд L1I вирівняними 32-байтними блоками, на відміну процесорів K8 і Intel Core 2, які виробляють вибірку 16-байтними блоками. Темп вибірки, що становить 16 байт за такт, дозволяє K8 та Core 2 відправляти на декодування у кожному такті по п'ять інструкцій середньою довжиною до 5 байт. Однак довжина x86-інструкцій може досягати 16 байт, і в деяких алгоритмах довжина кількох суміжних команд у ланцюжку може перевищувати 5 байт, що унеможливлює декодування по три команди за такт у таких випадках (рис. 1).


Мал. 1. Декілька суміжних довгих команд обмежують темп
декодування під час вибірки 16-байтними блоками


Зокрема, довжина SSE2 – простий інструкції з операндами типу регістр-регістр (наприклад, movapd xmm0, xmm1) - Складає 4 байти. Однак при застосуванні в команді адресних операцій звернення до пам'яті з використанням базового регістру та усунення (наприклад, movapd xmm0,) довжина команди збільшується до 6-9 байт залежно від усунення. У 64-бітному режимі під час використання додаткових регістрів до коду команди додається ще один однобайтний REX-префікс. Таким чином, у 64-бітному режимі довжина SSE2-команд може досягати 7-10 байт. Довжина SSE1-команди на 1 байт менше, якщо це векторна команда (тобто над чотирма 32-бітовими значеннями), але скалярні (над одним операндом) SSE1-команди також можуть досягати довжини в 7-10 байт за тих же умов.

Вибірка 16 байт за такт не є обмеженням у подібній ситуації для процесора K8, оскільки він все одно не може декодувати векторні SSE-команди в темпі вище 3 команд за 2 такти, проте для архітектури K10 16-байтна вибірка могла б стати обмеженням, тому Розширення ширини вибірки до 32 байт за такт є обґрунтованим рішенням.

До речі, процесори Core 2 вибирають інструкції блоками по 16 байт, як і процесори K8, тому вони можуть ефективно декодувати потік команд у темпі по 4 за такт лише в тому випадку, коли середня довжина інструкції не перевищує 4 байт, в іншому випадку декодер не зможе ефективно обробляти не лише 4, а й 3 інструкції за такт. Однак Core 2 мають спеціальний внутрішній 64-байтний буфер, що зберігає останні запитані чотири 16-байтні блоки. Вибірка із цього буфера здійснюється з темпом 32 байти за такт. Цей буфер дозволяє кешувати короткі цикли, знімати у яких обмеження темп вибірки, і навіть економити 1 такт кожному прогнозу переходу початку циклу. Однак цикли не повинні містити більше 18 команд, більше 4 умовних переходів, і не повинно бути жодної команди ret.

Передбачення переходів

Коли в потоці команд зустрічаються розгалуження, процесор, щоб не переривати декодування, повинен спробувати вгадати подальшу поведінку програми та продовжити декодування з найбільш ймовірної гілки. У разі вибірка чергового блоку інструкцій проводиться з допомогою механізму передбачення переходів. Передбачення переходів у процесорах K8 здійснюється за адаптивним дворівневим алгоритмом, який враховує історію переходів не тільки поточної інструкції, але й 8 попередніх інструкцій. Основним недоліком механізму передбачення переходів в K8 була відсутність передбачення непрямих переходів з адресами, що динамічно чергуються.

Непрямими називаються переходи, які проводяться за вказівником, що динамічно обчислюється при виконанні коду програми. Зазвичай непрямі переходи вставляються компіляторами у конструкції switch-case, а також використовуються при викликах функцій за адресою та викликах віртуальних функцій в об'єктно-орієнтованому програмуванні. Процесор K8 завжди намагається зробити вибірку коду за останньою адресою переходу. Якщо адреса змінилася, відбувається скидання конвеєра. Якщо адреса переходу періодично чергується, процесор буде постійно помилятися. Механізм передбачення динамічно змінних адрес непрямих переходів вперше з'явився в процесорі Pentium M. Відсутність такого механізму в K8 знижує його ефективність на об'єктно-орієнтованому коді.

Як і очікувалося, передбачення умовних переходів у K10 було вдосконалено:

З'явився механізм передбачення адрес, що динамічно змінюються, непрямих переходів, які передбачаються по таблиці розміром 512 елементів.
З 8 до 12 біт збільшено розмір глобального регістру історії, що використовується визначення історії послідовності попередніх команд переходів.
З 12 до 24 елементів збільшена глибина стека повернення, який використовується для швидкого визначення адреси повернення з функції, щоб продовжити вибірку, не чекаючи поки команда ret отримає адресу повернення з стека.

Завдяки цим удосконаленням K10 повинен отримати відчутне збільшення у швидкості виконання програм, написаних на об'єктно-орієнтованих мовах високого рівня. На жаль, об'єктивно оцінити ефективність блоку передбачення переходів K10 досить важко, але за деякими даними вона може в деяких випадках бути нижчою, ніж у процесорах Intel.

Декодування

Отримані з кешу команд блоки копіюються до буфера передекодування ( Predecode/Pick Buffer), де відбувається виділення інструкцій з блоків, визначення їх типів та відсилання у відповідні канали декодера. Прості інструкції, які декодуються в одну (Single) або дві (Double) макрооперації, надсилаються в "простий" декодер, званий DirectPath. Складні інструкції, які декодуються в 3 або більше макрооперацій, надсилаються в мікропрограмний декодер, званий VectorPath.


Мал. 2. Декодер


Кожен такт із каналів декодерів можуть виходити по 3 макрооперації (МОП). DirectPath-декодером за такт може бути декодовано 3 простих 1-МОПових інструкції, або одна 2-МОПова і одна 1-МОПова, або півтори 2-МОПові інструкції (три 2-МОПові інструкції за два такти). Складні інструкції можуть декодуватися більш ніж 3 МОПа, тому декодування таких інструкцій може тривати протягом кількох тактів. Щоб не створювати конфліктів на виході з каналів декодера, прості та складні інструкції K8 і K10 не можуть бути відправлені на декодування одночасно.

МОПи складаються з пари мікрооперацій (micro-ops): однієї мікрооперації цілочисленної чи речової арифметики та однієї адресної мікрооперації звернення до пам'яті. Виділення мікрооперацій з МОП проводиться планувальником, який відправляє їх на виконання незалежно один від одного.

Виходять кожен такт з декодера МОПи об'єднуються групи по 3. Через чергування DirectPath і VectorPath команд чи різних затримок у вибірці інструкції для декодування на виході декодера може сформуватися група, що містить 2 або навіть 1 МОП. Така група заповнюється до трьох порожніми МОП і у такому вигляді вирушає на виконання.

Векторні SSE, SSE2 і SSE3-команди в процесорі K8 розбиваються на пари МОПів, що роздільно обробляють старшу і молодшу 64-бітові половини 128-розрядного SSE-реєстру на 64-бітових пристроях. Це вдвічі знижує темп декодування команд і вдвічі зменшує кількість інструкцій, які потрапляють у чергу планувальника.

Завдяки тому, що в процесорі К10 блоки FPU розширені до 128 біт, відпала необхідність дроблення векторних SSE-команд на два МОПи. Більшість SSE-інструкцій, які декодувалися в K8 як DirectPath Double, K10 стали декодуватися в 1 МОП як DirectPath Single. Крім того, частина SSE-інструкцій, які в K8 декодувалися через мікропрограмний VectorPath-декодер, в K10 стали декодуватися через простий DirectPath-декодер зі зменшенням числа генерованих МОП до 1 або 2-х МОП (залежно від операції).

Також спростилося декодування цілих інструкцій роботи зі стеком. Більшість форм інструкцій роботи зі стеком, які зазвичай використовуються при викликах функцій CALL-RET та PUSH-POP, тепер також декодуються простим декодером в один МОП. Крім того, ці команди тепер за допомогою спеціальної схеми Sideband Stack Optimizerперетворюються на незалежний ланцюжок макрооперацій, які можуть виконуватися паралельно.

Sideband Stack Optimizer

У K10 до схем декодера було додано спеціальний блок, званий Sideband Stack Optimizer. Принцип його дії аналогічний новому блоку Stack Pointer Tracker, який застосовується в процесорах Core. Навіщо він потрібен? У системі команд x86 для виклику функції, виходу з неї, передачі до неї параметрів та збереження вмісту регістрів використовуються команди CALL, RET, PUSH та POP. Всі ці команди в неявній формі використовують регістр ESP, що вказує на поточний стан стека. Простежити, як виконуються ці команди при виклику функції K8, можна, представивши їх декодування як послідовність еквівалентних елементарних операцій зміни регістра стека і завантаження/збереження:


Як очевидно з цього прикладу, під час виклику функції команди послідовно змінюють регістр ESP, тому кожна команда неявно залежить від результату попередньої. Команди в цьому ланцюжку не можуть бути переупорядковані, тому тіло функції, починаючи з команди mov eax, не може почати виконуватися до виконання останньої команди PUSH. Блок Sideband Stack Optimizer відстежує зміну стека і перетворює ланцюжок у незалежний, налаштовуючи зміщення кожної команди щодо стека і вставляючи операції синхронізації вершини стека (sync-MOP) перед командами, які явно використовують регістр стека. Тим самим знімається обмеження на перевпорядкування команд, які використовують стек.


Команда mov eax,, З якої починаються обчислення в тілі функції в даному прикладі, залежить тільки від операції синхронізації вершини стека. Ці операції тепер можуть бути виконані паралельно з іншими командами перед ними. Таким чином, швидкість передачі параметрів та збереження регістрів збільшується, і при цьому тіло функції може почати завантажувати параметри та виконувати операції з ними ще до того, як будуть завершені передача всіх параметрів та збереження регістрів.

Таким чином, підвищення темпу декодування команд роботи зі стеком, застосування блоку Sideband Stack Optimizer, збільшення глибини стека повернення і передбачення непрямих переходів, що чергуються, в K10 призводять до відчутного збільшення швидкості виконання кодів, багатих викликами функцій.

Декодер процесора K10 не зможе декодувати по 4 команди за такт, як це може робити в сприятливих умовах декодер Core 2, але це не буде обмежуючим фактором під час виконання програм. Середній темп виконання команд практично ніколи не досягає 3 команд за такт, тому декодер K10 буде досить ефективним, щоб обчислювальні блоки не простоювали від нестачі операцій у чергах.

Блок управління командами

Декодовані трійки МОП надходять до блоку управління командами (instruction control unit - ICU), який заносить МОП в буфер переупорядкування (reorder buffer - ROB). Буфер переупорядкування складається з 24 ліній по три МОПи. Кожна трійка МОП записується в свою лінію. Таким чином, ROB дозволяє блоку управління відстежувати стан 72 МОПів аж до їхньої відставки.

З буфера переупорядкування МОП відсилаються в черзі планувальників цілих і речових виконавчих пристроїв у тому порядку, в якому вони вийшли з декодера. Трійки МОПів продовжують зберігатися в буфері переупорядкування доти, доки не будуть виконані та відставлені дедалі старіші операції. Під час відставки проводиться запис остаточних значень в архітектурні регістри та пам'ять. Відставка операцій, видалення інформації про них з ROB та запис остаточних значень проводиться у програмному порядку, в якому операції надійшли до буфера переупорядкування. Це необхідно для того, щоб у разі виключення чи переривання скасувати результати всіх наступних операцій, виконаних у позачерговому порядку.

Виконання цілих команд

У процесорах K8 і K10 блок цілих операцій ( Integer Execution Unit) складається з трьох симетричних цілих каналів. Кожен з обчислювальних каналів має свій планувальник з чергою на 8 МОПів, однаковий набір цілих арифметико-логічних пристроїв (ALU), адресних пристроїв (AGU) і блок умовних переходів. Крім цього, до обчислювального каналу 0 підключений блок множення, а до обчислювального каналу 2 блок виконання нових операцій LZCNT і POPCNT (про них нижче).


Мал. 3. Блок виконання цілих операцій


Вибір черги для кожного МОПу визначається статичним положенням команди у трійці, сформованій на виході з декодера. Кожна макрооперація з трійки відсилається з буфера переупорядкування на виконання у свою чергу, що, з одного боку, спрощує управління командами, а з іншого – може призвести до незбалансованого завантаження черг при несприятливому розташуванні ланцюжка залежних операцій у коді програми (що, проте, практично) майже не зустрічається і тому слабко впливає на продуктивність). Операції множення та розширені бітові операції розміщуються декодером у потрібних слотах трійок, щоб забезпечити їх попадання у заданий канал.

У чергах планувальників обчислювальних каналів МОПи, як було зазначено вище, розбиваються на цілі численні мікрооперації та адресні мікрооперації звернення до пам'яті. У міру готовності даних планувальник може запускати на виконання з кожної черги одну цілочисельну операцію пристрою ALU і одну адресну операцію пристрій AGU. Кількість одночасних звернень до пам'яті обмежена двома. Таким чином, за кожен такт може запускатися на виконання 3 цілих операцій і 2 операції з пам'яттю (64-бітного читання/запису в будь-якій комбінації). Мікрооперації з різних арифметичних МОПів вирушають на виконання із черг у міру готовності даних для них у позачерговому порядку. Після того як арифметична та адресна мікрооперації з МОПу виконані, МОП видаляється з черги планувальника, звільняючи місце для наступних операцій.

У процесорі K8 адресні мікрооперації звернення до пам'яті вибираються у програмному порядку. Пізніші по порядку в програмі операції звернення до пам'яті не можуть запускатися перед ранніми. Це призводить до того, що неможливість обчислити адресу більш ранньої адресної операції блокує всі наступні адресні операції, навіть якщо всі операнди для наступних операцій вже готові.

Наприклад:

add ebx, ecx
mov eax, – швидке обчислення адреси
mov ecx, – адреса залежить від результату попередньої команди
mov edx, – ця команда не буде запущена доти, доки не будуть обчислені адреси всіх попередніх команд.


Це може призводити до втрати продуктивності і є одним з обмежувальних факторів у процесорі K8, через який на деяких кодах K8, незважаючи на можливість запуску двох команд читання за такт, виконує команди звернення до пам'яті менш ефективно, ніж процесор Core 2, що запускає одну команду читання за такт, але при цьому має механізм спекулятивного позачергового виконання команд читання в обхід попередніх команд читання та запису.

У процесорах архітектури K10 це вузьке місце ліквідовано. Процесори K10 тепер здатні не тільки запускати поза чергою команди читання, але й запускати команди запису раніше команд читання в тих випадках, коли процесору відомо, що адреси запису та читання не конфліктують. Запуск запису в обхід читання дозволяє відчутно прискорити виконання деяких видів кодів, наприклад, циклів, що починаються з команди читання чергової порції даних із пам'яті і які зберігаються обчисленого результату в пам'ять.
.....// операції над даними
mov, eax // збереження результату
cmp
jnz L1
У таких випадках процесор, який не підтримує запуск читання раніше запису, не може розпочати виконання наступної ітерації циклу до завершення запису поточного результату. Процесори, які підтримують перевпорядкування читання, можуть розпочати завантаження даних та обчислення для наступної ітерації, не чекаючи закінчення поточної.

На жаль, процесор K10 поки не вміє робити спекулятивне завантаження в обхід запису за ще невідомою адресою, як це роблять процесори Core 2. Незважаючи на те, що такі спекуляції можуть призводити до штрафів, в реальності коди програм ці штрафи рідкісні (близько 5 % випадків), тому спекулятивні завантаження виправдані з погляду підвищення продуктивності.

Ще одним удосконаленням цілісного блоку процесора K10 стала оптимізація алгоритму команди цілісного поділу. Тепер швидкість виконання команди цілісного розподілу залежить від старших значних бітів діленого і дільника. Наприклад, у тих випадках, якщо ділене дорівнює нулю, розподіл виконується практично вдвічі швидше. Взагалі кажучи, цілий поділ - дуже рідкісна операція, якої через невисоку швидкість виконання всіляко намагаються уникати в реальних програмах, замінюючи її множенням на число, зворотне дільнику, зсувами або обходячи іншими способами, тому дана оптимізація, швидше за все, не принесе помітного вкладу у продуктивність додатків.

Загалом блок цілих пристроїв К10 буде дуже ефективний. Після додавання механізму позачергового виконання операцій із пам'яттю у ньому тепер відсутні яскраво виражені слабкі місця. Незважаючи на меншу глибину черг, у порівнянні з процесорами Core 2, у процесорів K10 відсутні обмеження на читання регістрів з регістрового файлу та деякі інші обмеження планування, які не дозволяють Core 2 постійно виконувати операції максимально можливого темпу.

Виконання речових команд

У процесорах K8 і K10 планувальник блоку операцій із плаваючою точкою (FPU) відокремлений від планувальника цілих команд і влаштований трохи інакше. Буфер планувальника вміщує до 12 груп по 3 МОПи (36 речових операцій теоретично). На відміну від блоку виконання цілих команд з симетричними обчислювальними каналами блок плаваючої арифметики містить три різних пристрої: FADD для речового складання, FMUL для речового множення і FMISC (він же FSTORE) для команд збереження в пам'яті та допоміжних операцій перетворення, тому в буфері планувальника немає прив'язки положення МОП у групі команд до конкретного обчислювального пристрою (рис. 4).



Мал. 4. Блок виконання операцій із плаваючою точкою


Кожен такт K8 і K10 можуть запускати на виконання по одній операції кожен з пристроїв речовинної арифметики. У процесорі K8 пристрої обчислень з точкою, що плаває, є 80-бітними. Векторні 128-бітові SSE-команди розбиваються на етапі декодування на два МОПи, які здійснюють операції над 64-бітними половинами 128-бітного операнда і запускаються на виконання послідовно в різних тактах. Це не лише обмежує темп виконання векторних команд, а й практично вдвічі зменшує ефективний обсяг буфера FPU-планувальника і, отже, глибину позачергового виконання команд.

У процесорі K10 ширина пристроїв FPU збільшилася до 128 біт. K10 обробляє векторні 128-бітові операнди цілком однією операцією, що збільшує теоретичний темп виконання векторних SSE-команд вдвічі порівняно з K8. Крім того, за рахунок скорочення вдвічі кількості МОП збільшується ефективна довжина черги планувальника, що дозволяє робити більш глибоке позачергове виконання.

У процесорі K8 SSE-команди завантаження виконуються з використанням пристрою FSTORE, що, з одного боку, не дозволяє виконувати одночасно інші команди, що претендують на цей пристрій, а з іншого - обмежує кількість команд завантаження, що одночасно запускаються, до однієї. Два паралельні читання з пам'яті в K8 може бути виконано тільки в тому випадку, якщо одна з команд - це інструкція, що поєднує звернення до пам'яті та операцію з даними (так звана Load-Execute-команда), наприклад, ADDPS xmm1,.

У процесорі K10 відбулося кілька важливих удосконалень механізму виконання SSE-команд завантаження.

По-перше, команди завантаження даних більше не використовують ресурси FPU-блоку, таким чином тепер звільняється порт FSTORE для запуску інших команд, а команди завантаження можуть запускатися по 2 за такт.

По-друге, у тих випадках, коли дані в пам'яті вирівняні по 16-байтному кордоні, команди невирівняного завантаження даних MOVU** працюють тепер так само ефективно, як і команди вирівняного завантаження MOVA**. Таким чином, для процесорів K10 використання команд MOVA ** більше не дає жодних переваг.

По-третє, в процесорах K10 застосування невирівняних завантажень також дозволено і для Load-Execute-команд, що поєднують завантаження з операцією над даними. Зазвичай, якщо немає впевненості, що дані в пам'яті вирівняні, компілятор (або програміст) використовує команди MOVU** для читання даних у регістри з наступними операціями над регістрами. Використання невирівняних завантажень безпосередньо з командами Load-Execute може значно скоротити кількість окремих команд завантаження в коді програми і збільшити продуктивність. Підтримка цієї можливості має бути вбудована у компілятори. Взагалі кажучи, за специфікацією SSE, розробленою компанією Intel, звернення Load-Execute-команди за адресою, не вирівняною на межі 16 байт, має призводити до виключення. Для збереження сумісності зі специфікацією роздільна здатність невирівняних завантажень у Load-Execute-командах повинна включатися встановленням спеціального прапора програмним забезпеченням, спроектованим та скомпільованим з урахуванням нових можливостей процесорів.

По-четверте, дві шини читання даних із кешу першого рівня в процесорі K10 розширено до 128 біт. Це дозволяє процесору виконувати по два читання 128-бітної порції даних кожен такт. Це дуже важлива особливість архітектури, так як для паралельного виконання двох команд потрібно 4 операнди (по 2 на команду), а в ряді алгоритмів потокової обробки даних два з чотирьох операндів, як правило, зчитуються з оперативної пам'яті. Навпаки, дві шини запису в процесорі K10, як і раніше, залишилися 64-бітними, а 128-бітний результат при записі в пам'ять розбивається на два 64-бітові пакети. Таким чином, процесор може виконувати кожен такт тільки один 128-бітний запис, або два 128-бітові читання, або одне 128-бітове читання і один 64-бітний пакет запису. Однак з урахуванням того факту, що кількість читань зазвичай не менше ніж у два рази перевищує кількість записів, обмеження запису не помітно позначається на ефективності процесора при обробці 128-бітних даних.

По-п'яте, команди копіювання 128-бітових даних MOV*** регістр-реєстр тепер можуть виконуватися на будь-якому з трьох FPU-пристроїв, а не тільки на FADD та FMUL, що також звільняє блоки FADD та FMUL для цільових операцій.

Як бачимо, FPU-блок процесора K10 став значно гнучкішим. З'явилися такі унікальні можливості, поки відсутні процесори Intel, як ефективне невирівняне завантаження, у тому числі для Load-Execute-команд, і два 128-бітових читання за такт. На відміну від Core 2, планувальники речових і цілих операцій використовують роздільні черги, що допомагає уникати конфліктів операцій через одних і тих же портів запуску. Однак K10, як і раніше, розділяє пристрій FMISC (FSTORE) для операцій SSE-збереження з деякими командами перетворення даних, що може в окремих випадках позначитися на темпі їх виконання.

В цілому FPU-блок K10 обіцяє бути дуже ефективним, по ряду параметрів (наприклад, можливості двох 128-бітних читань за такт і ефективної невирівняної завантаження) перевершує FPU-блок Core 2.

Підсистема пам'яті

Пристрій завантаження/збереження

У процесорі K8 після обчислення на AGU адрес звернення до пам'яті операції завантаження та збереження направляються в LSU (Load/Store Unit) – пристрій завантаження/збереження. У LSU знаходяться дві черги LS1 та LS2. Спочатку операції завантаження та збереження потрапляють у чергу LS1 глибиною 12 елементів. З черги LS1 у програмному порядку по дві операції за такт здійснюються звернення до кеш-пам'яті першого рівня. У разі кеш-промаху операції переміщуються в другу чергу LS2 глибиною 32 елементи, звідки виконуються звернення до кеш-пам'яті другого рівня та оперативної пам'яті.

У процесорі K10 LSU були внесені зміни. Тепер у чергу LS1 потрапляють лише операції завантаження, а операції збереження направляються у чергу LS2. Операції завантаження з LS1 тепер можуть виконуватися у позачерговому порядку з урахуванням адрес операцій збереження в черзі LS2. 128-бітові операції збереження, як було сказано вище, обробляються в процесорі K10 як дві 64-бітові, тому в черзі LS2 вони займають дві позиції.

Кеш першого рівня

Кеш першого рівня в процесорах K8 та K10 роздільний, по 64 КБ для команд (L1I) та для даних (L1D). Асоціативність кешів дорівнює двом, розмір лінії – 64 байти. Низька асоціативність може призводити до частих конфліктів рядків, що претендують на один набір, що може збільшувати кількість кеш-промахів та негативно позначатися на продуктивності. Низька асоціативність частково компенсується чималим обсягом кешу L1. Великою перевагою кешу L1D є його двопортовість – він може обслуговувати по дві команди читання та/або запису за такт у будь-якій комбінації.

У процесорі K10 розмір та асоціативність кеша першого рівня, на жаль, залишилися незмінними. Єдиним помітним удосконаленням кеша першого рівня K10 стало збільшення розрядності шини даних на читання. Тепер процесор, як було сказано в попередньому розділі, може робити по два 128-бітових читання кожен такт, що значно підвищує його ефективність при обробці даних SSE в локальній пам'яті.

Кеш другого рівня

У двох- і чотириядерних процесорах архітектур K8 і K10 кожне ядер має індивідуальний кеш другого рівня L2. Розмір кешу другого рівня в K10 залишився рівним 512 КБ на кожному з ядер, асоціативність дорівнює 16. Окремі кеші другого рівня мають свої переваги і свої недоліки в порівнянні із загальним кешем другого рівня в процесорах Core 2. До переваг можна віднести відсутність конфліктів і конкуренцій за кеш при одночасному інтенсивному навантаженні кількох ядер. До недоліків - менший обсяг кешу, що припадає на одне ядро ​​при інтенсивній роботі одного завдання.

Кеш L2 має ексклюзивну організацію зберігання даних: дані в кеші першого та другого рівня не дублюються. Кеші першого та другого рівнів обмінюються даними по двох однонаправлених шинах – одній на отримання даних, іншою на відправлення. У процесорі архітектури K8 ширина кожної шини 64 біти (8 байт) (рис. 5а.). Через таку організацію процесор отримує дані, запитані в L2, з невисоким темпом 8 байт за такт. Тобто передача 64-байтного рядка займає 8 тактів, що суттєво збільшує затримку одержання даних ядром, особливо при одночасному доступі до двох або більше рядків кешу другого рівня.

За остаточно не підтвердженою поки що інформацією, в процесорі K10 розрядність шин прийому і передачі збільшилася в 2 рази, тобто до 128 біт кожна (рис. 5б). Це значно скоротить латентність доступу до кешу за одночасного запиту двох або більше рядків.



Кеш третього рівня

Для компенсації недостатнього об'єму індивідуальних кешів другого рівня в процесорі K10 з'явився загальний для всіх ядер кеш третього рівня L3 об'ємом 2 МБ, з асоціативністю, що дорівнює 32. і загальні дані, використовувані кількома ядрами. При отриманні запиту від ядра на читання рядка проводиться перевірка: якщо рядок використовується тільки одним ядром, то він видаляється з L3, звільняючи місце для рядка, що витісняється з кеша L2 ядра, що запитує. Якщо рядок використовується і іншим ядром, то він залишиться в кеші; при цьому, щоб звільнити місце для рядка, що витісняється з кешу L2, з кешу L3 буде видалено інший, більш старий рядок.

Кеш L3 також має допомогти збільшити швидкість обміну даними між ядрами. Як ми з'ясували, обмін даними між ядрами в сучасних процесорах Athlon 64 відбувається через шину пам'яті. Це значно знижує швидкість доступу до спільно використовуваних модифікованих даних. Згідно з матеріалами AMD, у чотириядерних процесорах архітектури K10 обмін даними між ядрами може відбуватися через кеш L3. При отриманні запиту від іншого ядра, ядро, що зберігає модифіковані дані, копіює їх в L3, звідки вони будуть прочитані ядром, що запитує. Швидкість доступу до змінених даних у кеші чужого ядра має суттєво зрости. Коли нам буде можливість, ми це обов'язково перевіримо:).


Мал. 6. Передача даних між ядрами у процесорі K10


Латентність кешу L3, очевидно, буде вищою, ніж латентність кешу L2, проте в матеріалах AMD говориться, що вона змінюватиметься адаптивно в залежності від навантаження – при відсутності великого навантаження буде краще латентність, при високому навантаженні буде збільшуватися темп. Що за цим стоїть насправді, нам ще доведеться перевірити.

TLB

Крім кеш-пам'яті для команд і даних, у процесорах існує ще один різновид кеш-пам'яті – буфер трансляції віртуальних адрес у фізичні (translation-lookaside buffer – TLB). Вони використовуються для збереження відповідності між віртуальними та фізичними адресами сторінок, отриманих за таблицями трансляції сторінок. Кількість буферів трансляції визначає, скільки сторінок пам'яті може бути одночасно використано без додаткових дорогих перетворень по таблицях. Це особливо критично для програм, які обробляють дані пам'яті у випадковому порядку, коли постійно відбуваються звернення до даних у різних сторінках. У процесорі K10 було значно збільшено кількість буферів трансляції. Для зручності сприйняття вони зведені до таблиці.

Таблиця 1 – Об'єм TLB процесорів K8 та K10


Як видно з таблиці, суттєво збільшено кількість буферів, які використовуються для трансляції адрес 2-МБ сторінок, а також з'явилася підтримка великих 1-ГБ сторінок, які будуть корисні для серверів, що обробляють великі обсяги даних. За допомогою операційної системи програми, що використовують великі 2-МБ і 1-ГБ сторінки, зможуть отримати приріст продуктивності.

Контролер пам'яті

У тих випадках, коли дані, що запитуються, не були виявлені в кешах всіх рівнів, відбувається звернення до контролера пам'яті, інтегрованого на кристал процесора. Інтеграція контролера на кристалі процесора значно знижує затримки при зверненні до пам'яті і разом з тим прив'язує процесор до конкретного типу пам'яті, а також збільшує площу ядра і додає проблем із відбраковуванням кристалів. Контролер пам'яті був однією із сильних сторін процесорів K8, проте в деяких випадках його ефективність була недостатньою. У процесорі K10 контролер пам'яті значно вдосконалено.

По-перше, він тепер може працювати в режимі передачі даних не тільки по одному 128-бітному каналу, але і по двох незалежних 64-бітових каналах, що робить одночасне звернення до пам'яті кількома ядерами більш ефективним.

По-друге, у контролері було оптимізовано алгоритм планування та переупорядкування операцій. Контролер пам'яті групує операції читання та запису таким чином, щоб найефективніше використовувати шину пам'яті. Операції читання мають перевагу перед операціями запису. Дані, призначені для запису, відкладаються в буфері, обсяг якого в даний час точно не відомий, але, за різними даними, лежить у діапазоні від 16 до 30 64-байтних рядків. Вивантаження групи з кількох відкладених рядків дозволяє значно скоротити витрати на перемикання шини пам'яті з читання на запис і назад. Це особливо підвищує продуктивність у разі потоку запитів читання і запису, що чергуються.

По-третє, контролер пам'яті вміє аналізувати послідовності запитів та робити передвиборку.

Передвиборка

Передвиборка не є сильним місцем для процесорів K8. Інтегрований контролер пам'яті з низькою латентністю тривалий час дозволяв процесорам AMD показувати хорошу продуктивність під час роботи з пам'яттю. Однак при роботі з новою пам'яттю DDR2 процесори K8 не показали високу ефективність, на відміну від процесорів Core 2, які мають потужну систему передвиборки. У процесорах K8 два блоки передвиборки один для коду, інший для даних. Блок передвиборки даних робить передвиборку в кеш другого рівня за спрощеними послідовностями.

У K10 передвиборку було вдосконалено.

По-перше, передвиборка K10 здійснюється безпосередньо в кеш першого рівня, що дозволяє приховувати латентність кеша другого рівня при зверненні до даних. Хоча це і збільшує ймовірність засмічення кешу L1 непотрібними даними, особливо з огляду на низьку асоціативність кешу, проте, за твердженням AMD, виправдовує себе і підвищує продуктивність.

По-друге, було реалізовано механізм адаптивної передвиборки, який динамічно змінює дистанцію передвиборки таким чином, щоб забезпечити своєчасність прибуття даних та не засмічувати кеш даними, в яких поки що немає необхідності. Гнучкість блоку передвиборки була збільшена: тепер він може навчатися на запитах до пам'яті на будь-які адреси, а не тільки на адреси, що потрапляють у суміжні рядки. Крім цього, блок передвиборки наразі враховує програмні команди передвиборки.

По-третє, окремий блок передвиборки був доданий безпосередньо до контролера пам'яті. Контролер пам'яті аналізує послідовності запитів від ядер і підвантажує дані буфер записи, оптимально використовуючи шину пам'яті. Зберігання рядків передвиборки в буфері запису дозволяє не засмічувати кеш-пам'ять і значно скорочувати латентність звернення до даних.

У результаті ми бачимо, що підсистема пам'яті в процесорах K10 зазнала змін на краще. Але все ж таки треба відзначити, що по ряду характеристик вона потенційно поступається підсистемі пам'яті в процесорах Intel. Це відсутність спекулятивної завантаження в обхід запису за ще невідомою адресою, нижча асоціативність кеша L1D, вужча (за темпом передачі) шина між кешами L1 і L2, менший обсяг L2 і простіша передвиборка. Незважаючи на вдосконалення, передвиборка Core 2 потенційно потужніша, ніж у K10: у останнього, наприклад, відсутня передвиборка за адресами інструкцій, що дозволяє відстежувати поведінку окремих інструкцій, а також передвиборча L2 в L1, що дозволяє ефективно маскувати латентність L2. Ці фактори по-різному можуть впливати на різні програми, але в ряді випадків можуть забезпечувати більш високу продуктивність процесорів Intel.

Розглянемо коротко, які нововведення несе нам архітектура K10.

Нові команди

Процесор K10 тепер підтримує кілька нових команд, які розширюють його можливості.

1. Команди розширених бітових операцій над регістрами загального призначення:

LZCNT - Count Leading Zeros - підраховує кількість старших нульових бітів в операнді;
POPCNT - Bit Population Count - підраховує кількість одиничних бітів в операнді.

2. Команди обробки SSE-регістрів, звані SSE4a:

EXTRQ - витягує задану кількість бітів із заданої позиції в молодшій 64-бітній частині SSE-реєстру;
INSERTQ – вставляє задану кількість бітів у задану позицію у молодшій 64-бітній частині SSE-реєстру;
MOVNTSS, MOVNTSD – команди потокового (без використання кеш-пам'яті) збереження скалярних речових значень.

Розширення системи команд, зване SSE4a – самостійне, воно не перетинається з новими розширеннями Intel, званими SSE4.1 і SSE4.2.

Віртуалізація

AMD продовжила вдосконалювати свою технологію віртуалізації, яка використовується для запуску кількох операційних систем на одному комп'ютері. Одним із найбільш значних покращень віртуалізації стало використання вкладених таблиць сторінок (Nested Paging). У цьому режимі таблиці сторінок віртуальних машин вкладено у глобальну таблицю сторінок гіпервізора. При відсутності посилання на сторінку в TLB операції табличного перетворення виконуються процесором автоматично, на відміну від "тіньового" керування сторінками (Shadow Paging), яке потребує великої кількості ресурсів для керування табличними перетвореннями віртуальних машин.


За деякими даними, завдяки використанню вкладених таблиць сторінок швидкість роботи програм у віртуальній машині зростає до 40 % порівняно зі швидкістю виконання цих програм при використанні "тіньових" таблиць сторінок.

Управління живленням та частотою

У нових процесорах K10 впроваджується нова схема управління живленням та частотою ядер. Кожне з ядер тепер може працювати незалежно від інших на своїй частоті, яка динамічно змінюється в залежності від навантаження кожного з ядер.


Мал. 8. Незалежне керування частотою
ядер у процесорах K10


При цьому те, яким чином погоджуватиметься частота роботи загального для всіх ядер кешу L3, поки залишається невідомим. Напруга на всіх ядрах однакова і визначається навантаженим ядром. Контролер пам'яті керує своєю напругою незалежно від ядер і може знижувати його за відсутності великого навантаження.

Висновки

Вся інформація щодо нових процесорів AMD поки що не опублікована, тому на нас ще можуть чекати сюрпризи. Однак основні висновки з мікроархітектури зробити вже можна. Новий процесор AMD завдяки численним поліпшенням ядра обіцяє суттєвий прорив у продуктивності в порівнянні зі своїм попередником, особливо в додатках з інтенсивними речовими обчисленнями. У великому спектрі програм процесор буде здатний боротися на рівних з одночастотними процесорами Intel і перемагати їх. Додатковий приріст продуктивності можуть отримати програми, написані з урахуванням нових унікальних можливостей процесора, таких як ефективне невирівняне завантаження та підтримка великих 1-ГБ сторінок. Однак у процесорі є й слабкі, в порівнянні з процесорами Intel, сторони – це підсистеми кешування та передвиборки, які можуть негативно вплинути на продуктивність у ряді додатків. Але найголовнішим недоліком у боротьбі за найвищу продуктивність на стартовому етапі швидше за все стане недостатньо висока частота. Побажаємо ж компанії AMD якнайшвидшого освоєння нових частот і продовжимо стежити, як обидві компанії продовжать боротьбу і будуть удосконалювати свої процесори в боротьбі за нас, споживачів.

Автор висловлює подяку Марії Маліч та Сергію Романову aka GReY за допомогу у підготовці статті.

Перша згадка про мікроархітектуру наступного покоління з'явилася у 2003 році, на форумі Microprocessor Forum 2003. На ньому наголошувалося, що в нову мікроархітектуру буде покладено багатоядерність процесорів, які працюватимуть на тактових частотах до 10 ГГц. Пізніше тактові частоти у кілька разів занижені. Перші офіційні згадки AMD про розробку чотириядерних процесорів з'явилися в травні в стратегічному плані, опублікованому терміном до 2009 року.

Щоправда, тоді нова мікроархітектура значилася під кодовою назвою AMD K8L, і лише в лютому 2007 року було затверджено остаточне найменування AMD K10.

Процесори, засновані на покращеній архітектурі AMD K8, повинні були стати першими чотириядерними процесорами AMD, а також першими процесорами на ринку, в якому всі 4 ядра розташовані на одному кристалі (раніше ходили чутки про появу чотириядерного процесора AMD, що представляє собою два двоядерні) .

Особливості архітектури

Основною відмінністю процесорів покоління K10 від своїх попередників на базі AMD K8 є об'єднання чотирьох ядер на одному кристалі, оновлення протоколу Hyper-Transport до версії 3.0, загальний всім ядер кеш L3, а також перспективна підтримка контролером пам'яті DDR3 . Самі ядра також модернізували в порівнянні з ядрами AMD K8.

Direct Connect Architecture

  • Дозволяє збільшити продуктивність та ефективність шляхом прямого з'єднання контролера пам'яті та каналу введення-виведення з ядром.
  • Розроблено для одночасного виконання як 32-бітових, так і 64-бітових обчислень.
  • Інтеграція контролера пам'яті стандарту DDR2 (аж до режиму 533 (1066) МГц, а також з перспективною підтримкою DDR3)

Переваги:

  • Збільшення продуктивності програм шляхом скорочення затримок при зверненні до пам'яті
  • Розподіляє смугу пропускання пам'яті залежно від запитів
  • Технологія Hyper-Transport забезпечує з'єднання на піковій швидкості до 16,0 ГБ/с для запобігання затримкам
  • До 33,1 ГБ/с сумарної пропускної спроможності між процесором та системою (з урахуванням шини Hyper-Transport та контролера пам'яті)

AMD Balanced Smart Cache

Загальний для всіх ядер кеш L3 об'ємом 2 МБ на додаток до 512 КБ L2 кешу для кожного ядра. Перевага - скорочення затримок при зверненні до даних, що часто використовуються, для збільшення продуктивності.

AMD Wide Floating Point Accelerator

128-бітний FPU для кожного ядра. Перевага - прискорення вибірки та обробки даних у обчисленнях з плаваючою комою.

HyperTransport

  • Один 16-бітовий канал зі швидкістю 4000 MT/s
  • З'єднання Hyper-Transport з піковою швидкістю до 8,0 ГБ/сек і до 16,0 ГБ/сек при роботі в режимі Hyper-Transport 3.0
  • До 33,1 ГБ/с сумарної пропускної спроможності між процесором та системою (з урахуванням шини Hyper-Transport та контролера пам'яті)

Інтегрований контролер пам'яті

Перевага - швидкий доступ до системних ресурсів збільшення продуктивності.

AMD-V

Апаратний набір функцій розроблених для збільшення продуктивності, надійності та безпеки в існуючих та майбутніх середовищах віртуалізації, що дозволяє віртуальним машинам безпосередньо звертатися до виділеної пам'яті.

Cool’n’Quiet 2.0

  • Удосконалена система керування живленням, що автоматично регулює продуктивність процесора в залежності від навантаження
  • Зниження споживання енергії та швидкості обертання кулера в режимі простою

CoolCore

  • Дозволяє знижувати енергоспоживання шляхом відключення частин процесора, що не використовуються.
  • Роздільна система для контролера пам'яті та логіки процесора дозволяє керувати напругою та відключати їх незалежно один від одного
  • Працює автоматично без необхідності підтримки з боку драйвера чи BIOS
  • Дозволяє незалежно керувати частотами кожного ядра
  • Швидкість перемикання режимів роботи дорівнює одному такту процесорного ядра

TLB bug

Технічні характеристики

  • техпроцес: 65нм SOI
  • площа ядра: 283 мм²
  • кількість транзисторів: 450 млн
  • напруга: 1,05-1,38 В
  • Socket: AM2+ (940 pin) / Socket F (1207 pin)

Варіанти

Для настільних комп'ютерів

Процесор Phenom для настільних систем, а також Opteron серій 13хх для сокету Socket AM2+. Всі процесори серії Phenom побудовані на Socket AM2+, сумісному з Socket AM2. При використанні процесорів Phenom на материнських платах із підтримкою Socket AM2 він позбавляється підтримки шини Hyper-Transport 3.0, роздільного тактування контролера пам'яті (північного мосту), кешу L3 та ядер, а також деяких енергозберігаючих функцій.

Для серверів

Opteron серій 83хх та 23хх для серверів.

Процесори серії Opteron також отримають можливість роботи у старих материнських платах, заснованих на Socket F . В обох випадках буде потрібно лише оновлення BIOS материнської плати. Всі ці процесори побудовані на архітектурі AMD64, вони здатні працювати з 32-бітним x86, 16-бітним і AMD64 кодом.

Оригінальне ядро ​​K10 має кодове ім'я "Barcelona" для співпроцесорів, призначених для серверів. Пізніше випустили процесори для настільних комп'ютерів, там ядро ​​K10 отримало назву «Agena».

Процесори з ядром K10

З появою процесорів покоління К10 в асортименті AMD змінилися їх позначення - під новими позначеннями ховаються як моделі, засновані на К10, і на AMD K8.

Система позначень процесорів AMD
Серія процесорів Позначення
Phenom X4 quad-core ( Agena) X4 9хх0
Phenom X3 triple-core ( Toliman) X3 8хх0
Athlon dual-core ( Kuma) 7хх0
Athlon single-core ( Lima) 1хх0
Sempron single-core ( Sparta) 1хх0

Ядро Barcelona

  • AMD Opteron 3G 8350, 4 ядра, 2,0 ГГц, 75 Вт
  • AMD Opteron 3G 8347, 4 ядра, 1,9 ГГц, 75 Вт
23xx
  • AMD Opteron 3G 2350, 4 ядра, 2,0 ГГц, 75 Вт
  • AMD Opteron 3G 2347, 4 ядра, 1,9 ГГц, 75 Вт
  • AMD Opteron 3G 8356, 4 ядра, 2,3 ГГц, 75 Вт
  • AMD Opteron 3G 8354, 4 ядра, 2,2 ГГц, 75 Вт
23xx
  • AMD Opteron 3G 2356, 4 ядра, 2,3 ГГц, 75 Вт
  • AMD Opteron 3G 2354, 4 ядра, 2,2 ГГц, 75 Вт
  • AMD Opteron 3G 2352, 4 ядра, 2,1 ГГц, 75 Вт
13xx
  • AMD Opteron 3G 1356, 4 ядра, 2,3 ГГц, 75 Вт
  • AMD Opteron 3G 1354, 4 ядра, 2,2 ГГц, 75 Вт
  • AMD Opteron 3G 1352, 4 ядра, 2,1 ГГц, 75 Вт
  • AMD Opteron 3G 8347 HE, 4 ядра, 1,9 ГГц, 55 Вт
  • AMD Opteron 3G 8346 HE, 4 ядра, 1,8 ГГц, 55 Вт
23хх
  • AMD Opteron 3G 2347 HE, 4 ядра, 1,9 ГГц, 55 Вт
  • AMD Opteron 3G 2346 HE, 4 ядра, 1,8 ГГц, 55 Вт
  • AMD Opteron 3G 2344 HE, 4 ядра, 1,7 ГГц, 55 Вт
  • AMD Opteron 3G 8360 SE, 4 ядра, 2,5 ГГц, 95 Вт
  • AMD Opteron 3G 8358 SE, 4 ядра, 2,4 ГГц, 95 Вт
23хх
  • AMD Opteron 3G 2360 SE, 4 ядра, 2,5 ГГц, 95 Вт
  • AMD Opteron 3G 2358 SE, 4 ядра, 2,4 ГГц, 95 Вт

Після прориву початку "нульових" AMD благополучно повернулася у свій звичайний стан вічно наздоганяючого і, незважаючи на досить цікаві і, безперечно, передові технічні рішення, навіть не намагається конкурувати з Intel за обсягами продажу. За даними на середину 2009 року, частку компанії припадає близько 14,5% ринку мікропроцесорів. При цьому фірмові "фішки" чіпів AMD - наприклад, 64-розрядні розширення інструкцій або вбудований в процесор контролер оперативної пам'яті - давно використовуються в чіпах головного конкурента.

Продукція AMD сьогодні займає дві вельми вузькі ніші: ультрабюджетних процесорів для будівництва комп'ютерів економ-класу та продуктивних моделей, що пропонуються в три-п'ять разів дешевше порівнянних за можливостями чіпів Intel.

Саме цим пояснюється той факт, що на прилавках магазинів можна виявити процесори AMD різних сімейств і поколінь - від доісторичних Sempron і Athlon на базі заслуженої архітектури K8 для роз'єму Socket 939 до ультрасучасних шестиядерних Phenom II X6. Як би там не було, в AMD зараз роблять ставку на архітектуру K10, тому йтиметься саме про процесори, сконструйовані на її основі. До них відносяться Phenom та Phenom II, а також їх бюджетний варіант, сором'язливо названий Athlon II.

Історично першими чіпами на базі K10 були чотириядерні Phenom X4 (кодова назва Agena), випущені у листопаді 2007 року. Трохи пізніше, у квітні 2008 року з'явилися триядерні Phenom X3 – перші у світі центральні процесори для настільних комп'ютерів, у яких на одному кристалі розташовано три ядра. У грудні 2008 року з переходом на 45-нанометровий техпроцес було представлено оновлене сімейство Phenom II, а в лютому чіпи отримали новий роз'єм Socket AM3. Серійний випуск чотириядерних Phenom II X4 розпочався в січні 2009 року, триядерних Phenom II X3 - у лютому 2009 року, двоядерних Phenom II X2 - в червні 2009 року, а шестиядерних Phenom II X2 - буквально тільки.

Athlon II - сучасна заміна Sempron - є Phenom II, позбавлений однієї з найважливіших його переваг - великої кеш-пам'яті третього рівня (L3), загальної всім ядер. Випускається у дво-, трьох-і чотириядерних варіантах. Athlon II X2 виробляється з червня 2009 року, X4 – з вересня 2009 року, а X3 – з листопада 2009 року.

Архітектура AMD K10

Які важливі відмінності архітектури K10 від K8? Перш за все, в процесорах K10 всі ядра виконані на одному кристалі та забезпечені виділеною кеш-пам'яттю L2. У чіпах Phenom/Phenom 2 та серверних Opteron також передбачена загальна для всіх ядер кеш-пам'ять L3, обсяг якої становить від 2 до 6 Мбайт.

Друга важлива перевага K10 - нова системна шина HyperTransport 3.0 з піковою пропускною здатністю до 41,6 Гбайт/с в обох напрямках у 32-бітному режимі або до 10,4 Гбайт/с в одному напрямку в 16-бітному режимі та частотою до 2, 6 ГГц. Нагадаємо, що максимальна робоча частота попередньої версії HyperTransport 2.0 становить 1,4 ГГц, а пікова пропускна здатність – до 22,4 або 5,6 Гбайт/с.

Широка шина особливо важлива для багатоядерних процесорів, при цьому HyperTransport 3.0 передбачена можливість конфігурації каналу, що дозволяє надати кожному ядру власну незалежну лінію. Крім того, процесор K10 здатний динамічно змінювати ширину та робочу частоту шини пропорційно до власної частоти.

При цьому слід зазначити, що в даний час у чіпах AMD шина HyperTransport 3.0 працює з набагато меншою швидкістю, ніж максимально допустима. Залежно від моделі застосовуються три режими: 1,6 ГГц та 6,4 Гбайт/с, 1,8 ГГц та 7,2 Гбайт/с та 2 ГГц та 8,0 Гбайт/с. У чіпах, що випускаються, поки не використовуються ще два закладені в стандарт режиму - 2,4 ГГц і 9,6 Гбайт/с і 2,6 ГГц і 10,4 Гбайт/с.

У процесори K10 вбудовуються два незалежні контролери оперативної пам'яті, що прискорює доступ до модулів у реальних умовах експлуатації. Контролери можуть працювати з пам'яттю DDR2-1066 (моделі для роз'єму AM2+ та AM3) або DDR3 (чіпи для роз'єму AM3). Оскільки інтегрований у Phenom II та Athlon II для Socket AM3 контролер підтримує обидва типи оперативної пам'яті, а роз'єм AM3 назад сумісний із AM2+, нові ЦП можуть встановлюватися на старі плати для AM2+ та працювати з пам'яттю DDR2. Це означає, що при покупці Phenom II для апгрейду вам не доведеться відразу ж змінювати і системну плату, а також набувати оперативної пам'яті іншого типу - як, наприклад, у випадку з чіпами Intel i3/i5/i7.

У мікропроцесорах з архітектурою K10 реалізовано цілий набір модернізованих технологій енергозбереження - AMD Cool"n"Quiet, CoolCore, Independent Dynamic Core та Dual Dynamic Power Management. Ця складна система дозволяє автоматично знижувати енергоспоживання всього чіпа в режимі простою, забезпечує незалежне управління живленням контролера пам'яті та ядер і здатна відключати елементи процесора, що не використовуються.


Нарешті, самі ядра також були значно вдосконалені. Було перероблено конструкцію блоків вибірки, передбачення переходів і розгалужень, диспетчеризації, що дозволило оптимізувати завантаження ядра і зрештою підвищити продуктивність. Розрядність блоків SSE була збільшена з 64 до 128 біт, з'явилася можливість виконувати 64-розрядні інструкції як одну, була додана підтримка двох додаткових інструкцій SSE4a (не плутати з наборами інструкцій SSE4.1 і 4.2 в процесорах Intel Core).

Тут необхідно згадати про конструктивний дефект, виявлений у серверних Opteron (кодова назва Barcelona) і в Phenom X4 і X3 перших випусків - так званої "помилки TLB", яка свого часу призвела до повного припинення постачання всіх Opteron ревізії B2. У дуже рідкісних випадках при високому завантаженні через конструктивну нестачу блоку TLD кеш-пам'яті L3 система могла поводитися нестабільно та непередбачувано. Дефект був визнаний критично важливим для серверних систем, через що і призупинено відвантаження всіх випущених Opteron. Для десктопних Phenom був випущений спеціальний патч, дефектний блок, що відключає засобами BIOS, але при цьому продуктивність процесора помітно падала. З переходом на ревізію B3 проблема повністю усунута, і у продажу такі чіпи вже давно не зустрічаються.

Актуальний модельний ряд

Хоча топові процесори AMD повністю програють верхнім моделям Intel, в сегменті масових дво- і чотириядерних чіпів вже тривалий час зберігається певний паритет. При цьому сама платформа AMD помітно дешевша - менше коштує не тільки сам процесор, а й системна плата. Особливо помітна ця різниця, якщо порівнювати бюджетні машини на Phenom II X3 і X4 з комп'ютерами на базі Core i3, які трохи продуктивніші, але майже вдвічі дорожчі. А якщо ще більше пожертвувати потужністю і вибрати Athlon II, то ПК буде більш ніж удвічі дешевшим!

Що ж до більш продуктивних машин, то конкурувати з Core i5 можуть тільки найпотужніші моделі Phenom II X4, а нові шестиядерні X6 коректно порівнювати лише з наймолодшими чотириядерними Core i7.

Всі Athlon II і Phenom II, що випускаються, розраховані на встановлення в роз'єм AM3, за винятком двох моделей: Phenom II X4 940 і 920, які встановлюються в Socket AM2+ і працюють тільки з оперативною пам'яттю DDR2. Чіпи Phenom призначені виключно для роз'єму AM2. Процесор для роз'єму AM2+ не можна встановити в гніздо AM3, проте, як ми вже казали, чіпи AM3 можна встановлювати на плати з роз'ємом AM2+.

Судячи з усього, AMD поступово виводить із використання чіпи для Socket AM2 і, як і Intel, робить ставку на моделі з підтримкою більш сучасної оперативної пам'яті DDR3. Схожі за тактовою частотою та іншими характеристиками моделі для AM3 і AM2+ стоять практично однаково, а якщо врахувати зворотну сумісність нових чіпів, то придбання перших Phenom немає особливого сенсу. Тому надалі ми розглядатимемо виключно Phenom II та Athlon II.

Як Athlon II, так і Phenom II доступні у дво-, трьох-і чотириядерному виконанні (X2, X3, X4), а "феноми" - також у шестиядерному. Випускаються також модифікації Black Edition, що відрізняються від стандартних розблокованим множником, що спрощує розгін.

На жаль, більша частина нових чіпів AMD знову поступаються термопакету аналогічним за характеристиками моделям Intel, що означає велику вимогливість до систем охолодження і підвищене енергоспоживання. Для багатоядерних Phenom II типовий TDP – 80, 95 або 125 Вт. Продаються спеціальні економічні (65 Вт) модифікації з буквою "e" після індексу моделі, але вони помітно повільніші за "звичайні" варіанти, а коштують дорожче.

Процесори Athlon II X2 є "справжні" двоядерні чіпи, а не чотириядерники з двома неробочими ядрами, як Phenom II X2. А ось Athlon II X3 – це Athlon II X4 c одним нефункціональним ядром. Усі Athlon II випускаються за 45-нанометровою технологією.

Кожне ядро ​​"атлонів" X2, X3 та X4 оснащується 128 Кбайт кеш-пам'яті L1 та 512 Кбайт кешу другого рівня. Однак, на відміну від Phenom II, у них немає спільної кеш-пам'яті L3, а це означає, що процесори частіше звертатимуться до свідомо повільнішої системної пам'яті. Результат - обмежена продуктивність у ресурсоємних додатках, у тривимірній графіці та комп'ютерних іграх. Втім, у поєднанні з гарною відеокартою системи на Athlon II демонструють гідну ігрову продуктивність.

Phenom II відчувають сильну конкуренцію з боку Core i3 та i5, але вони безумовно виграють за вартістю порівнянної за характеристиками системи. Як і в Athlon II, кожне ядро ​​"фенома" має 128 Кбайт кеш-пам'яті L1 і 512 Кбайт кеш-пам'яті L2. При цьому в Phenom II передбачено ще й кеш-пам'ять третього рівня, загальну для всіх ядер. Майже у всіх "феномах" - і дво-, і трьох-, і чотирьох- і шестиядерних - 6 Мбайт кешу L3, за винятком трьох молодших моделей X4 з індексами 805, 810 і 820, у яких всього 4 Мбайта L3.

У другої частини статтіми познайомимо вас з короткою довідковою інформацією про основні технічні характеристики всіх процесорів AMD Athlon II і Phenom II, що випускаються в даний час, і з орієнтовними роздрібними цінами на них в російських магазинах. А насамкінець ми поговоримо про найцікавіші на наш погляд моделі, на які варто звернути особливу увагу при виборі.