телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Съвременни настолни процесори с архитектура x86. Петнадесет процесора Intel x86, които създадоха история Какво е x86 архитектура

Веднъж бях много объркан, когато видях x86 или x64 в описанието на програмите и не можах да разбера защо, ако за 64-битов те показват x64, а след това за 32-битов x86, а не x32. Последното трябва да е много по-познато и логично, а x86 не само е невъзможно да се запомни, тази цифра противоречи на логиката: математически 86 е повече от 64, но в действителност се оказва, че е наполовина по-малко. По този начин можете дори да направите гатанка от числата „x86 x64 x32“. Но всъщност...

x86 е равно на x32 и също е равно на x64

С цялото това объркване в действителност всичко се оказва просто и, както винаги, грешката отива при онези автори, които пишат комбинация от x86 и x64 заедно. Това е просто грешно, въпреки факта, че почти всички пишат по този начин.

Факт е, че x86 е микропроцесорна архитектура и хардуерна платформа, която е приложима за тридесет и две битови и шестдесет и четири битови програми. Името x86 произлиза от името на първия процесор Intel i8086 и редица следващи, в които накрая винаги се добавя 86. След известно време цифровите обозначения на новите процесори започнаха да се заменят с имена, така че обществеността научи за Pentium и Celeron, но платформата x86 не се е променила и до днес.

Има две значения, но три символа? x86, x32 и x64 - как се пише правилно?

И ако x86 е архитектурата на процесора, то x32 и x64 са неговия битов капацитет - адресното пространство, както и количеството информация, което процесорът може да обработи за един такт.

Когато пишат за програмна съвместимост, като посочват x86 битова дълбочина, предполагайки 32-битова платформа, това е неправилно и само подвеждащо. Правилно е да посочите x86_32bit или x86_64bit. Или интуитивното съкратено x32 или x64.

Така че можем да обобщим: сега x86 се обозначава по старомодния начин (дори Microsoft е виновен за това), когато тази платформа беше уникална и никой все още не познаваше 64-бита. Когато се появи платформата x64, те започнаха да я обозначават такава, каквато е, но предишната 32-битова платформа в повечето случаи остана като x86. А сега не е актуално, грешно е и обърква тези, които не разбират същината. И сега го разбирате. :)

x32 или x64? Какво да избера? Кое е по-добро?

Много често възниква въпросът: трябва ли да избера x32 или x64 операционна система? Тоест тридесет и два бита или шестдесет и четири бита?
Този въпрос е риторичен, теоретичен и спорен. Очевидно x64 е по-добър, но не винаги и не ако използвате Windows. Не, всеки Windows x64 работи малко по-бързо от Windows x32, но само ако имате всички програми и всички драйвери за 64-битова система. Много често, ако компютърът е модерен, той обикновено има всички системни драйвери за компонентите си. Но проблемът тогава се крие в програмите и особено видео и аудио кодеците. Нещо със сигурност няма да стане. И ако тридесет и две битови програми могат да работят на x64 система, тогава драйверите и кодеците за нея също са необходими x64. Година след година този проблем изчезва, но все още не е напълно разсеян. При x32 системите няма такива проблеми и е по-добре да изберете такава за вашия дом.
p.s. Преди 2010 г. наистина имаше дилема за избор на 32-битова или 64-битова операционна система. Причините са описани в параграфа по-горе. Оттогава минаха пет години и този проблем вече не се наблюдава. Разбира се, по-добре е да инсталирате 64-bit, без дори да мислите за това, освен ако, разбира се, няма някои специални важни причини в полза на 32-bit.

Така че сега имате проблем, ако напишете библиотека, която ще се използва както от код от старата школа, написан с wchar_t, дефиниран като псевдоним за неподписан кратък, така и от код от нова школа, написан с wchar_t като отделен вътрешен тип. Какъв тип данни трябва да използвате за параметри на низ?

Това е превод на „Тъжната история на Unicode printf-style спецификатори на формат във Visual C++“.

Windows внедри Unicode по-рано от повечето други операционни системи. В резултат на това решенията на Windows за много проблеми се различават от тези, направени от онези, които са изчакали прахта да се уталожи¹. Най-яркият пример за това е използвайки Windows UCS-2 като Unicode кодиране. Тогава това беше кодирането, препоръчано от Unicode Consortium, тъй като Unicode 1.0 поддържаше само 65"536 знака². Unicode Consortium промени решението си пет години по-късно, но тогава беше твърде късно за Windows, който вече беше пуснал Win32s, Windows NT 3.1, Windows NT 3.5, Windows NT 3.51 и Windows 95 - всички от които използват UCS-2³.

Но днес ще говорим за форматиращи низове в стил printf.

Това е преводът на Ако FlushInstructionCache не прави нищо, защо трябва да го извиквате, преразгледано.

От вас се очаква да извикате функцията FlushInstructionCache, когато генерирате или модифицирате изпълним код по време на изпълнение - така че процесорът, когато изпълнява вашия генериран/модифициран код, да чете инструкциите, които сте написали, вместо стари инструкции, които може да останат в инструкцията на процесора кеш памет.

Преди това научихме това. Това е така, защото просто извикване на функция беше достатъчно, за да изчисти кеша на командите.

Но в Windows NT функцията FlushInstructionCache го прави истинска работа, защото трябва да уведоми всички други процесори да изчистят кеш паметта си.

Въпреки това, ако погледнете Windows 10, ще откриете, че функцията FlushInstructionCache изглежда като версията на Windows 95: тя не прави нищо.

Какъв е проблема?


Кратка историческа справка.

Еволюцията на микропроцесорите исторически предполагаше увеличаване на ширината на целочислените регистри, т.е. максималният брой битове, образуващи числа, върху които е възможно да се извърши елементарно аритметични операциичрез изпълнение на съответните команди. Също така обемът на адресируемия адрес, който може да бъде достъпен, зависи линейно от този параметър (без трикове, които забавят работата).
Най-първият Микропроцесор Intel 4004 беше 4-битов, а основателят на семейството x86, т.е. Първият процесор, който използва най-популярния базов набор от инструкции до момента, Intel 8086, беше 16-битов. Ерата на 32-битовите микропроцесори започва през 1985 г. с Intel 386, оттогава до Intel Pentium 4 и AMD Athlon XP включително, командната система беше само разширена (MMX, SSE/SSE2/SSE3, 3Dnow!), но въпреки увеличаването на ширината на външните шини и кеш шините до 256 бита в някои случаи, броят на битовете на целочислени регистри с общо предназначениеостана равен на 32.
Междувременно почти всички високопроизводителни процесори от по-късни архитектури от x86 (главно RISC варианти) отдавна са 64-битови. (Първият такъв процесор, MIPS R3000, се появи през 1994 г. и беше известен главно за работни станции и сървъри SGi). Освен това Intel вече рекламираше второто поколение на собствените си първоначално 64-битови процесори с архитектура IA64 (базирана на VLIW технология) с търговското име Itanium, които нямаха софтуерна x86 съвместимост.
Въпреки това през 2002 г. AMD представи разработка на архитектурата x86, наречена AMD64, която е друго разширение на набора от инструкции x86, но предназначена да работи с 64-битови цели числа с общо предназначение. Хардуерно, този набор от команди е приложен за първи път на процесори AMD K8: семейство Opteron/Athlon64, които са напълно софтуерно съвместими с конвенционалните x86 процесори.
През следващите две години стана ясно, че пълният потенциал на тези процесори е възможен само при работа в операционна система, която използва подходящ набор от инструкции и 64-битово адресиране на паметта, което на първо място прави възможно работата без всякакви ограничения с линейни масиви от данни над 4 GB.
На първо място, операционните системи от семейството на Linux бяха пренесени към новите процесори, заедно с доста представителен набор от приложения, които бяха критични за скоростта на процесора и изискваха големи количества памет. Скоростта и стабилността на новите процесори, както и основните трудности при създаването на настолен процесор с архитектура Intel IA64, подтикнаха компания Microsoftзапочнете да пренасяте вашата операционна система към тази платформа.
От този момент нататък стана ясно, че наборът от инструкции AMD64 ще се превърне в нов индустриален стандарт и Intel нямаше друг избор освен да добави към своите процесори пълен аналог на набора от инструкции AMD64, наречен EM64T (Extended Memory 64-bit Technology) в изпълнение на Intel.

Как 64-битовите x86 процесори са фундаментално различни от 32-битовите?
В допълнение към възможността за бърза работа с 64-битови цели числа и директно адресиране на несравнимо големи обеми както виртуални, така и физическа памет, новият индустриален стандарт за x86 процесори елиминира три основни недостатъка на тази архитектура:
1) Удвояване на броя на целочислените регистри с общо предназначение - според този параметър всички потомци на Intel 386 бяха много далеч зад съвременните процесори RISC и VLIW. Използването на тези регистри от компилатора може значително да подобри ефективността на много алгоритми.
2) Използвайте за операции с плаваща запетая не стека, а регистрите, използвани в набора от инструкции SSE2. Има много забележимо въздействие върху производителността, но също така изисква повторно компилиране софтуер.
3)DEP - Data Execution Protection (защита срещу прехвърляне на съдържанието на сегмент от данни за изпълнение при възникване на грешка при препълване), наричана още EVP (Enhanced Virus Protection), значително усложнява работата на определени класове зловреден софтуер, предимно червеи и троянски коне. Не изисква повторно компилиране на софтуер; поддържа се и от 32-битови операционни системи на Microsoft, като се започне с WindowsXP SP2 и Windows 2003 Server SP1.

Какво ми е необходимо, за да стартирам 64-битови x86 приложения на моя компютър?
1) 64-битов x86 процесор. Към момента на писане на често задаваните въпроси, това бяха съответно процесори на AMD, поддържащи технологията AMD64 и процесори на Intel с EM64T. По-конкретно става дума за AMD Opteron/Athlon64/Turion 64 (мобилен аналог на Athlon64)/Sempron 64/Phenom64. Intel поддържа EM64T в процесори Celeron D 3X1/3X6, Pentium4 5X1/5X6/6XX, Pentium D, Pentium XE (не Pentium4 XE!), всички Xeon DP с 800 MHz шина и XeonMP с 667 MHz шина, както и повечето бъдещи Процесори на Intelс изключение на Pentium M и Celeron M.

Актуализация от януари 2008 г. - в момента наборът от инструкции AMD64/EM64T най-накрая се превърна в стандарт за всички произведени мобилни, настолни и сървърни x86 процесори от Intel и AMD.

Също така трябва да се уверите, че процесорът е правилно разпознат от BIOS на дънната платка (това означава, че необходимият микрокод е зареден в него; неспазването на това условие може да доведе до сериозни проблеми с компютъра).В някои ситуации актуализация може да се наложи BIOS на дънната платкатакси. Това се отнася преди всичко за процесорите на Intel, тъй като не всички дънни платки LGA775 първоначално поддържаха такива процесори.
2) Операционна система.
Към момента на писане на ЧЗВ са налични следните операционни системи:
Microsoft Windows XP Professional x64 Edition, Microsoft Windows 2003 Server x64 Editions (Standard/Enterprise/Datacenter), Windows сървър 2008, Sun Solaris и различни опции Linux и FreeBSD (подробното обсъждане на характеристиките на unix-подобните операционни системи е извън обхвата на този FAQ), Windows Vista също има x64 версии на всички издания с изключение на първоначалните.
3) Драйвери. Всички драйвери, работещи в системното ядро, трябва да са 64-битови, обратна съвместимостне е предоставено. За най-често срещаните компоненти ( видео карти nVidia GeForce и ATi Radeon, чипсети и дискови контролери Intel, VIA, nVidia) такива драйвери вече са написани.

Ще работят ли обикновените приложения на 64-битов Windows?
1) 32-битови приложения за Microsoft Windows - да, ще има и в някои ситуации е възможно увеличение на производителността в сравнение с работа на същия компютър, но под 32-битова ОС (особено ако приложението използва много големи количества RAM), но въпреки това 32-битовите приложения нямат достъп до 64-битовите DLL и Active Controls и обратно. (На практика това доведе до факта, че като част от 64-битов Windows Internet Explorerоставен 32-битов, за да работи правилно със страници, съдържащи ActiveX елементи.)
2) 16-битови приложения за Microsoft Windows - не, с изключение на няколко инсталационни програми.
3) DOS приложения - бр. (По време на писането на ЧЗВ стана известно, че добре доказаният OpenSource емулатор DosBox е пренесен към 64-битови версии на Windows, което почти напълно премахва възможни проблеми)
4) Windows приложения за IA64 (Itanium) - бр.

Какво ще ми даде всичко това в момента и какво може да ми даде в бъдеще?
За обикновени потребителски ежедневни програми прехвърлянето им към 64-битова платформа в момента не осигурява качествен скок в производителността. Единствените изключения (и то относителни) са някои от най-новите високотехнологични игри.
Програмите за работа с бази данни получават най-голяма полза от прехода към 64-битови и повече от повече обемизползваните данни, толкова по-забележима печалба, програми за CAD/CAE (компютърно проектиране, моделиране и др.), както и програми за създаване на цифрово съдържание (обработка на изображения, звук, видео), др. подробна информацияПо правило вече можете да разберете на уебсайта на разработчика на софтуера, който използвате - по правило никой не крие наличието на 64-битови версии.
От програмите, чието пренасяне към 64-битов Windows е завършено или е пред завършване, заслужава да се спомене Microsoft SQL сървър 2000 и 2005, Cakewalk Sonar 4.0, CryTek FarCry, Epic Unreal Tournament 2004, SiSoft Sandra 2005 Пълен списъкМоже да се намери софтуер, който е на различни етапи на пренасяне към Windows x64.

Сравнителна таблица на ограниченията за максималното количество използвана RAM и броя на процесорите за 32 и 64-битови версии на операционни системи от Microsoft:

Общи ограничения за обема на използваната памет 32-битов 64-битов
Пълно виртуално адресно пространство 4 ГИГАБАЙТА 16 TB
Виртуално адресно пространство за 32-битов процес 2 GB (3 GB с ключ за изтегляне / 3 GB) 4 GB, ако програмата е компилирана с ключа /LARGEADDRESSAWARE (2 GB без него)
Виртуално адресно пространство за 64-битов процес Не е приложимо 8 TB
Страниран пул 470 MB 128 GB
Пул без страници 256 MB 128 GB
Вписване в таблицата на системните страници (PTE) 660 MB до 900 MB 128 GB
Ограничения за физическа памет и брой процесори 32-битов 64-битов
Windows XP Professional 4 GB / до 2 CPU 128 GB / до 2 CPU
Windows Server 2003, стандартно издание 4 GB / до 4 CPU 32 GB / до 4 CPU
Windows Server 2003, Enterprise Edition 64 GB / до 8 CPU 1 TB / до 8 CPU
Windows Server 2003, Datacenter Edition 64 GB / 8 - 32 CPU 1 TB / 8 - 64 CPU
Windows Server 2008, уеб издание 4 GB / до 4 CPU 32 GB / до 4 CPU
Windows Server 2008, стандартно издание 4 GB / до 4 CPU 32 GB / до 4 CPU
Windows Server 2008, Enterprise Edition 64 GB / до 8 CPU 2 TB / до 8 CPU
Windows Server 2008, Datacenter Edition 64 GB / до 32 CPU 2 TB / до 64 CPU
Windows Server 2008, HPC Edition - 128 GB / до 4 CPU

Информация за максималните поддържани размери на паметта за 64 бита Windows версии Vista може да се намери.


8086 беше първият x86 процесор - Intel вече бяха пуснали модели 4004, 8008, 8080 и 8085. Този 16-битов процесор можеше да работи с 1 MB памет на външна 20-битова адресна шина. Избраната от IBM тактова честота (4,77 MHz) беше доста ниска и до края на кариерата си процесорът работеше на 10 MHz.

Първите компютри използваха производно на процесора 8088, който имаше само 8-битова външна шина за данни. Интересното е, че системите за управление на американските совалки използват процесори 8086, а НАСА трябваше да закупи процесори през eBay през 2002 г., тъй като Intel вече не ги произвеждаше.

Intel 8086
Кодово име N/A
Дата на издаване 1979
Архитектура 16 бита
Шина за данни 16 бита
Адресна шина 20 бита
Макс. памет 1 MB
L1 кеш Не
L2 кеш памет Не
Тактова честота 4,77-10 MHz
ФСБ Еднаква честота на процесора
FPU 8087
SIMD Не
Технически процес 3000 nm
Брой транзистори 29 000
Консумация на енергия N/A
Волтаж 5 V
Кристална зона 16 mm²
Гнездо 40 пина


Издаден през 1982 г., процесорът 80286 беше 3,6 пъти по-бърз от 8086 при същата тактова честота. Можеше да обработва до 16 MB памет, но 286 все още беше 16-битов процесор. Той стана първият x86 процесор, оборудван с модул за управление на паметта (MMU), който позволява работа с виртуална памет. Подобно на 8086, процесорът не съдържа модул с плаваща запетая (FPU), но може да използва x87 копроцесорен чип (80287). Intel пусна 80286 с максимална тактова честота от 12,5 MHz, въпреки че конкурентите успяха да постигнат 25 MHz.

Intel 80286
Кодово име N/A
Дата на издаване 1982
Архитектура 16 бита
Шина за данни 16 бита
Адресна шина 24 бита
Макс. памет 16 MB
L1 кеш Не
L2 кеш памет Не
Тактова честота 6-12 MHz
ФСБ Равно на честотата на процесора
FPU 80287
SIMD Не
Технически процес 1500 nm
Брой транзистори 134 000
Консумация на енергия N/A
Волтаж 5 V
Кристална зона 49 mm²
Гнездо 68 щифт

386: 32-битов и с кеш


Intel 80836 беше първият x86 процесор с 32-битова архитектура. Издадени са няколко версии на този процесор. Двете най-известни са 386 SX (Single-word eXternal), който използва 16-битова шина за данни, и 386 DX (Double-word eXternal), който използва 32-битова шина за данни. Могат да се отбележат още две версии: SL, първият x86 процесор с поддръжка на кеш (външен) и 386EX, който беше използван в космическата програма (например телескопът Hubble използва този процесор).

Intel 80386 DX
Кодово име P3
Дата на издаване 1985
Архитектура 32 бита
Шина за данни 32 бита
Адресна шина 32 бита
Макс. памет 4096 MB
L1 кеш 0 KB (понякога има контролер)
L2 кеш памет Не
Тактова честота 16-33 MHz
ФСБ Равно на честотата на процесора
FPU 80387
SIMD Не
Технически процес 1500-1000 nm
Брой транзистори 275 000
Консумация на енергия 2 W при 33 MHz
Волтаж 5 V
Кристална зона 42 mm² @ 1 µm
Гнездо 132 контакта

Процесорът 486 стана емблематичен за мнозина, тъй като отбеляза началото на опита на цяло поколение с компютрите. Всъщност известният 486 DX2/66 отдавна се счита за минималната конфигурация за геймърите. Този процесор, издаден през 1989 г., имаше редица нови интересни характеристики като FPU копроцесор в чип, кеш данни и въведе умножител за първи път. Копроцесорът x87 е вграден в линията 486 DX (не SX). 8 KB кеш от първо ниво беше интегриран в процесора (първо с запис, след това с обратно запис с малко по-висока производителност). Беше възможно да се добави L2 кеш към дънната платка (работеща на честота на шината).

Второто поколение от 486 процесори придоби CPU множител, тъй като процесорът беше по-бърз от FSB, се появиха версии DX2 (2x множител) и DX4 (3x множител). Друг анекдот: "487SX", продаван като FPU за 486SX, по същество беше пълен процесор 486DX, който беше изключен и замени оригиналния процесор.

Intel 80486 DX
Кодово име P4, P24, P24C
Дата на издаване 1989
Архитектура 32 бита
Шина за данни 32 бита
Адресна шина 32 бита
Макс. памет 4096 MB
L1 кеш 8 кбайта
L2 кеш памет На дънна платка(при честота на FSB)
Тактова честота 16-100 MHz
ФСБ 16-50 MHz
FPU На чип
SIMD Не
Технически процес 1000-800 nm
Брой транзистори 1 185 000
Консумация на енергия N/A
Волтаж 5V - 3.3V
Кристална зона 81 - 67 mm²
Гнездо 168 контакта

DX4 имаше 16 KB кеш памет и повече транзистори - 1,6 млн. Този процесор, произведен по 600 nm технологичен процес с площ на матрицата 76 mm², консумира по-малко енергия от оригиналния 486 (при 3,3 V).


Pentium, представен през 1993 г., беше интересен по много причини. Той стана първият процесор x86, с който беше решено да се изоставят традиционните номера на моделите в полза на звучно име, тъй като Intel не можеше да създаде търговска марка само върху числа. В допълнение, процесорът стана известен със своята грешка. При първото поколение Pentium някои операции на разделяне доведоха до неправилен резултат. Intel замениха процесора, но щетите за компанията бяха значителни. Грешката, която се проявяваше много рядко, предизвика доста шум в ИТ пресата.

Pentium се продаваше в три различни линии, първата без множител на процесора, втората с множител (включително известния Pentium 166), а последната получи набор от SIMD инструкции за x86, наречен MMX. Pentium MMX имаше увеличен размер на L1 кеша и други незначителни подобрения. Процесорът Pentium беше първият x86 от Intel, който можеше да изпълнява две инструкции паралелно. За тези процесори L2 кеша се намираше на дънната платка (работеше на честота на FSB).

Intel Pentium (MMX)
Кодово име P5, P54
Дата на издаване 1993 1997
Архитектура 32 бита 32 бита
Шина за данни 64 бита 64 бита
Адресна шина 32 бита 32 бита
Макс. памет 4096 MB 4096 MB
L1 кеш 8 + 8 кбайта 16 + 16 кбайта
L2 кеш памет Дънна платка (при честота на FSB)
Тактова честота 60-200 MHz 133-300 MHz
ФСБ 50-66 MHz 60-66 MHz
FPU На чип На чип
SIMD Не MMX
Технически процес 800-600-350 nm 350 nm
Брой транзистори 3,1-3,3 милиона 4,5 милиона
Консумация на енергия 8-16 W 4-17 W
Волтаж 5 - 3,3 V 2,8 V
Кристална зона 294-163-90 mm² 141 mm²
Гнездо Гнездо 4, 5 или 7 Гнездо 7

Позволете ми да дам малко обяснение за грешката на Pentium: някои изчисления на FPU доведоха до грешен резултат. Грешката се появяваше рядко - въпреки че различни източници дават различни оценки за това колко рядко - и Intel замени дефектните процесори безплатно. По-долу е даден пример за грешка на Pentium.

4195835.0/3145727.0 = 1.333 820 449 136 241 002 (правилен резултат)

4195835.0/3145727.0 = 1.333739068902037589 (неправилен резултат при дефектен Pentium)


Pentium Pro, издаден през 1995 г., беше първият x86 процесор, способен да обработва повече от 4 GB памет благодарение на разширението за физически адрес (PAE), тоест преходът към 36-битово адресно пространство, което позволява 64 GB RAM да бъдат адресирани. Интересното е, че този процесор беше първият с архитектурата P6 (по принцип архитектурата Core 2 беше наследена до известна степен от нея) и също така стана първият процесор x86, който съдържаше L2 кеш на процесора, а не на дънната платка. По същество 256 KB до 1 MB кеш памет беше разположена до процесора, в същия пакет, но не на същата матрица, и работеше на същата честота като процесора.

Процесорът имаше някои проблеми с производителността. Работеше добре с 32-битови приложения, но беше много по-бавно със софтуер, който беше написан на 16-битов код (като някои части на Windows 95). Причината беше проста: достъпът до 16-битови регистри предизвика проблеми с управлението на 32-битови регистри, което отмени предимствата на архитектурата извън ред на Pentium Pro

Intel Pentium Pro
Кодово име P6
Дата на издаване 1995
Архитектура 32 бита
Шина за данни 64 бита
Адресна шина 36 бита
Макс. памет 64 GB
L1 кеш 8 + 8 кбайта
L2 кеш памет Външен, 256-1024 KB (при честота на процесора)
Тактова честота 150-200 MHz
ФСБ 60-66 MHz
FPU Вградена
SIMD N/A
Технически процес 600-350 nm
Брой транзистори 5 500 000 + пари в брой
Консумация на енергия 29-47 W
Волтаж 3,3 V
Кристална зона 306-196 mm² + кеш
Гнездо Гнездо 8

Площта на матрицата с кеша беше 202 mm² (256 KB при 500 nm), 242 mm 2 (512 KB при 350 nm) или 484 mm 2 (1 MB при 350 nm). Броят на транзисторите в кеша беше 15,5 милиона (256 KB), 31 милиона (512 KB) или 62 милиона (1 MB).


Издаден през 1997 г., Процесор Pentium II беше адаптация на Pentium Pro за масовия пазар. Беше много подобен на Pentium Pro, но кеш паметта беше различна. Вместо кеша да работи на същата честота като процесора (което беше скъпо), 512 KB L2 кеш работи на половината от честотата. Освен това Pentium II изостави класическия сокет в полза на касета, съдържаща процесора и L2 кеша, която сега се помещава в касетата, а не върху дънната платка или опаковката на процесора.

Новите функции в сравнение с Pentium Pro включват поддръжка на MMX (SIMD) и удвоен L1 размер на кеша. Първият Pentium III (Katmai) беше много подобен на Pentium II. Издаден през 1999 г., той добави поддръжка за SSE (SIMD) инструкции, но остана идентичен.

Intel Pentium II и III
Кодово име Klamath (Pentium II 0,35 µm), Deschutes (Pentium II 0,25 µm), Katmai (Pentium III)
Дата на издаване 1997, 1998, 1999
Архитектура 32 бита
Шина за данни 64 бита
Адресна шина 36 бита (32 бита на P III)
Макс. памет 64 GB (4 GB на P III)
L1 кеш 16 + 16 кбайта
L2 кеш памет Външен, 512 KB (1/2 честота на процесора)
Тактова честота 233-300 MHz (Klamath), 300-450 MHz (Deschutes), 450-600 MHz (Klamath)
ФСБ 66-100-133 MHz
FPU Вградена
SIMD MMX (SSE)
Технически процес 350 nm (Klamath), 250 nm (Deschutes, Katmai)
Брой транзистори 7 500 000 + кеш (Pentium II), 9 500 000 + кеш (Pentium III)
Консумация на енергия 25-35 W
Волтаж 2,8 V (0,35 µm), 2 V (0,25 µm)
Кристална зона 204 mm² (0,35 µm), 131 mm 2 (0,25 µm), 128 mm 2 (PIII) + кеш памет
Гнездо Слот 1

Pentium II и III бяха оборудвани с 512 KB L2 кеш (31 милиона транзистора). Но един вариант на процесора Pentium II беше оборудван с 256 KB L2 кеш на чипа - Pentium II Mobile Dixon. Той използва 180nm технологичен процес и е значително по-бърз от настолните версии.


В края на 90-те години Intel пусна две известни марки процесори: Celeron и Xeon. Първият беше насочен към "бюджетния" пазар, а вторият - към сървъри и работни станции. Първият Celeron (Covington) беше Pentium II без кеш от второ ниво и даде твърде ниска производителност, докато Pentium II Xeon, напротив, беше оборудван с голям кеш. И двете марки все още съществуват: Celeron за пазара на начално ниво (обикновено с намален размер на кеша и по-бавна FSB) и Xeon за сървъри (с бърз FSB, понякога по-голям кеш и по-високи тактови честоти).

Intel бързо добави 128 KB L2 кеш памет към Celeron в модела Mendocino. Celeron 300A беше известен с отличните си възможности за овърклок, което му позволяваше да постигне увеличение на честотата от 50% или повече в сравнение със стандартната честота - доста по онова време.

Intel Celeron и Intel Xeon
Кодово име Ковингтън, Мендосино Дрейк
Дата на издаване 1998 1998
Архитектура 32 бита 32 бита
Шина за данни 64 бита 64 бита
Адресна шина 32 бита 36 бита
Макс. памет 4 ГИГАБАЙТА 64 GB
L1 кеш 16 + 16 кбайта 16 + 16 кбайта
L2 кеш памет 0 kbyte/128 kbyte (вграден, при скорост на процесора) Външен, 512 - 2408 KB (при честота на процесора)
Тактова честота 266-300 MHz/300-533 MHz 400-450 MHz
ФСБ 66 MHz 100 MHz
FPU Вградена Вградена
SIMD MMX MMX
Технически процес 250 nm 250 nm
Брой транзистори 7 500 000/19 000 000 7 500 000 + пари в брой
Консумация на енергия 16-28 W 30-46 W
Волтаж 2 V 2 V
Кристална зона 131 mm²/154 mm 2 131 mm² + кеш
Гнездо Слот 1/гнездо 370 PPGA Слот 2

Подобно на Pentium II, Xeon процесоримаше външен L2 кеш вътре в процесорната касета. Капацитетът му варира от 512 kbytes до 2 MB, а броят на транзисторите варира от 31 до 124 милиона.

Pentium III достига 1 GHz



Кликнете върху снимката, за да я увеличите.

Pentium III Coppermine стана първият производствен x86 процесор, който достигна 1 GHz; Имаше дори пусната версия на 1,13 GHz, но тя бързо напусна пазара поради проблеми със стабилността. Нова версия Pentium III включваше подобрен кеш от второ ниво - сега той беше „установен“ на чипа. Той беше по-бърз от външния кеш от 512 KB на първия модел и беше рекламиран по това време като функция, която ще увеличи скоростта на интернет. Процесорът беше пуснат в още три версии: сървър (Xeon), входно ниво (Celeron) и мобилен (с първата версия на технологията SpeedStep).

Intel Pentium III
Кодово име Меден рудник
Дата на издаване 1999
Архитектура 32 бита
Шина за данни 64 бита
Адресна шина 32 бита
Макс. памет 4 ГИГАБАЙТА
L1 кеш 16 + 16 кбайта
L2 кеш памет Вграден, 256 KB (при честота на процесора)
Тактова честота 500-1133 MHz
ФСБ 100-133 MHz
FPU Вградена
SIMD MMX (SSE)
Технически процес 180 nm
Брой транзистори 28,1 милиона
Консумация на енергия 25-35 W
Волтаж 1,6 V, 1,8 V
Кристална зона 106 mm²
Гнездо Слот 1-гнездо 370 FCPGA

През 2002 г. се появи малко по-подобрена версия на Tualatin с по-голям L2 кеш (512 KB) и 130 nm технологичен процес. Той беше позициониран на сървъри (PIII-S) и мобилни устройства, и рядко се среща в компютри на потребителско ниво.

Pentium 4: много шум, малко използване


Кликнете върху снимката, за да я увеличите.

През ноември 2000 г. Intel обяви нов процесор Pentium 4. Той имаше по-висока тактова честота (минимум 1400 MHz), но беше значително по-нисък от конкурентните процесори при сравняване на производителността на такт. AMD Athlon (и дори Pentium III) бяха по-бързи при еднакви честоти. За да усложни допълнително нещата, Intel се опита да премине към Rambus RDRAM (единственият стандарт за памет по това време, който отговаряше на изискванията на FSB CPU), но беше неуспешен. Много скъп и горещ, Pentium 4 все пак успя, след много модификации и подобрения, да достигне конкурентно ниво в рамките на няколко години (благодарение в не малка степен на добавянето на L3 кеш и технологии като Hyper-Threading).

Intel Pentium 4 32-битов
Кодово име Уиламет Нортууд Прескот
Дата на издаване 2000 2001 2004
Архитектура 32 бита 32 бита 32 бита
Шина за данни 64 бита 64 бита 64 бита
Адресна шина 32 бита 32 бита 32 бита
Макс. памет 4 ГИГАБАЙТА 4 ГИГАБАЙТА 4 ГИГАБАЙТА
L1 кеш 8 kbytes + 12 Kµops 8 kbytes + 12 Kµops 16 kbytes + 12 Kµops
L2 кеш памет 256 кбайта 512 кбайта 1024 кбайта
Тактова честота 1,3-2 GHz 1,8-3,4 GHz 2,4-3,8 GHz
ФСБ 400 MHz QDR 400, 533, 800 MHz QDR 533, 800 MHz QDR
SIMD MMX, SSE, SSE2 MMX, SSE, SSE2 MMX, SSE, SSE2, SSE3
SMT/SMP Не Hyper-Threading (някои версии) Hyper-Threading
Технически процес 180 nm 130 nm 90 nm
Брой транзистори 42 милиона 55 милиона 125 милиона
Консумация на енергия 66-100 W 54-137 W 94-151 W
Волтаж 1,7 V 1,55 V 1,25-1,5 V
Кристална зона 217 mm² 146 mm² 112 mm²
Гнездо Цокъл 423/Сокет 478 Цокъл 478 Цокъл 478/LGA775

Излезе Pentium 4 мобилни версии(с променлив множител), Celeron версия (с по-малък L2 кеш) и Xeon версия (с L3 кеш). Hyper-Threading и L3 кеш бяха две технологии, които се появиха за първи път на сървъри и по-късно бяха адаптирани за основните процесори (въпреки че L3 кешът беше наличен само в скъпата линия EE).

Трябва да споменем и честотата на FSB, чиято ефективна честота е четири пъти по-висока от номиналната (физическа) честота благодарение на използването на технологията Quad Data Rate (QDR): 400-MHz шината всъщност работи на 100 MHz, 533 -MHz шина на 133 MHz и т.н. И накрая, 64-битовите версии на Pentium 4 се появиха през 2005 г., но за тях ще говорим по-късно.

Pentium M: лаптопите станаха по-мощни


Кликнете върху снимката, за да я увеличите.

През 2003 г. пазарът на лаптопи започва да расте с огромни темпове, но Intel може да предложи само два процесора: застаряващия Pentium III Tualatin и Pentium 4, чиято консумация на енергия го прави неподходящ за мобилната сфера. Но спасението дойде от израелски екип за разработка: Banias (или Pentium M). Този процесор, базиран на архитектурата P6 (същата като Pentium Pro), предоставен висока производителностпри ниска консумация на енергия. Той дори превъзхожда Pentium 4, като същевременно консумира по-малко енергия. Този процесор беше представен през 2003 г. за платформата Centrino и беше последван през 2004 г. от още по-бързия модел Dothan. Pentium M се е доказал добре с мобилен свят, а процесорът Stealey (A100) все още използва архитектурата Dothan (с по-ниски честоти и TDP).

Intel Pentium M
Кодово име Баниас Дотан
Дата на издаване 2003 2004
Архитектура 32 бита 32 бита
Шина за данни 64 бита 64 бита
Адресна шина 32 бита 32 бита
Макс. памет 4 ГИГАБАЙТА 4 ГИГАБАЙТА
L1 кеш 32 + 32 кбайта 32 + 32 кбайта
L2 кеш памет 1024 кбайта 2048 кбайта
Тактова честота 0,9-1,7 GHz 1-2,13 GHz
ФСБ 400 MHz QDR 400, 533 MHz QDR
SIMD MMX, SSE, SSE2 MMX, SSE, SSE2
SMT/SMP Не Не
Технически процес 130 nm 90 nm
Брой транзистори 77 милиона 140 милиона
Консумация на енергия 9-30 W 6-35 W
Волтаж 0,9-1,5 V 0,9-1,4 V
Кристална зона 82 mm² 87 mm²
Гнездо Гнездо 479 Гнездо 479

Както в случая с Pentium 4, FSB работи на ефективна честота четири пъти физическата честота (QDR). Гнездо CPU Socket 479 използва 478 пина, но те са позиционирани по различен начин, за да се разграничат от Pentium 4 Socket 478 (въпреки че адаптерите съществуват).

Pentium 4 получава 64 бита и още едно ядро



Кликнете върху снимката, за да я увеличите.

През 2005г година Intelдва пъти подобри Pentium 4. Първо дойде Prescott-2M, а след това Smithfield. Първият беше 64-битов процесор, базиран на дизайна на Prescott, а вторият беше първият двуядрен процесор. По същество те са много сходни и имат подобни проблеми с други процесори Pentium 4: малък брой изпълнени инструкции за такт (IPC) и трудност при увеличаване тактови честотипоради високото генериране на топлина. Тези два процесора, предназначени по някакъв начин да компенсират трудната позиция на компанията на пазара в очакване на Core 2 Duo, рядко бяха хвалени. И въпреки че процесорът Pentium D (търговското наименование на Smithfield) имаше две ядра, те бяха два кристала Prescott в един пакет.

Intel Pentium 4
Кодово име Прескот-2М Смитфийлд
Дата на издаване 2005 2005
Архитектура 64 бита 64 бита
Шина за данни 64 бита 64 бита
Адресна шина 64 (всъщност 36) бита 64 (всъщност 36) бита
Макс. памет 64 GB 64 GB
L1 кеш 16 kbytes + 12 Kµops 2 x 16 kbytes + 12 Kµops
L2 кеш памет 2048 кбайта 2 x 1024 kbytes
Тактова честота 3-3,6 GHz 2,8-3,2 GHz
ФСБ 800 MHz QDR 800 MHz QDR
SIMD MMX, SSE, SSE2, SSE3 MMX, SSE, SSE2, SSE3
SMT/SMP Hyper-Threading Две ядра (Hyper-Threading на някои модели)
Технически процес 90 nm 90 nm
Брой транзистори 169 милиона 230 милиона
TDP 84-115 W 95-130 W
Волтаж 1,2 V 1,2 V
Кристална зона 135 mm² 206 mm²
Гнездо LGA775 LGA775

Интересно е да се отбележи, че докато основните процесори Pentium 4 не поддържаха PAE технология (която позволява 36-битова срещу 32-битова работа с памет) и бяха ограничени до 4 GB RAM, тези модели можеха да надхвърлят този праг. На практика адресната шина все още беше ограничена до 36 бита (40 бита при Xeon), но технологията PAE (4GB page management) беше нещо от миналото - 64-битовите програми можеха да използват цялата налична памет.

Hyper-Threading, виртуалната многопроцесорна технология на Intel (SMT), също беше налична на някои модели (Xeon и Екстремно издание). И накрая, 65nm линията (серия модели 9x0) Pentium 4 се появи по-късно, но не съдържа никакви важни подобрения.

Първият мобилен двуядрен процесор



Кликнете върху снимката, за да я увеличите.

През 2006 г. Intel обяви процесора Core Duo. Този първи двуядрен процесор за лаптоп осигуряваше отлична производителност - много по-добра от Pentium 4. Това беше и първият "истински" двуядрен x86 процесор. Кешът например беше споделен (докато Pentium D беше по-скоро сбор от два кристала в един пакет). Процесорът стана част нова платформа Centrino Duo се оказа много сполучлив. Единственият недостатък е, че остана 32-битов процесор, като Pentium 4.

Intel Core Duo
Кодово име Йона
Дата на издаване 2006
Архитектура 32 бита
Шина за данни 64 бита
Адресна шина 32 бита
Макс. памет 4 ГИГАБАЙТА
L1 кеш 32 + 32 кбайта
L2 кеш памет Общо 2048 kbytes
Тактова честота 1,06-2,33 GHz
ФСБ 667 MHz
SIMD MMX, SSE, SSE2, SSE3
SMT/SMP Две ядра
Технически процес 65 nm
Брой транзистори 151 милиона
TDP 9-31 W
Волтаж 0,9-1,3 V
Кристална зона 91 mm²
Гнездо Гнездо 479

Предлагаше се и версия Core Solo с едно ядро, както и варианти с намалена консумация на енергия, които използваха 533-MHz QDR шина (133 MHz) срещу 667-MHz. Този процесор също започна да се използва в сървъри (с кодово име Sossaman), което беше първият процесор, разработен за мобилния сектор. Имайте предвид, че процесорът всъщност не използва архитектурата Core, която беше въведена с Core 2 Duo, и бързо беше заменена в лаптопите от варианта Core 2 Duo (Merom). Освен това, Socket 479 на Yonah е различен от Socket 479 на други Pentium M процесори.

Модерен лидер: Core 2 Duo


Кликнете върху снимката, за да я увеличите.

През 2006 г. Intel представи процесор, който бързо се превърна в бестселър: Core 2 Duo. По време на разработката му опитът на Pentium M е до голяма степен изтеглен, но процесорът използва нова Core архитектура. Преди това Intel пусна две линии процесори: Pentium 4 за настолни компютри, Pentium M за лаптопи и двете линии за сървъри. Но сега, напротив, Intel има единна микроархитектура за всички линии. 64-битовият Core 2 Duo присъства във всички сегменти, от ниски до високи, за настолни компютри, лаптопи и сървъри.

Има много версии на архитектурата, което води до конфигурации с различен брой ядра (от едно до четири, тоест от Solo до Quad), кеш памет (от 512 KB до 12 MB) и честота на FSB (от 400 до 1600 MHz QDR). Илюстрацията показва оригиналния модел Core 2 Duo, но има и по-бързи версии (45 nm).

Intel Core 2 Duo
Кодово име Конроу
Дата на издаване 2006
Архитектура 64 бита
Шина за данни 64 бита
Адресна шина 64 (всъщност 36) бита
Макс. памет 64 GB
L1 кеш 32 + 32 кбайта
L2 кеш памет Общо 2048 kbytes
Тактова честота 1,8-3 GHz
ФСБ 800-1066-1333 MHz
SIMD MMX, SSE, SSE2, SSE3, SSSE3
SMT/SMP Две ядра
Технически процес 65 nm
Брой транзистори 291 милиона
TDP 65 W
Волтаж 1,5 V
Кристална зона 143 mm²
Гнездо LGA 775

Мобилните версии (Merom) са по същество идентични (но не толкова бързи, с по-бавна FSB), а опциите на Extreme Edition са по-бързи. Core 2 Duo съществува и в четириядрена версия, която използва два двуядрени кристала Conroe в един пакет. 45nm версията на Core 2 Duo (Penryn) има по-голям размер на кеша и генерира по-малко топлина, но основата остава същата като първия модел.

Бъдеще: Nehalem, Atom и др.



Кликнете върху снимката, за да я увеличите.

Както може би се досещате, това е само първата статия от поредицата. Това ще бъде последвано от втора статия, посветена на AMD процесорите (включително част за видеокарти AMD ATI). Но историята на процесорите Intel x86 не свършва с Core 2 Duo; нови модели ни очакват в бъдеще. Nehalem и Atom също са x86 процесори. И нещо ни подсказва, че предстоящото навлизане на Intel на графичния пазар, наречено Larrabee, също е изградено върху няколко x86 ядра.

общи принципи на работа (x86 CPU FAQ 1.0)
Опровержение

Вероятно най-точната причина за появата на този материал може да се формулира по следния начин: „не е толкова необходимо да съществува, а по-скоро е странно, че все още не е съществувал“. И наистина: в коментарите към резултатите от теста ние постоянно работим с такива понятия като „капацитет на кеша“, „скорост на шината на процесора“, „поддръжка за разширени набори от инструкции“, но на сайта няма нито една статия, която да съдържа обяснения от всички тези термини. Този пропуск, разбира се, трябваше да бъде отстранен. Тази статия с подзаглавие „Често задавани въпроси за процесора x86“ е опит да се направи точно това. Разбира се, някои от неговите раздели могат да бъдат приписани не само на x86 процесори, а не само на техните настолни (предназначени за инсталиране в компютър) версии, но ние със сигурност не се стремим към такъв глобализъм. Затова, моля, не забравяйте, че за целите на този материал, освен ако изрично не е посочено друго, думата „процесор“ означава „процесор x86, предназначен за инсталиране в настолни компютри“. Може би в процеса на по-нататъшно усъвършенстване и разширяване в статията ще се появят секции, посветени на сървърни процесори или дори процесори на други архитектури, но това е въпрос на бъдещето... Съдържание

Въведение

Код и данни: основният принцип на процесора

Така че, ако не се опитате да представите тук „накратко“ курса по компютърни науки за гимназия, тогава единственото нещо, което бих искал да ви напомня е, че процесорът (с редки изключения) не изпълнява програми, написани на някакъв език за програмиране (един от които може дори да знаете), а някакъв „машинен код“. Тоест командите за него са последователности от байтове, намиращи се в паметта на компютъра. Понякога една команда може да бъде равна на един байт, понякога отнема няколко байта. Там, в основната памет (RAM, RAM) се намират и данните. Те могат да бъдат в отделна област или могат да бъдат „смесени“ с кода. Разликата между код и данни е, че данните са какво над каквоПроцесорът извършва някои операции. И кодът са командите, които му казват, каква операция?той трябва да произвежда. За да опростим, можем да си представим програмата и нейните данни като поредица от байтове с определена крайна дължина, разположени непрекъснато (нека не усложняваме нещата) в общ масив от памет. Например, имаме масив от памет с дължина 1 000 000 байта, а нашата програма (заедно с данните) е байтове, номерирани от 1000 до 20 000. Другите байтове са други програми или техните данни, или просто свободна памет, която не е заета от нищо полезно.

По този начин „машинният код“ е инструкции на процесора, разположени в паметта. Там се намират и данните. За да изпълни дадена инструкция, процесорът трябва да я прочете от паметта. За да извърши операция с данни, процесорът трябва да ги прочете от паметта и, евентуално, след извършване на определено действие върху тях, да ги запише обратно в паметта в актуализирана (променена) форма. Командите и данните се идентифицират по техния адрес, който по същество е серийният номер на място в паметта. Общи принципи на взаимодействие
процесор и RAM

Може да изненада някой, че доста голям раздел в ЧЗВ, посветен на процесора x86, е посветен на обяснението на характеристиките на функционирането на паметта в модерни системиа, на базата на този тип процесор. Фактите обаче са упорито нещо: самите процесори x86 сега съдържат толкова много блокове, отговорни специално за оптимизирането на тяхната работа с RAM, че би било напълно нелепо да се игнорира тази тясна връзка. Може дори да се каже следното: тъй като решенията, свързани с оптимизирането на работата с паметта, са станали неразделна част от самите процесори, тогава самата памет може да се разглежда като вид „придатък“, чието функциониране има пряко влияние върху скоростта работа на процесора. Без разбиране на особеностите на взаимодействието между процесора и паметта е невъзможно да се разбере защо конкретен процесор (тази или онази система) изпълнява програмите по-бавно или по-бързо.

Контролер на паметта

И така, по-горе вече говорихме за факта, че и командите, и данните влизат в процесора от RAM. Всъщност всичко е малко по-сложно. В повечето съвременни x86 системи (т.е. компютри, базирани на x86 процесори), процесорът като устройство изобщо не може да има достъп до паметта, тъй като няма съответните възли. Следователно, той се обръща към „междинно“ специализирано устройство, наречено контролер на паметта, което от своя страна се обръща към RAM чипове, разположени на модули памет. Вероятно сте виждали модули - това са дълги, тесни текстолитни "дъски" (всъщност малки платки) с редица микросхеми върху тях, поставени в специални конектори на дънната платка. Следователно ролята на RAM контролера е проста: той служи като вид „мост“* между паметта и устройствата, които я използват (между другото, това включва не само процесора, но повече за това малко по-късно). По правило контролерът на паметта е част от чипсета - набор от чипове, който е основата дънна платка. Скоростта на обмен на данни между процесора и паметта до голяма степен зависи от скоростта на контролера, това е един от най-важните компоненти, влияещи върху цялостната производителност на компютъра.

* - между другото, контролерът на паметта е физически разположен в чипсета на чипсета, традиционно наричан „северен мост“.

Процесорна шина

Всеки процесор е задължително оборудван с процесорна шина, която в средата на процесора x86 обикновено се нарича FSB (Front Side Bus). Тази шина служи като комуникационен канал между процесора и всички други устройства в компютъра: памет, видео карта, харддиск, и така нататък. Въпреки това, както вече знаем от предишния раздел, между самата памет и процесора има контролер на паметта. Съответно: процесорът комуникира чрез FSB с контролера на паметта, който от своя страна комуникира чрез специална шина (да я наречем без повече шум „шината на паметта“) с RAM модулите на платката. Въпреки това повтаряме: тъй като класическият x86 CPU има само една „външна“ шина, тя се използва не само за работа с паметта, но и за комуникация между процесора и всички други устройства.

Разлики между традиционните
x86 CPU архитектура и K8/AMD64

Революционният подход на AMD се състои в това, че нейните процесори с архитектура AMD64 (и микроархитектура, която условно се нарича „K8“) са оборудвани с много „външни“ шини. В този случай една или повече шини HyperTransport се използват за комуникация с всички устройства, с изключение на паметта, а отделна група от една или две (в случай на двуканален контролер) шини се използва изключително за работа на процесора с памет. Предимството на интегрирането на контролер на паметта директно в процесора е очевидно: „пътят от ядрото до паметта“ става значително „по-кратък“, което ви позволява да работите с RAM по-бързо. Вярно е, че този подход има и недостатъци. Така например, ако по-рано устройства като харддискили видеокартите биха могли да работят с памет чрез специален, независим контролер - тогава в случай на архитектура AMD64 те са принудени да работят с RAM чрез контролер, разположен на процесора. Тъй като процесорът в тази архитектура е единственото устройство с директен достъп до паметта. Де факто в конфронтацията „външен контрольор срещу. интегриран“, се появи паритет: от една страна, AMD в момента е единственият производител на настолни x86 процесори с интегриран контролер на паметта, от друга страна, компанията изглежда е доста доволна от това решение и няма да го изостави . Трето, Intel също няма да се откаже от външния контролер и е доста доволен от „класическата схема“, доказана през годините.

RAM

Ширина на шината на паметта, N-канални контролери на паметта

Към днешна дата цялата памет, използвана в съвременните x86 настолни системи, има 64-битова широка шина. Това означава, че в един тактов цикъл количество информация, което е кратно на 8 байта, може да бъде едновременно предадено по тази шина (8 байта за SDR шини, 16 байта за DDR шини). Единственото нещо, което се откроява, е паметта тип RDRAM, която се използва в системи, базирани на процесори Intel Pentium 4 в зората на архитектурата NetBurst, но сега тази посока се признава за задънена улица за компютри x86 (между другото, същата компания Intel имаше пръст в това, което по едно време активно насърчаваше този видпамет). Известно объркване се причинява само от двуканални контролери, които осигуряват едновременна работас две отделни 64-битови шини, поради което някои производители претендират за някаква „128-битова“. Това, разбира се, си е чиста профанация. Аритметика на ниво 1 клас в в такъв случай, уви, не става: 2х64 изобщо не е равно на 128. Защо? Да, дори само защото дори най-модерните процесори x86 (вижте секцията с често задавани въпроси „64-битови разширения на класическата x86 (IA32) архитектура“ по-долу) не могат да работят със 128-битова шина и 128-битово адресиране. Грубо казано: два независими успоредни пътя, всеки с ширина 2 метра, могат да осигурят едновременно преминаване на два автомобила с ширина 2 метра - но в никакъв случай на един с ширина 4 метра. По същия начин N-канален контролер на паметта може да увеличи скоростта на работа с данни N пъти (и след това повече теоретично, отколкото практически) - но по никакъв начин не е в състояние да увеличи битовия капацитет на тези данни. Ширината на шината на паметта във всички съвременни контролери, използвани в x86 системите, е 64 бита - независимо дали този контролер се намира в чипсета или в самия процесор. Някои контролери са оборудвани с два независими 64-битови канала, но това по никакъв начин не засяга ширината на шината на паметта - само скоростта на четене и запис на информация.

Скорост на четене и запис

Скоростта на четене и запис на информация в паметта е теоретично ограничена единствено от честотната лента на самата памет. Например, двуканален контролер на паметта DDR400 теоретично може да осигури скорости на четене и запис на информация, равни на 8 байта (ширина на шината) * 2 (брой канали) * 2 (DDR протокол, който осигурява предаването на 2 пакета данни на тактов цикъл) * 200"000"000 (действителната работна честота на шината на паметта е 200 MHz, т.е. 200"000"000 тактови цикъла в секунда). Стойностите, получени в резултат на практически тестове, като правило са малко по-ниски от теоретичните: това се дължи на „несъвършения“ дизайн на контролера на паметта, плюс режийни (закъснения), причинени от работата на кеширането подсистема на самия процесор (вижте раздела за кеша на процесора по-долу). Основната „уловка“ обаче дори не е в наслагванията, свързани с работата на контролера и кеширащата подсистема, а във факта, че скоростта на „линейното“ четене или запис не е единствената характеристика, която влияе върху реалната скорост на процесора с RAM. За да разберете какви компоненти съставят действителна скоросткак процесорът работи с паметта, трябва да вземем предвид, в допълнение към линейната скорост на четене или запис, такава характеристика като латентност.

Латентност

Латентността е не по-малко важна характеристика от гледна точка на производителността на подсистемата на паметта от скоростта на „изпомпване на данни“, но по същество е съвсем различна. Високата скорост на обмен на данни е добра, когато размерът им е сравнително голям, но ако имаме нужда „малко по малко от различни адреси“, тогава латентността излиза на преден план. Какво е? IN общ случай- времето, необходимо за започване на четене на информация от определен адрес. И наистина: от момента, в който процесорът изпрати команда за четене (запис) към контролера на паметта до момента, в който се извърши тази операция, минава известно време. Освен това то изобщо не е равно на времето, необходимо за прехвърляне на данни. След като получи команда за четене или запис от процесора, контролерът на паметта му "показва" с кой адрес иска да работи. Достъпът до който и да е произволно избран адрес не може да бъде постигнат незабавно; това изисква определено време. Възниква забавяне: адресът е посочен, но паметта все още не е готова да осигури достъп до него. Най-общо това забавяне се нарича латентност. U различни видовепаметта е различна. Например DDR2 паметта има средно много по-високи закъснения от DDR (при същата честота на трансфер на данни). В резултат на това, ако данните в програмата са разположени „хаотично“ и на „малки парчета“, скоростта на четенето им става много по-малко важна от скоростта на достъп до „началото на парчето“, тъй като забавянията при преминаване към следващият адрес засяга производителността на системата много повече от скоростта на четене или запис.

„Конкуренцията“ между скоростта на четене (запис) и латентността е едно от основните главоболия за разработчиците на съвременни системи: за съжаление, увеличаването на скоростта на четене (запис) почти винаги води до увеличаване на латентността. Например памет тип SDR (PC66, PC100, PC133) има средно по-добра (по-ниска) латентност от DDR. На свой ред DDR2 има дори по-висока латентност (тоест по-лоша) от DDR.

Трябва да се разбере, че „общата“ латентност на подсистемата на паметта зависи не само от нея, но и от контролера на паметта и неговото местоположение - всички тези фактори също влияят на латентността. Ето защо AMD, в процеса на разработване на архитектурата AMD64, реши да реши проблема с високата латентност "с един замах", като интегрира контролера директно в процесора - за да "скъси разстоянието" между процесорното ядро ​​и RAM модули колкото е възможно повече. Идеята беше успешна, но на висока цена: сега система, базирана на специфичен CPU с архитектура AMD64, може да работи само с паметта, за която е проектиран нейният контролер. Вероятно затова Intel все още не са се решили на толкова драстична стъпка, предпочитайки да действат с традиционни методи: подобряване на контролера на паметта в чипсета и механизма Prefetch в процесора (вижте по-долу за подробности).

В заключение отбелязваме, че понятията „скорост на четене / запис“ и „латентност“ като цяло се прилагат за всеки тип памет - включително не само класически DRAM (SDR, Rambus, DDR, DDR2), но и кеш (вж. По-долу). Процесор: Обща информация

Архитектурна концепция

Архитектурата като съвместимост на кода

Със сигурност често сте срещали термина "x86" или "Intel-съвместим процесор" (или "IBM PC съвместим" - но това е във връзка с компютър). Понякога се използва и терминът „съвместим с Pentium“ (защо Pentium - ще разберете малко по-късно). Какво всъщност се крие зад всички тези имена? В момента следната проста формулировка изглежда най-правилна от гледна точка на автора: модерен x86 процесор е процесор, способен да изпълнява правилно машинен код на архитектурата IA32 (архитектура на 32-битови процесори Intel). На първо приближение това е код, изпълняван от процесора i80386 (популярно известен като „386“), но основният набор от инструкции IA32 беше окончателно формиран с пускането на процесора Intel Pentium Pro. Какво означава „основен набор“ и какви други има? Първо, нека отговорим на първата част от въпроса. „Основно“ в този случай означава, че използвайки само този набор от инструкции, може да бъде написана всяка програма, която обикновено може да бъде написана за x86 процесор (или IA32, ако предпочитате).

В допълнение, архитектурата IA32 има „официални“ разширения (допълнителни набори от команди) от разработчика на самата архитектура, Intel: MMX, SSE, SSE2 и SSE3. Има и „неофициални“ (не-Intel) разширени командни набори: EMMX, 3DNow! и Extended 3DNow! - разработени са от AMD. Въпреки това „официално“ и „неофициално“ в случая са относително понятие – де факто всичко се свежда до факта, че някои разширения на набора от инструкции са признати от Intel, като разработчик на оригиналния набор, а някои са не, докато разработчиците на софтуер използват това, което е най-добро за тях, всичко пасва. Има едно просто правило на добрия етикет, когато става дума за разширени набори от инструкции: преди да ги използва, програмата трябва да провери дали процесорът ги поддържа. Понякога има отклонения от това правило (които могат да доведат до неправилно функциониране на програми), но обективно това е проблем на неправилно написан софтуер, а не процесор.

За какво са допълнителните набори от команди? На първо място, за увеличаване на производителността при извършване на определени операции. Една команда от вторичния набор обикновено изпълнява действие, което изисква малка програма, състояща се от команди от основния набор. Отново, като правило, една инструкция се изпълнява от процесора по-бързо от последователността, която замества. въпреки това в 99% от случаите нищо, което не може да се направи с основните команди, не може да се направи с команди от допълнителния набор.

По този начин горепосочената проверка от програмата за поддръжка на допълнителни набори инструкции от процесора трябва да изпълнява много проста функция: ако например процесорът поддържа SSE, тогава ще броим бързо и използвайки инструкции от набора SSE. Ако не, ще броим по-бавно, използвайки команди от основния набор. Една правилно написана програма трябва да действа по този начин. Сега обаче почти никой не проверява процесора за поддръжка на MMX, тъй като всички процесори, пуснати през последните 5 години, гарантират, че поддържат този набор. За справка, ето таблица, която обобщава информация за поддръжката на различни разширени набори от команди от различни настолни (предназначени за настолни компютри) процесори.

процесор
Intel Pentium II
Intel Celeron до 533 MHz
Intel Pentium III
Intel Celeron 533-1400 MHz
Intel Pentium 4
Intel Celeron от 1700 MHz
Intel Celeron D
Intel Pentium 4 eXtreme Edition
Intel Pentium eXtreme Edition
Intel Pentium D
AMD K6
AMD K6-2
AMD K6-III
AMD Athlon
AMD Duron до 900 MHz
AMD Athlon XP
AMD Duron от 1000 MHz
AMD Athlon 64 / Athlon FX
AMD Sempron
AMD Athlon 64 X2
ЧРЕЗ C3

*в зависимост от модификацията

В момента целият популярен настолен софтуер (оперативен Windows системии Linux, офис пакети, компютърни игрии т.н.) се разработва специално за x86 процесори. Работи (с изключение на "лошо работещи" програми) на всеки x86 процесор, независимо кой го е направил. Следователно, вместо термините „съвместим с Intel“ или „съвместим с Pentium“, насочени към разработчика на оригиналната архитектура, те започнаха да използват неутрално име: „x86-съвместим процесор“, „процесор с x86 архитектура“. В този случай „архитектура“ означава съвместимост с определен набор от инструкции, т.е. може да се каже „архитектура на процесора от гледна точка на програмист“. Има и друго тълкуване на същия термин.

Архитектурата като характеристика на семейство процесори

„Железячники“ - хората, които работят предимно не със софтуер, а с хардуер, разбират „архитектурата“ по малко по-различен начин (въпреки че е по-правилно това, което наричат ​​„архитектура“, да се нарича „микроархитектура“, но де факто префиксът „ микро" често се пропуска). За тях „CPU архитектурата“ е определен набор от свойства, присъщи на цяло семейство процесори, обикновено произвеждани в продължение на много години (с други думи, „вътрешният дизайн“, „организацията“ на тези процесори). Така, например, всеки x86 CPU специалист ще ви каже, че процесор с ALU, работещи на двойна честота, QDR шина, Trace кеш и евентуално поддръжка за Hyper-Threading технология е „процесор с архитектура NetBurst“ (не бъдете тревожен от непознати термини - всички те ще бъдат обяснени малко по-късно). А процесорите Intel Pentium Pro, Pentium II и Pentium III са „архитектура P6“. По този начин понятието „архитектура“ по отношение на процесорите е донякъде двусмислено: то може да се разбира както като съвместимост с определен набор от инструкции, така и като набор от хардуерни решения, присъщи на определена доста широка група процесори. Разбира се, такъв дуализъм на една от основните концепции не е много удобен, но това е така и едва ли нещо ще се промени в близко бъдеще...

64-битови разширения на класическата x86 (IA32) архитектура

Неотдавна и двамата водещи производители на процесори x86 обявиха две почти идентични* технологии (все пак AMD предпочита да ги нарича архитектура), благодарение на които класическите процесори x86 (IA32) получиха 64-битов статус. В случая на AMD тази технология се нарича "AMD64" (64-битова AMD архитектура), в случая на Intel - "EM64T" (разширена 64-битова технология за памет). Също така, уважавани старейшини, които са запознати с историята на проблема, понякога използват името „x86-64“ - като общо обозначение за всички 64-битови разширения на x86 архитектурата, които не са свързани с регистрираните търговски марки на който и да е производител. Де факто, използването на едно от трите имена, дадени по-горе, зависи повече от личните предпочитания на потребителя, отколкото от реалните разлики - защото разликите между AMD64 и EM64T се побират на върха на много тънка игла. Освен това самата AMD въведе името на „марката“ „AMD64“ само малко преди обявяването на собствените си процесори, базирани на тази архитектура, а преди това съвсем спокойно използваше по-неутралното „x86-64“ в собствените си документи. Въпреки това, по един или друг начин, всичко се свежда до едно нещо: някои вътрешни регистри на процесора са станали 64-битови вместо 32-битови, 32-битовите x86 кодови инструкции са получили своите 64-битови аналози, в допълнение количеството на адресируемата памет (включително не само физическа, но и виртуална) се е увеличила многократно (поради факта, че адресът е придобил 64-битов формат вместо 32-битов). Броят на маркетинговите спекулации по темата за „64 бита“ надхвърли всички разумни граници, така че трябва да разгледаме особено внимателно предимствата на тази иновация. И така: какво всъщност се е променило и какво не?

* - Аргументите, че Intel „нагло копира EM64T от AMD64“ не издържат на критика. И изобщо не защото не е така - а защото изобщо не е „нагло“. Има такова понятие: „споразумение за кръстосано лицензиране“. Ако такова споразумение се осъществи, това означава, че всички разработки на една компания в дадена област автоматично стават достъпни за друга, както разработките на друга автоматично стават достъпни за първата. Intel се възползва от кръстосаното лицензиране, за да разработи EM64T, използвайки AMD64 като основа (което никой никога не е отричал). AMD се възползва от същото споразумение, за да въведе поддръжка за SSE2 и SSE3 допълнителни набори от инструкции, разработени от Intel в своите процесори. И в това няма нищо срамно: щом се съгласихме да „споделяме“ разработките, значи трябва да споделяме.

Какво не се е променило? На първо място, скоростта на процесорите. Би било явна глупост да се смята, че един и същ процесор при преминаване от обичайния 32-битов към 64-битов режим (а всички настоящи x86 процесори поддържат 32-битов режим). задължителен) ще работи 2 пъти по-бързо. Разбира се, в някои случаи може да има известно ускоряване от използването на 64-битова целочислена аритметика - но броят на тези случаи е много ограничен и те не засягат повечето съвременни потребителски софтуери. Между другото: защо използвахме термина „64-битова целочислена аритметика“? Но тъй като блоковете от операции с плаваща запетая (вижте по-долу) във всички x86 процесори отдавна вече не са 32-битови. И дори не 64-битов. Класическият x87 FPU (виж по-долу), който най-накрая стана част от процесора в дните на добрия стар 32-битов Intel Pentium - вече беше 80-битов. Операндите на инструкциите SSE и SSE2/3 са 128-битови! В това отношение архитектурата x86 е доста парадоксална: въпреки факта, че формално процесорите на тази архитектура остават 32-битови за доста дълго време - битовият капацитет на онези блокове, където „b О„по-висок битов капацитет“ беше наистина необходим - той беше увеличен напълно независимо от останалите. Например процесорите AMD Athlon XP и Intel Pentium 4 „Northwood“ комбинираха единици, които работеха с 32-битови, 80-битови и 128-битови операнди. Само основният набор от инструкции (наследен от първия процесор на архитектурата IA32 - Intel 386) и адресирането на паметта (максимум 4 гигабайта, без да се броят „извращенията“ като Intel PAE) останаха 32-битови.

Така фактът, че процесорите на AMD и Intel станаха „формално 64-битови“, на практика ни донесе само три подобрения: появата на команди за работа с 64-битови цели числа, увеличаване на броя и/или битовата дълбочина на регистрите, и увеличаване на максималния адресируем обем памет. Забележка: никой не отрича реалните ползи от тези иновации (особено третото!). Точно както никой не отрича заслугите на AMD в популяризирането на идеята за „модернизиране“ (поради въвеждането на 64-битови) x86 процесори. Просто искаме да предупредим за прекомерни очаквания: не трябва да се надявате, че компютърът, закупен „в ценовия клас VAZ“, ще се превърне в „елегантен Mercedes“, без да инсталирате 64-битов софтуер. В света няма чудеса...

Процесорно ядро

Разлики между ядрата на една и съща микроархитектура

„Процесорно ядро“ (обикновено наричано просто „ядро“ за краткост) е специфично изпълнение на [микро]архитектура (т.е. „архитектура в хардуерния смисъл на думата“), която е стандарт за цяла серия на процесори. Например, NetBurst е микроархитектура, която е в основата на много от съвременните процесори на Intel: Celeron, Pentium 4, Xeon. Микроархитектурата задава общи принципи: дълъг тръбопровод, използване на определен тип кеш код от първо ниво (Trace cache) и други „глобални“ функции. Ядрото е по-специфично изпълнение. Например процесорите на микроархитектурата NetBurst с 400 MHz шина, 256 килобайта кеш от второ ниво и без поддръжка на Hyper-Threading са повече или по-малко Пълно описаниеЯдра Willamette. Но ядрото Northwood има кеш от второ ниво от 512 килобайта, въпреки че също е базирано на NetBurst. Ядрото AMD Thunderbird е базирано на микроархитектурата K7, но не поддържа набора от инструкции SSE, но ядрото Palomino поддържа.

По този начин можем да кажем, че „ядрото“ е специфично въплъщение на определена микроархитектура „в силиций“, която има (за разлика от самата микроархитектура) определен набор от строго определени характеристики. Микроархитектурата е аморфна; тя описва общите принципи на дизайна на процесора. По-конкретно, ядрото е микроархитектура, „обрасла“ с всякакви параметри и характеристики. Изключително рядко е процесорите да променят микроархитектурата, като запазват същото име. И обратно, почти всяко име на процесор е „променил“ ядрото си поне няколко пъти по време на своето съществуване. Например общото заглавие на сериала AMD процесори- “Athlon XP” е една микроархитектура (K7), но до четири ядра (Palomino, Thoroughbred, Barton, Thorton). Различните ядра, изградени върху една и съща микроархитектура, могат да имат, наред с други неща, различни нива на производителност.

Одити

Ревизията е една от модификациите на ядрото, която се различава много малко от предишната, поради което не заслужава титлата „ново ядро“. По правило производителите на процесори не правят голяма работа с пускането на следващата ревизия, това се случва „в работно състояние“. Така че дори и да закупите същия процесор, с напълно сходно име и характеристики, но с интервал от около шест месеца, е напълно възможно всъщност той да е малко по-различен. Пускането на нова ревизия обикновено е свързано с някои дребни подобрения. Например, успяхме леко да намалим консумацията на енергия или да намалим захранващото напрежение, или да оптимизираме нещо друго, или няколко дребни грешки бяха отстранени. От гледна точка на производителността не си спомняме нито един пример, при който една ревизия на ядрото да се различава толкова значително от друга, че да има смисъл да се говори за това. Въпреки че тази опция е чисто теоретично възможна - например един от процесорните блокове, отговорен за изпълнението на няколко команди, е оптимизиран. За да обобщим, можем да кажем, че най-често не си струва да се занимавате с ревизии на процесора: в много редки случаи промяната на ревизия прави някои фундаментални промени в процесора. Достатъчно е само да знаете, че такова нещо съществува - само за общо развитие.

Честота на ядрото

По правило този параметър разговорно се нарича "честота на процесора". Въпреки че в общия случай определението за „работна честота на ядрото“ е все още по-правилно, тъй като изобщо не е необходимо всички компоненти на процесора да работят на същата честота като ядрото (най-честият пример за обратното беше старият “слот” x86 процесори - Intel Pentium II и Pentium III за слот 1, AMD Athlon за слот A - техният L2 кеш функционираше на 1/2, а понякога дори на 1/3 от честотата на ядрото). Друго често срещано погрешно схващане е убеждението, че честотата на ядрото еднозначно определя производителността. Всъщност това е двойно погрешно: първо, всяко конкретно процесорно ядро ​​(в зависимост от това как е проектирано, колко изпълнителни единици съдържа различни видовеи т.н. и т.н.) могат да изпълняват различен брой команди в един тактов цикъл, но честотата е просто броят на тези тактови цикли в секунда. По този начин (сравнението по-долу, разбира се, е много опростено и следователно много произволно), процесор, чието ядро ​​изпълнява 3 инструкции на тактов цикъл, може да има една трета по-ниска честота от процесор, изпълняващ 2 инструкции на тактов цикъл - и в същото време да има напълно подобно изпълнение.

Второ, дори в рамките на едно и също ядро, увеличаването на честотата не винаги води до пропорционално увеличение на производителността. Тук знанията, които можете да почерпите от раздела „Общи принципи на взаимодействие между процесора и RAM“, ще ви бъдат много полезни. Факт е, че скоростта на изпълнение на команди от ядрото на процесора не е единственият индикатор, който влияе върху скоростта на изпълнение на програмата. Също толкова важна е скоростта, с която командите и данните пристигат в процесора. Нека си представим, чисто теоретично, такава система: скоростта на процесора е 10 000 команди в секунда, скоростта на паметта е 1000 байта в секунда.Въпрос: дори да приемем, че една команда заема не повече от един байт, и нямаме данни изобщо, с каква скорост ще се изпълнява програма в такава система?Правилно: не повече от 1000 команди в секунда и производителността на процесора няма абсолютно нищо общо с това: ще бъдем ограничени не от нея, а от скоростта при които командите влизат в процесора.Така че трябва да разберете: невъзможно е непрекъснато да се увеличава честотата на едно ядро, без едновременно да се ускорява подсистемата на паметта, тъй като в този случай се започва от определен етап, увеличаването на честотата на процесора вече няма да повлияе на увеличаването на производителността на системата като цяло.

Характеристики на формирането на имена на процесори

Преди, когато небето беше по-синьо, бирата имаше по-добър вкус и момичетата бяха по-красиви, процесорите се наричаха просто: име на производителя + име на моделна гама + честота. Например: "AMD K6-2 450 MHz". В момента и двата големи производителя са се отдалечили от тази традиция и вместо честота използват някакви неразбираеми числа, които показват кой знае какво. Следващите два раздела са посветени на кратко обяснение какво всъщност означават тези числа.

Оценки от AMD

Причината, поради която AMD „премахна“ честотата от името на своите процесори и я замени с някакво абстрактно число, е добре известна: след появата на процесора Intel Pentium 4, който работи на много високи честоти, процесорите на AMD до него започнаха да „изглеждайте зле на витрината на магазина“ - купувачът не вярваше, че CPU с честота например 1500 MHz може да изпревари CPU с честота 2000 MHz. Поради това честотата в името беше заменена с рейтинг. Официалното („де юре“, така да се каже) тълкуване на този рейтинг от AMD звучеше малко по-различно в различни моменти, но никога не звучеше във формата, в която потребителите го възприемат: AMD процесор с определен рейтинг трябва да бъде като поне не по-бавен от процесор Intel Pentium 4 с честота, съответстваща на тази оценка. Междувременно за никого не беше особена тайна, че именно тази интерпретация беше крайната цел на въвеждането на рейтинга. Като цяло всички разбраха всичко прекрасно, но AMD усърдно се преструваше, че няма нищо общо с това :). Тя не бива да бъде обвинявана за това: състезаниеважат напълно различни правила от тези в рицарския турнир. Освен това резултатите от независими тестове показаха: като цяло AMD дава доста справедливи оценки на своите процесори. Всъщност, щом това е така, едва ли има смисъл да се протестира срещу използването на рейтинга. Вярно, един въпрос остава открит: с какво (разбира се, интересуваме се от фактическото състояние, а не от обясненията на маркетинговия отдел) рейтингът на процесорите на AMD ще бъде обвързан малко по-късно, когато Intel започне да произвежда някои друг процесор вместо Pentium 4?

Номер на процесора от Intel

Какво трябва да запомните веднага: Номерът на процесора (наричан по-нататък PN) за процесорите на Intel не е рейтинг. Не оценка на ефективността или оценка на нещо друго. Всъщност това е просто „елемент“, елемент от ред в списък с инвентар, чиято единствена цел е да се увери, че редът, представляващ един процесор, е различен от реда, представляващ друг. В рамките на серията (първата цифра PN), другите две цифри по принцип могат да кажат нещо, но предвид наличието на таблици, които показват пълно съответствие между PN и реалните параметри, не виждаме много смисъл да запомняме кои - това са междинни съответствия. Мотивацията на Intel за въвеждане на PN (вместо определяне на честотата на процесора) е по-сложна от тази на AMD. Необходимостта от въвеждане на PN (както самият Intel го обяснява) се дължи преди всичко на факта, че двата основни конкурента имат различни подходи към въпроса за уникалността на името на процесора. Например за AMD името „Athlon 64 3200+“ може да означава четири процесора с малко различни техническа характеристика(но със същия „рейтинг“). Intel е на мнение, че името на процесора трябва да е уникално и затова компанията преди това трябваше да „избяга“, като добави различни букви към стойността на честотата в името, което доведе до объркване. На теория PN трябваше да елиминира това объркване. Трудно е да се каже дали целта е постигната: все пак гамата от процесори на Intel остава доста сложна. От друга страна, това е неизбежно, тъй като асортиментът от продукти е твърде голям. Независимо от всичко обаче, един де факто ефект определено беше постигнат: сега само специалисти, които разбират проблема, могат бързо и точно да кажат „по памет“ по името на процесора какъв е той и каква ще бъде неговата производителност в сравнение с други процесори. Колко добър е? Трудно е да се каже. Бихме предпочели да се въздържим от коментар.

Измерване на скоростта "в мегахерци" - как е възможно това?

Това по никакъв начин не е възможно, защото скоростта не се измерва в мегахерци, както разстоянието не се измерва в килограми. Господа търговци обаче отдавна са разбрали, че в словесен двубой между физик и психолог винаги печели вторият - и независимо кой всъщност е прав. Ето защо четем за "ултра-бърза 1066 MHz FSB", болезнено опитвайки се да разберем как скоростта може да бъде измерена с помощта на честота. Всъщност, тъй като такава перверзна тенденция се е вкоренила, просто трябва да сте наясно какво означава това. Това, което имаме предвид, е следното: ако „фиксираме“ ширината на шината на N бита, тогава нейната пропускателна способностнаистина ще зависи от това на каква честота работи шината и колко данни може да предава за тактов цикъл. На обикновена процесорна шина с „единична“ скорост (такава шина беше например процесорът Intel Pentium III), 64 бита, тоест 8 байта, се прехвърлят на тактов цикъл. Съответно, ако работна честоташината е 100 MHz (100"000"000 тактови цикъла в секунда) - тогава скоростта на трансфер на данни ще бъде равна на 8 байта * 100"000"000 херца ~= 763 мегабайта в секунда (и ако броим в "десетични мегабайта" , в които е прието да се брои потоци от данни, след това още по-красив - 800 мегабайта в секунда). Съответно, ако DDR шината работи на същите 100 мегахерца, способна да предава два пъти повече данни за един такт, скоростта ще се увеличи точно два пъти. Следователно, според парадоксалната логика на господа търговци, тази шина трябва да се нарича „200 MHz“. И ако това е и шина QDR (Quad Data Rate), тогава тя всъщност се оказва „400 MHz“, тъй като предава четири пакета данни в един тактов цикъл. Въпреки че реалната работна честота и на трите описани по-горе шини е една и съща - 100 мегахерца.Ето как „мегахерц” става синоним на скорост.

Така една QDR шина (с „четворна” скорост), работеща на реална честота от 266 мегахерца, магически се оказва „1066 мегахерца”. Числото "1066" в този случай представлява факта, че пропускателната способност е точно 4 пъти по-голяма от тази на "едноскоростен" автобус, работещ на същата честота. Объркахте ли се вече?.. Свиквайте! Това не е някаква теория на относителността, тук всичко е много по-сложно и пренебрегнато... Но най-важното тук е да запомним един прост принцип: ако правим такова извращение като сравняването на скоростта на два автобуса с един друг „в мегахерци“, тогава те трябва да са с еднаква ширина. В противен случай се получава като в един форум, където човек сериозно спори, че честотната лента на AGP2X („133 MHz“, но 32-битовшина) - по-висока от честотната лента на FSB на Pentium III 800 (действителна честота 100 MHz, ширина 64 бита).

Няколко думи за някои от пикантните характеристики на протоколите DDR и QDR

Както бе споменато по-горе, в режим DDR два пъти по-голямо количество информация се предава по шината за един такт, а в режим QDR то се учетворява. Вярно е, че в документи, фокусирани повече върху прославянето на постиженията на производителите, отколкото върху обективното отразяване на реалностите, по някаква причина те винаги забравят да посочат едно малко „но“: Режимите с двойна и четворна скорост са активирани само по време на пакетен трансфер на данни. Тоест, ако сме поискали няколко мегабайта от паметта от адрес X към адрес Y, тогава да, тези два мегабайта ще бъдат прехвърлени с двойна/четворна скорост. Но самата заявка за данни се изпраща по шината с „единична“ скорост - Винаги ! Съответно, ако имаме много заявки и размерът на изпращаните данни не е много голям, тогава количеството данни, което „пътува“ по шината с една скорост (а заявката също е данни), ще бъде почти равно на количеството, което се предава с двойна или четворна скорост. Изглежда, че никой не ни е излъгал открито, изглежда, че DDR и QDR наистина работят, но... както се казва в един стар виц: „или е откраднал кожено палто от някого, или някой е откраднал кожено палто от него, но нещо не е наред с козината..." ;) Процесор с голям блок

Кеш памет

Общо описание и принцип на действие

Всички съвременни процесори имат кеш (на английски - cache). Кешът е специален тип памет (основната характеристика, която фундаментално отличава кеша от RAM, е скоростта на работа), която е вид „буфер“ между контролера на паметта и процесора. Този буфер се използва за увеличаване на скоростта на работа с RAM. как? Сега нека се опитаме да обясним. В същото време решихме да изоставим сравненията, които миришат на детска градина, които често се срещат в популярната литература по теми за процесори (басейни, свързани с тръби с различни диаметри и т.н. и т.н.). В края на краищата, човек, който е прочел статията до този момент и не е заспал, вероятно е в състояние да издържи и „смила“ чисто техническо обяснение, без плувни басейни, котки и глухарчета.

И така, представете си, че имаме много сравнително бавна памет (нека да е RAM с размер 10 000 000 байта) и сравнително малко много бърза памет (нека да е кеш с размер само 1024 байта). Как можем да използваме този нещастен килобайт, за да увеличим скоростта на работа с цялата памет като цяло? Но тук трябва да се помни, че данните по време на работата на програмата, като правило, не се хвърлят безмислено от място на място - това промяна. Те прочетоха стойността на някаква променлива от паметта, добавиха някакво число към нея и я записаха обратно на същото място. Преброихме масива, сортирахме го във възходящ ред и отново го записахме в паметта. Тоест в един момент програмата работи не с цялата памет, а като правило със сравнително малък фрагмент от нея. Какво решение се предлага? Точно така: заредете този фрагмент в „бърза“ памет, обработете го там и след това го запишете обратно в „бавна“ памет (или просто го изтрийте от кеша, ако данните не са се променили). Като цяло, точно така работи кешът на процесора: всяка информация, прочетена от паметта, завършва не само в процесора, но и в кеша. И ако същата информация (същия адрес в паметта) е необходима отново, процесорът първо проверява: дали е в кеша? Ако има, информацията се взема от там и достъпът до паметта изобщо не се осъществява. По същия начин при записа: информацията, ако нейният обем се побира в кеша, се записва там и едва тогава, когато процесорът е завършил операцията по запис и е започнал да изпълнява други команди, записаните в кеша данни се записват паралелно с работата на процесорното ядро„бавно разтоварени“ в RAM.

Разбира се, количеството данни, прочетени и записани по време на цялата работа на програмата, е много по-голямо от размера на кеша. Следователно някои от тях трябва да се изтриват от време на време, за да могат нови, по-подходящи да се поберат в кеша. Най-простият известен механизъм за осигуряване на този процес е проследяването на времето на последния достъп до данните, намиращи се в кеша. Така че, ако трябва да поставим нови данни в кеша и той вече е „пълен до капацитет“, контролерът, който управлява кеша, преглежда кой фрагмент от кеша не е бил достъпен най-дълго време? Именно този фрагмент е първият кандидат за „заминаване“, а на негово място се записват нови данни, с които трябва да се работи сега. Това е, в общи линии, как работи механизмът за кеширане в процесорите. Разбира се, горното обяснение е много примитивно; всъщност всичко е още по-сложно, но се надяваме, че сте успели да получите обща представа защо процесорът се нуждае от кеш и как работи.

За да стане ясно колко важен е кешът, нека дадем прост пример: скоростта на обмен на данни между процесора Pentium 4 и неговите кеш памети е повече от 10 пъти (!) по-висока от скоростта на работата му с паметта. Всъщност съвременните процесори са способни да работят с пълен капацитет само с кеша: веднага щом се сблъскат с необходимостта да четат данни от паметта, всичките им прехвалени мегахерци просто започват да „нагряват въздуха“. Отново прост пример: процесорът изпълнява най-простата инструкция за един такт, тоест за секунда може да изпълни това количество прости инструкции, каква е неговата честота (всъщност дори повече, но ще оставим това за по-късно...). Но времето за изчакване на данни от паметта може в най-лошия случай да бъде повече от 200 цикъла! Какво прави процесорът, докато чака необходимите данни? Но той не прави нищо. Просто стоя и чакам...

Многостепенно кеширане

Специфичният дизайн на съвременните процесорни ядра доведе до факта, че системата за кеширане в по-голямата част от процесорите трябва да бъде многостепенна. Кешът от първо ниво (най-близо до ядрото) традиционно се разделя на две (обикновено равни) половини: кешът за инструкции (L1I) и кешът за данни (L1D). Това разделение е предвидено от така наречената „Харвардска архитектура” на процесора, която към днешна дата е най-популярната теоретична разработка за изграждане на съвременни процесори. В L1I съответно се натрупват само команди (декодерът работи с него, вижте по-долу), а в L1D се натрупват само данни (те впоследствие, като правило, се озовават във вътрешните регистри на процесора). „Над L1“ има кеш от второ ниво - L2. По правило той е по-голям по обем и вече е „смесен“ - там се намират както команди, така и данни. L3 (кеш от трето ниво), като правило, напълно възпроизвежда структурата на L2 и рядко се среща в съвременните процесори x86. Най-често L3 е плод на компромис: чрез използване на по-бавна и по-тясна шина може да се направи много голям, но в същото време скоростта на L3 все още остава по-висока от скоростта на паметта (макар и не толкова висока, колкото L2 кеша ). Въпреки това алгоритъмът за работа с кеш на много нива като цяло не се различава от алгоритъма за работа с кеш на едно ниво, той просто добавя допълнителни итерации: първо се търси информация в L1, ако не е там - в L2, след това - в L3 и едва тогава, ако не се намери на едно ниво на кеша - се осъществява достъп до основната памет (RAM).

Декодер

Всъщност изпълнителните модули на всички съвременни десктоп x86 процесори... изобщо не работят с код в x86 стандарта. Всеки процесор има своя собствена „вътрешна“ командна система, която няма нищо общо с онези команди (т.е. „код“), които идват отвън. Като цяло, командите, изпълнявани от ядрото, са много по-прости, по-примитивни от командите на стандарта x86. Именно за да може процесорът „външно да изглежда“ като x86 CPU, има такъв блок като декодер: той е отговорен за преобразуването на „външния“ x86 код във „вътрешни“ команди, изпълнявани от ядрото (в този случай доста често една команда от x86 код се преобразува в малко по-проста „вътрешна“). Декодерът е много важна част от съвременния процесор: неговата скорост определя колко постоянен ще бъде потокът от команди, пристигащи към изпълнителните модули. В крайна сметка те не могат да работят с x86 код, така че дали ще направят нещо или ще бездействат зависи до голяма степен от скоростта на декодера. Intel внедри доста необичаен начин за ускоряване на процеса на декодиране на команди в процесори с архитектура NetBurst - вижте по-долу за Trace cache.

Изпълнителни (функционални) устройства

След като преминаха през всички нива на кеша и декодера, командите най-накрая стигнаха до онези блокове, за които беше организиран целият този хаос: изпълняващустройства. Всъщност това са устройствата за екзекуция само необходим елемент процесор. Можете да направите без кеша - скоростта ще намалее, но програмите ще работят. Можете да направите без декодер - устройствата за изпълнение ще станат по-сложни, но процесорът ще продължи да работи. В края на краищата ранните x86 процесори (i8086, i80186, 286, 386, 486, Am5x86) по някакъв начин се справяха без декодер. Невъзможно е без изпълнителни устройства, защото те са тези, които изпълняват програмния код. В най-първо приближение те традиционно се разделят на две големи групи: аритметични логически единици (ALU) и единици с плаваща запетая (FPU).

Аритметични логически устройства

ALU традиционно отговарят за два типа операции: аритметични операции (събиране, изваждане, умножение, деление) с цели числа, логически операции с отново цели числа (логическо „и“, логическо „или“, „изключително или“ и други подобни). Което всъщност следва и от името им. По правило в съвременните процесори има няколко ALU единици. За какво - ще разберете по-късно, след като прочетете раздела „Суперскаларност и извънредно изпълнение на команди“. Ясно е, че ALU може да изпълнява само онези инструкции, които са предназначени за него. Специален блок отговаря за разпределянето на команди, идващи от декодера към различни устройства за изпълнение, но това е, както се казва, „твърде сложни въпроси“ и едва ли има смисъл да ги обясняваме в материал, който е посветен само на повърхностно запознаване с основните принципи на работа на модерния процесор x86.

Единица с плаваща запетая*

FPU е отговорен за изпълнението на команди, които работят с числа с плаваща запетая, освен това традиционно те „окачват всички кучета“ на него под формата на всякакви допълнителни набори от команди (MMX, 3DNow!, SSE, SSE2, SSE3.. .) - независимо дали работят с числа с плаваща запетая или цели числа. Както в случая с ALU, във FPU може да има няколко отделни блока и те могат да работят паралелно.

* - според традициите на руската математическа школа, ние наричаме FPU „плаваща изчислителна единица“ запетая“, въпреки че буквално името му (Плаващ Точка Unit) се превежда като „... плаваща запетая“ - според американския стандарт за писане на такива числа.

Регистри на процесора

Регистрите по същество са същите клетки на паметта, но „географски“ те се намират директно в ядрото на процесора. Разбира се, скоростта на работа с регистрите е многократно по-голяма от скоростта на работа с клетките на паметта, разположени в основната RAM (тук общо взето на порядъци...) и с кешове от всяко ниво. Следователно повечето инструкции в x86 архитектурата включват извършване на действия конкретно върху съдържанието на регистрите, а не върху съдържанието на паметта. Въпреки това, общият обем на регистрите на процесора като правило е много малък - дори не е сравним с обема на кеш паметта от първо ниво. Следователно де факто програмният код (не на език от високо ниво, а двоичен, „машина“) често съдържа следната последователност от операции: зареждане на информация от RAM в един от регистрите на процесора, зареждане на друга информация в друг регистър (също от RAM), извършете някакво действие върху съдържанието на тези регистри, като поставите резултата в третия - и след това отново разтоварете резултата от регистъра в основната памет. Процесор в детайли

Характеристики на кешовете

Честота и шина на кеша

Във всички модерни процесори x86 всички нива на кеш паметта работят на същата честота като ядрото на процесора, но това не винаги е било така ( този въпросвече се е повишила). Скоростта на работа с кеша обаче зависи не само от честотата, но и от ширината на шината, с която е свързан към ядрото на процесора. Както (надявам се) си спомняте от предишното четене, скоростта на трансфер на данни е по същество произведението на честотата на шината (брой тактови цикли в секунда) по броя на байтовете, които се прехвърлят по шината за един тактов цикъл. Броят на байтовете, предавани за тактов цикъл, може да бъде увеличен чрез въвеждане на протоколи DDR и QDR (Double Data Rate и Quad Data Rate) - или просто чрез увеличаване на ширината на шината. В случая с кеша втората опция е по-популярна, не на последно място поради „пикантните функции“ на DDR/QDR, описани по-горе. Разбира се, минималната разумна ширина на кеш шината е ширината на външната шина на самия процесор, тоест към днешна дата - 64 бита. Точно това прави AMD в духа на здравословния минимализъм: в неговите процесори ширината на шината L1 L2 е 64 бита, но в същото време е двупосочна, тоест способна е едновременно да предава и получава информация . Intel отново действа в духа на „здравословния гигантизъм“: в своите процесори, започвайки с Pentium III „Coppermine“, шината L1 L2 има ширина от... 256 бита! Според принципа „не можеш да развалиш кашата с масло“, както се казва. Вярно, тази шина е еднопосочна, тоест в един момент работи или само за предаване, или само за приемане. Дебатът за това кой подход е по-добър (двупосочен автобус, но по-тесен, или еднопосочен по-широк) продължава и до днес... както и много други дебати относно технически решения, използван от двамата основни конкуренти на пазара на x86 CPU.

Изключителен и неизключителен кеш

Концепциите за изключително и неизключително кеширане са много прости: в случай на неизключителен кеш информацията на всички нива на кеширане може да бъде дублирана. Така L2 може да съдържа данните, които вече са в L1I и L1D, а L3 (ако има такъв) може да съдържа пълно копие на цялото съдържание на L2 (и съответно L1I и L1D). Изключителният кеш, за разлика от неизключителния, осигурява ясно разграничение: ако информацията се съдържа на някое ниво на кеша, тогава тя не присъства на всички останали. Предимството на изключителния кеш е очевидно: общият размер на кешираната информация в този случай е равен на общия обем на кешовете на всички нива - за разлика от неизключителния кеш, където размерът на кешираната информация (в най-лошия случай ) е равен на обема на най-голямото ниво на кеша. Недостатъкът на ексклузивния кеш е по-малко очевиден, но съществува: необходим е специален механизъм, който следи действителната „изключителност“ (например, когато изтривате информация от L1 кеша, процесът на копирането й в L2 се стартира автоматично преди това ).

Неизключителният кеш традиционно се използва от Intel, изключителен (от появата на Процесори Athlonна ядрото Thunderbird) - компания AMD. Като цяло, тук виждаме класическа конфронтация между обем и скорост: поради ексклузивността, със същите L1/L2 обеми, AMD получава по-голям общ размер на кешираната информация - но поради това работи и по-бавно (закъснения, причинени от присъствието на механизъм за изключителност). Вероятно трябва да се отбележи, че недостатъците на неизключителния кеш на Intel са напоследъккомпенсира просто, глупаво, но значително: като увеличи обема си. За най-добрите процесори на тази компания 2 MB L2 кеш почти се превърна в норма - и AMD, със своите 128 KB L1C+L1D и максимум 1 MB L2, все още не е „надминал“ тези 2 MB дори поради ексклузивност .

В допълнение, увеличаването на общия обем на кеширана информация чрез въвеждане на изключителна кеш архитектура има смисъл само ако печалбата в обема е доста голяма Им. За AMD това е от значение, защото... текущите му процесори имат общ L1D+L1I обем от 128 KB. За процесори на Intel, чийто L1D обем е максимум 32 KB, а L1I понякога има напълно различна структура (вижте за Trace cache), въвеждането на изключителна архитектура би донесло много по-малко ползи.

Съществува и често срещано погрешно схващане, че архитектурата на кеша на процесорите на Intel е „включваща“. Не точно. НЕ е изключителен. Включващата архитектура осигурява това на „долното“ ниво на кеша не моганяма нещо, което да не е на „по-високото“. Не изключителна архитектура признавадублиране на данни на различни нива.

Кеш за проследяване

Концепцията на Trace cache е да съхранява в кеша за инструкции от първо ниво (L1I) не онези инструкции, които се четат от паметта, а вече декодирани последователности (вижте декодер). По този начин, ако определена x86 инструкция се изпълнява многократно и все още е в L1I, декодерът на процесора не трябва да я преобразува отново в последователност от инструкции за „вътрешен код“, тъй като L1I съдържа тази последователност във вече декодирана форма. Концепцията на Trace cache се вписва много добре в общата концепция на архитектурата Intel NetBurst, която е насочена към създаване на процесори с много високи честоти на ядрото. Въпреки това, полезността на Trace кеша за [сравнително] по-нискочестотни процесори все още е под въпрос, тъй като сложността на организирането на Trace кеша става сравнима със задачата за проектиране на конвенционален бърз декодер. Ето защо, отдавайки почит на оригиналността на идеята, все пак бихме казали, че Trace cache не може да се счита за универсално решение „за всички случаи“.

Суперскаларност и извънредно изпълнение на инструкции

Основната характеристика на всички съвременни процесори е, че те могат да стартират изпълнение не само на командата, която (според програмния код) трябва да се изпълни в даден момент, но и на други, следващи я. Нека дадем прост (каноничен) пример. Нека изпълним следната последователност от команди:

1) A = B + C
2) Z = X + Y
3) K = A + Z

Лесно се вижда, че командите (1) и (2) са напълно независими една от друга - те не се пресичат нито в изходните данни (променливи B и C в първия случай, X и Y във втория), нито в местоположението на резултата (променлива A в първия случай и Z във втория). Следователно, ако в момента имаме повече от един свободен блок за изпълнение, тези команди могат да бъдат разпределени между тях и да се изпълняват едновременно, а не последователно*. Така, ако вземем времето за изпълнение на всяка команда равно на N процесорни цикъла, тогава в класическия случай изпълнението на цялата последователност ще отнеме N*3 тактови цикъла, а в случай на паралелно изпълнение - само N*2 тактови цикъла (тъй като команда (3) не може да бъде изпълнена, без да се изчака резултатът от предходните две).

* - разбира се, степента на паралелизъм не е безкрайна: командите могат да се изпълняват паралелно само ако в даден момент има подходящ брой свободни блокове (FU), и то точно тези, които “разбират” въпросните команди. Най-простият пример: блок, принадлежащ към ALU, физически не може да изпълни инструкция, предназначена за FPU. Обратното също е вярно.

Всъщност е още по-сложно. И така, ако имаме следната последователност:

1) A = B + C
2) K = A + M
3) Z = X + Y

Тогава опашката за изпълнение на команди на процесора ще бъде променена! Тъй като команди (1) и (3) са независими една от друга (нито в изходните данни, нито в местоположението на резултата), те могат да бъдат изпълнени паралелно - и ще бъдат изпълнени паралелно. Но команда (2) ще бъде изпълнена след тях (третата) - тъй като, за да бъде резултатът от изчислението правилен, е необходимо команда (1) да бъде изпълнена преди нея. Ето защо механизмът, разгледан в този раздел, се нарича „изпълнение на команди извън реда“ (Out-of-Order Execution или накратко „OoO“): в случаите, когато редът на изпълнение не може по никакъв начин да повлияе на резултат, командите се изпращат за изпълнение в грешен ред.последователността, в която са разположени в програмния код, но в тази, която ви позволява да постигнете максимална производителност.

Сега най-накрая трябва да ви стане ясно защо съвременните процесори се нуждаят от толкова много изпълнителни единици от един и същи тип: те осигуряват възможност за паралелно изпълнение на няколко команди, които в случай на „класическия“ подход към дизайна на процесора трябва да бъдат изпълнени в последователността, в която се съдържат в изходния код.един след друг.

Процесорите, оборудвани с механизъм за паралелно изпълнение на няколко последователни инструкции, обикновено се наричат ​​„суперскаларни“. Въпреки това, не всички суперскаларни процесори поддържат изпълнение извън ред. И така, в първия пример „простата суперскаларност“ (изпълнение на две последователни команди едновременно) е достатъчна за нас - но във втория пример не можем без пренареждане на команди, ако искаме да получим максимална производителност. Всички съвременни процесори x86 имат и двете качества: те са суперскаларни и поддържат изпълнение на инструкции извън реда. В същото време в историята на x86 имаше и „прости суперскалари“, които не поддържаха OoO. Например класическият десктоп x86 суперскалар без OoO беше Intel Pentium.

За да бъдем честни, струва си да се отбележи, че нито Intel, нито AMD, нито който и да е друг (включително вече починал) производител на процесори x86 има някаква заслуга в разработването на концепциите за суперскаларност и OoO. Първият суперскаларен компютър, поддържащ OoO, е разработен от Seymour Cray през 60-те години на 20 век. За сравнение: Intel пусна първия си суперскаларен процесор (Pentium) през 1993 г., първият суперскаларен процесор с OoO (Pentium Pro) - през 1995 г.; Първият OoO суперскалар на AMD (K5) беше пуснат през 1996 г. Коментарите, както се казва, са излишни...

Предварително (предварително) декодиране
и кеширане

Прогноза за разклонения

Всяка повече или по-малко сложна програма съдържа условни команди за прескачане: „Ако определено условие е вярно, преминете към изпълнението на една част от кода, ако не, преминете към друга.“ От гледна точка на скоростта на изпълнение на програмния код от модерен процесор, който поддържа изпълнение извън реда, всяка условна команда за прескачане е наистина бич Божий. В края на краищата, докато не стане известно кой раздел от кода след условния скок ще бъде „уместен“, е невъзможно да започне декодирането и изпълнението му (вижте изпълнение извън реда). За да се съчетае по някакъв начин концепцията за изпълнение извън реда с командите за условен преход, е предвиден специален блок: блокът за предсказване на разклонения. Както подсказва името му, той по същество се занимава с „пророчества“: той се опитва да предвиди към коя част от кода ще сочи командата за условен скок, дори преди да бъде изпълнена. В съответствие с инструкциите на „обикновения вътрешноядрен пророк“ процесорът извършва съвсем реални действия: „пророкуваната“ част от кода се зарежда в кеша (ако не е там) и дори започва да декодира и изпълнява своите команди . Освен това сред изпълнените команди може да има и инструкции за условно прескачане, като техните резултати също се предвиждат, което генерира цяла верига от все още не е потвърденопрогнози! Разбира се, ако модулът за прогнозиране на разклонения е грешен, цялата работа, извършена в съответствие с неговите прогнози, просто се отменя.

Всъщност алгоритмите, използвани от блока за прогнозиране на разклонения, изобщо не са шедьоври изкуствен интелект. Най-често са прости... и глупави. Тъй като най-често командата за условен скок се среща в цикли: определен брояч приема стойността X и след всяко преминаване на цикъла стойността на брояча се намалява с единица. Съответно, докато стойността на брояча е по-голяма от нула, се извършва преход към началото на цикъла и след като стане равна на нула, изпълнението продължава по-нататък. Блокът за предсказване на разклонения просто анализира резултата от изпълнението на команда за условен скок и вярва, че ако N пъти подред резултатът е скок към определен адрес, тогава в N+1 случая ще бъде направен скок към същия адрес. Но въпреки целия примитивизъм, тази схема работи добре: например, ако броячът приеме стойност 100 и „прагът на работа“ на предсказателя на клона (N) е равен на два прехода подред към един и същ адрес - лесно се вижда, че 97 прехода от 98 ще бъдат предвидени правилно!

Разбира се, въпреки доста високата ефективност на простите алгоритми, механизмите за предсказване на разклоненията в съвременните процесори все още непрекъснато се подобряват и стават по-сложни - но тук говорим за борба за единици проценти: например за увеличаване на ефективността на единица за прогнозиране на разклонения от 95 процента на 97 или дори от 97% на 99...

Предварително извличане на данни

Блокът за предварително извличане на данни (Prefetch) е много подобен по своя принцип на работа на блока за предсказване на разклоненията - единствената разлика е, че в този случай говорим не за код, а за данни. Общият принцип на работа е същият: ако вградената верига за анализ на достъпа до данни в RAM реши, че определена секция от паметта, която все още не е заредена в кеша, скоро ще бъде достъпна, тя дава команда за зареждане на тази секция от паметта кеша дори преди да е необходим на изпълнимата програма. „Умно“ (ефективно) работещо устройство за предварително извличане може значително да намали времето за достъп до необходимите данни и съответно да увеличи скоростта на изпълнение на програмата. Между другото: компетентният Prefetch много добре компенсира високата латентност на подсистемата на паметта, зарежда необходимите данни в кеша и по този начин изравнява забавянията при достъп до него, ако не е в кеша, а в основната RAM .

Въпреки това, разбира се, в случай на грешка в модула за предварително извличане на данни, негативните последици са неизбежни: чрез зареждане на фактически „ненужни“ данни в кеша, Prefetch измества други от него (може би само тези, които са необходими). В допълнение, чрез „предвиждането“ на операцията за четене се създава допълнително натоварване на контролера на паметта (де факто, в случай на грешка, напълно безполезно).

Алгоритмите за предварително извличане, подобно на алгоритмите на блока за прогнозиране на разклоненията, също не блестят с интелигентност: като правило, този блоктърси да проследи дали информацията се чете от паметта с определена „стъпка“ (на адреси) и въз основа на този анализ се опитва да предвиди от кой адрес ще бъдат прочетени данните по време на по-нататъшната работа на програмата. Въпреки това, както в случая с блока за предсказване на разклоненията, простотата на алгоритъма изобщо не означава ниска ефективност: средно блокът за предварително извличане на данни „удря“ по-често, отколкото прави грешки (и това, както в предишния случай , се дължи главно на факта, че „ Масовото" четене на данни от паметта, като правило, се случва по време на изпълнение на различни цикли). Заключение

Аз съм онзи заек, който не може да започне да дъвче трева, докато...
няма да разбере във всички подробности как протича процесът на фотосинтеза!
(изказване на лична позиция от един от близките приятели на автора)

Напълно възможно е чувствата, които сте изпитали, след като прочетете тази статия, да се опишат приблизително по следния начин: „Вместо да обяснят с пръсти кой процесор е по-добър, те взеха и натовариха мозъка ми с куп специфична информация, която все още трябва да бъде разбрана и разбран, и не се вижда край!“ Напълно нормална реакция: повярвай ми, разбираме те добре. Да кажем още повече (и нека короната да падне от главата ви!): ако мислите, че ние сами можем да отговорим на този прост въпрос („кой процесор е по-добър?“), тогава много грешите. Не мога. За едни задачи е по-добро едно, за други - друго, а след това цената е различна, наличността, предпочитанията на даден потребител за определени марки... Проблемът няма ясно решение. Ако беше така, със сигурност някой щеше да го намери и щеше да стане най-известният наблюдател в историята на независимите лаборатории за тестване.

Искам още веднъж да подчертая: дори след като сте усвоили и разбрали напълно цялата информация, представена в този материал- все още няма да можете да предвидите кой от двата процесора ще бъде по-бърз в задачите ви, като гледате само техните характеристики. Първо, защото не всички характеристики на процесорите са разгледани тук. Второ, защото има и параметри на процесора, които могат да бъдат представени само в цифрова форма с много голям разтег. И така, за кого (и за какво) е написано всичко това? Основно - за същите тези „зайци“, които със сигурност искат да знаят какво се случва вътре в устройствата, които използват всеки ден. За какво? Може би просто се чувстват по-добре, когато знаят какво се случва около тях? :)

В близко бъдеще има планове за разширяване на ЧЗВ:

  1. Раздел, посветен на многопроцесорни системи: обяснение на концепцията за SMP, Hyper-Threading технология, N-обработка, N-ядро.
  2. Секция, посветена на физическите характеристики на процесора: видове корпуси, гнезда, консумация на енергия и др.


Свързани публикации