Какво влияе броят на процесорните ядра? Многоядрен процесор. Какво е централен процесор

  • Урок

В тази статия ще се опитам да опиша терминологията, използвана за описание на системи, способни да изпълняват множество програми паралелно, тоест многоядрени, многопроцесорни, многонишкови. Различните видове паралелизъм в процесорите IA-32 се появяват по различно време и по малко непоследователен начин. Доста лесно е да се объркате във всичко това, особено като се има предвид, че операционните системи внимателно крият детайли от не твърде сложни приложения.

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

Предупреждение за знаци ®, ™ в статията

Моят обяснява защо служителите на компанията трябва да използват марки за авторски права в публичните комуникации. В тази статия трябваше да ги използвам доста често.

процесор

Разбира се, най-старият, най-често използван и спорен термин е "процесор".

В съвременния свят процесорът е това, което купуваме в красива кутия за продажба на дребно или не особено красива OEM опаковка. Неделима единица, която се включва в гнездо на дънната платка. Дори ако няма конектор и не може да бъде премахнат, тоест ако е здраво запоен, това е един чип.

Мобилните системи (телефони, таблети, лаптопи) и повечето настолни компютри имат един процесор. Работните станции и сървърите понякога разполагат с два или повече процесора на една дънна платка.

Поддържането на множество процесори в една система изисква множество промени в дизайна. Като минимум е необходимо да се осигури тяхната физическа връзка (осигурете няколко гнезда на дънната платка), да се решат проблемите с идентифицирането на процесори (вижте по-нататък в тази статия, както и моята бележка), договаряне на достъп до паметта и доставяне на прекъсвания (прекъсването контролерът трябва да може да насочва прекъсванията към множество процесори) и, разбира се, поддръжка от операционната система. За съжаление не можах да намеря документално споменаване за създаването на първата многопроцесорна система, базирана на процесори Intel, но Wikipedia твърди, че Sequent Computer Systems ги е доставила още през 1987 г., използвайки процесори Intel 80386. Широко разпространената поддръжка за множество чипове в една система става наличен, като се започне с Intel® Pentium.

Ако има няколко процесора, тогава всеки от тях има собствен конектор на платката. В същото време всеки от тях има пълни независими копия на всички ресурси, като регистри, изпълнители, кешове. Те споделят обща памет - RAM. Паметта може да бъде свързана с тях по различни и доста нетривиални начини, но това е отделна история извън обхвата на тази статия. Важно е при всеки сценарий за изпълними програми да се създаде илюзията за единна споделена памет, налична от всички процесори, включени в системата.


Готов за излитане! Настолна платка Intel® D5400XS

Ядро

Исторически многоядреното в Intel IA-32 се появява по-късно от Intel® HyperThreading, но в логическата йерархия идва на следващо място.

Изглежда, че ако системата има повече процесори, тогава нейната производителност е по-висока (при задачи, които могат да използват всички ресурси). Въпреки това, ако цената на комуникацията между тях е твърде висока, тогава цялата печалба от паралелизма се убива от дългите закъснения при трансфера на споделени данни. Точно това се наблюдава при многопроцесорните системи – както физически, така и логически, те са много далеч една от друга. За да се комуникира ефективно в такава среда, трябва да бъдат изобретени специализирани шини като Intel® QuickPath Interconnect. Разходът на енергия, размерът и цената на крайното решение, разбира се, не намаляват от всичко това. Високата интеграция на компонентите трябва да дойде на помощ - схемите, изпълняващи части от паралелна програма, трябва да се влачат по-близо една до друга, за предпочитане на един кристал. С други думи, един процесор трябва да организира няколко ядра, във всичко идентични един с друг, но работещи независимо.

Първите многоядрени процесори IA-32 на Intel бяха представени през 2005 г. Оттогава средният брой ядра в сървърни, настолни и сега мобилни платформи непрекъснато нараства.

За разлика от два едноядрени процесора в една и съща система, споделящи само памет, две ядра могат също да споделят кеш паметта и други ресурси, които са отговорни за взаимодействието с паметта. Най-често кешовете от първо ниво остават частни (всяко ядро ​​има свое собствено), докато второто и третото ниво могат да бъдат споделени или отделни. Тази организация на системата позволява да се намалят закъсненията при доставката на данни между съседните ядра, особено ако работят по обща задача.


Микроснимка на четириядрен процесор на Intel с кодово име Nehalem. Разпределени са отделни ядра, споделен L3 кеш, както и QPI връзки към други процесори и общ контролер на паметта.

Hyperthreading

До около 2002 г. единственият начин да се получи система IA-32, способна да изпълнява две или повече програми паралелно, беше да се използват многопроцесорни системи. Intel® Pentium® 4, както и линията Xeon, с кодово име Foster (Netburst), въвеждат нова технология – hyperthreading или hyperthreading – Intel® HyperThreading (наричана по-долу HT).

Няма нищо ново под слънцето. HT е специален случай на това, което литературата нарича едновременна многонишкова обработка (SMT). За разлика от „реалните“ ядра, които са пълни и независими копия, в случая с HT само част от вътрешните възли се дублират в един процесор, отговорен основно за съхраняването на архитектурното състояние – регистрите. Изпълнителните възли, отговорни за организирането и обработката на данни, остават в единствено число и във всеки един момент се използват от най-много една от нишките. Подобно на ядрата, хипернишките споделят кеш помежду си, но от какво ниво зависи от конкретната система.

Няма да се опитвам да обяснявам всички плюсове и минуси на дизайна със SMT като цяло и с HT в частност. Заинтересованият читател може да намери доста подробно обсъждане на технологията в много източници и разбира се в Wikipedia. Ще отбележа обаче следния важен момент, който обяснява сегашните ограничения за броя на хипернишките в реалните продукти.

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

Типичните сценарии на настолни и сървърни приложения за машинни архитектури с общо предназначение имат потенциал за едновременно активиране от HT. Този потенциал обаче бързо се „изчерпва“. Може би поради тази причина на почти всички процесори IA-32 броят на хардуерните хипернишки не надвишава две. В типични сценарии печалбата от използването на три или повече хипернишки би била малка, но загубата в размера на кристала, консумацията на енергия и цената е значителна.

Различна ситуация се наблюдава при типичните задачи, изпълнявани на видео ускорители. Следователно тези архитектури се характеризират с използването на SMT техники с голям брой нишки. Тъй като копроцесорите Intel® Xeon Phi (въведени през 2010 г.) са идеологически и генеалогично доста близки до видеокартите, те могат да бъдат четири Hyperthreading на всяко ядро ​​- конфигурация, уникална за IA-32.

Логически процесор

От трите описани „нива“ на паралелизъм (процесори, ядра, хипернишки), някои или всички от тях може да липсват в определена система. Това се влияе от настройките на BIOS (многоядрените и многонишковите са деактивирани независимо), микроархитектурните функции (например HT липсваше в Intel® Core™ Duo, но беше върнат с пускането на Nehalem) и системните събития (многопроцесорните сървъри могат да се изключват повредени процесори в случай на неизправност и продължават да "летят" на останалите). Как този многостепенен зоопарк на едновременност е видим за операционната система и в крайна сметка за приложението?

Освен това, за удобство, обозначаваме броя на процесорите, ядрата и нишките в някаква система с тройката ( х, г, z), където хе броят на процесорите ге броят на ядрата във всеки процесор, и z- броят на хипернишките във всяко ядро. По-нататък ще наричам това тройка топология- утвърден термин, който няма много общо с раздела по математика. Работете стр = xyzопределя броя на посочените обекти логически процесорисистеми. Той дефинира общия брой независими едновременни контексти на процеса на приложение в система със споделена памет, които операционната система е принудена да вземе предвид. Казвам „принудително“, защото не може да контролира реда на изпълнение на два процеса на различни логически процесори. Това важи и за хипер-нишки: въпреки че те работят "последователно" на едно и също ядро, конкретният ред е продиктуван от хардуера и не е достъпен за наблюдение или контрол на програми.

Най-често операционната система крие характеристиките на физическата топология на системата, на която се изпълнява, от крайните приложения. Например следните три топологии: (2, 1, 1), (1, 2, 1) и (1, 1, 2) - ОС ще представлява под формата на два логически процесора, въпреки че първият от тях има два процесора, вторият - две ядра, а третият има само две нишки.


Windows Task Manager показва 8 логически процесора; но колко е в процесори, ядра и хипернишки?


Горната част на Linux показва 4 логически процесора.

Това е доста удобно за разработчиците на приложения - те не трябва да се занимават с хардуерните функции, които често са без значение за тях.

Дефиниране на топологията програмно

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

Информация за топологията на системата като цяло, както и позицията на всеки логически процесор в IA-32, е достъпна с помощта на инструкцията CPUID. След появата на първите многопроцесорни системи схемата за идентификация на логическия процесор е разширявана няколко пъти. Към днешна дата части от него се съдържат в листове 1, 4 и 11 на CPUID. Кой лист да гледате може да се определи от следната блок-схема, взета от статията:

Тук няма да ви отегчавам с всички подробности за отделните части на този алгоритъм. Ако възникне интерес, тогава следващата част от тази статия може да бъде посветена на това. Ще насоча заинтересования читател, в който този въпрос е разгледан възможно най-подробно. Тук първо ще опиша накратко какво е APIC и как е свързано с топологията. След това помислете за работа с лист 0xB (единадесет в десетичната запетая), който в момента е последната дума в "апикостроение".

APIC ID
Локален APIC (разширен програмируем контролер за прекъсвания) е устройство (сега част от процесора), отговорно за работа с прекъсвания, идващи към конкретен логически процесор. Всеки логически процесор има свой собствен APIC. И всеки от тях в системата трябва да има уникална стойност на APIC ID. Този номер се използва от контролери за прекъсване за адресиране при доставка на съобщения и от всички останали (например операционната система) за идентифициране на логически процесори. Спецификацията за този контролер за прекъсвания еволюира от Intel 8259 PIC през Dual PIC, APIC и xAPIC до x2APIC.

В момента ширината на числото, съхранено в APIC ID, достигна пълните 32 бита, въпреки че в миналото беше ограничено до 16, а дори по-рано - само 8 бита. В днешно време остатъците от старите дни са разпръснати из целия CPUID, но всичките 32 бита от APIC ID се връщат в CPUID.0xB.EDX. Всеки логически процесор, независимо изпълняващ CPUID инструкцията, ще върне собствената си стойност.

Изясняване на семейните връзки
Стойността на APIC ID сама по себе си не казва нищо за топологията. За да разберете кои два логически процесора са в един физически процесор (т.е. те са „братя“ на хипернишки), кои два са вътре в един и същи процесор и кои са в напълно различни процесори, трябва да сравните техните APIC ID стойности. В зависимост от степента на връзката, някои от техните битове ще бъдат еднакви. Тази информация се съдържа в подсписъците CPUID.0xB, които са кодирани с помощта на операнда ECX. Всеки от тях описва позицията на битовото поле на едно от нивата на топология в EAX (по-точно броя на битовете, които трябва да бъдат изместени в APIC ID надясно, за да се премахнат по-ниските нива на топология), както и тип на това ниво - хипернишка, ядро ​​или процесор - в ECX.

Логическите процесори, разположени в едно и също ядро, ще имат същите APIC ID битове, с изключение на тези, които принадлежат на полето SMT. За логически процесори в същия процесор, всички битове с изключение на полетата Core и SMT. Тъй като броят на подсписъците за CPUID.0xB може да нарасне, тази схема ще позволи да се поддържа описанието на топологии с повече нива, ако възникне необходимост в бъдеще. Освен това ще бъде възможно влизането на междинни нива между съществуващите.

Важна последица от организацията на тази схема е, че може да има "дупки" в набора от всички APIC ID на всички логически процесори в системата; няма да вървят последователно. Например, в многоядрен процесор с изключен HT, всички APIC ID могат да се окажат четни, тъй като най-малко значимият бит, отговорен за кодирането на номера на хиперпотока, винаги ще бъде нула.

Имайте предвид, че CPUID.0xB не е единственият източник на информация за логическите процесори, достъпни за операционната система. Списък на всички налични за него процесори, заедно с техните APIC ID стойности, е кодиран в таблицата MADT ACPI.

Операционни системи и топология

Операционните системи предоставят информация за логическата топология на процесора на приложенията чрез техните собствени интерфейси.

В Linux информацията за топологията се съдържа в псевдофайла /proc/cpuinfo и изхода на командата dmidecode. В примера по-долу филтрирам съдържанието на cpuinfo на някаква четириядрена система без HT, оставяйки само записи, свързани с топологията:

Скрит текст

[защитен с имейл]: ~ $ cat / proc / cpuinfo | grep "процесор \ | физически \ id \ | siblings \ | core \ | ядра \ | apicid" процесор: 0 физически идентификатор: 0 братя и сестри: 4 идентификатор на ядрото: 0 ядра на процесора: 2 apicid: 0 първоначален apicid: 0 процесор: 1 физически идентификатор: 0 братя и сестри: 4 идентификатор на ядрото: 0 ядра на процесора: 2 apicid: 1 начален apicid: 1 процесор: 2 физически идентификатор: 0 братя и сестри: 4 идентификатор на ядрото: 1 процесорни ядра: 2 apicid: 2 начален apicid: 2 процесор: 3 физически идентификатор: 0 братя и сестри: 4 идентификатор на ядрото: 1 ядра на процесора: 2 apicid: 3 начален apicid: 3

Във FreeBSD топологията се отчита чрез механизма sysctl в променливата kern.sched.topology_spec като XML:

Скрит текст

[защитен с имейл]: ~ $ sysctl kern.sched.topology_spec kern.sched.topology_spec: 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 група THREADSMT група 2, 3 група THREADSMT група 4, 5 група THREADSMT група 6, 7 група THREADSMT група

В MS Windows 8 информацията за топологията може да се види в диспечера на задачите.

Когато купуват процесор, много хора се опитват да изберат нещо по-рязко, с няколко ядра и висока тактова честота. Но в същото време малко хора знаят какво всъщност влияе броят на процесорните ядра. Защо например един обикновен и непретенциозен двуядрен процесор може да бъде по-бърз от четириядрен процесор или същият "процент" с 4 ядра ще бъде по-бърз от "процесор" с 8 ядра. Това е доста интересна тема, която определено си заслужава да бъде разгледана по-подробно.

Въведение

Преди да започна да разбирам какво влияе броят на процесорните ядра, бих искал да направя малко отклонение. До преди няколко години дизайнерите на процесори бяха уверени, че производствените технологии, които напредват толкова бързо, ще произведат „камъни“ с тактова честота до 10 GHz, което ще позволи на потребителите да забравят за проблемите с лошата производителност. Успех обаче не беше постигнат.

Без значение как се развиваше техническият процес, този Intel, този AMD се сблъскаха с чисто физически ограничения, които просто не позволяваха производството на "протове" с тактова честота до 10 GHz. Тогава беше решено да се съсредоточи не върху честотите, а върху броя на ядрата. Така започна нова надпревара за производството на по-мощни и ефективни процесорни "кристали", която продължава и до днес, но не толкова активно, колкото беше в началото.

Процесори Intel и AMD

Днес Intel и AMD са преки конкуренти на пазара на процесори. По отношение на приходите и продажбите сините имат явно предимство, въпреки че напоследък червените се опитват да се справят. И двете компании имат добър набор от готови решения за всякакви случаи – от обикновен процесор с 1-2 ядра до истински чудовища, в които броят на ядрата надвишава 8. Обикновено такива „камъни“ се използват на специални работещи „компютри“, които има тесен фокус...

Intel

И така, днес Intel има 5 вида процесори: Celeron, Pentium и i7. Всеки от тези "камъни" има различен брой ядра и е предназначен за различни задачи. Например Celeron има само 2 ядра и се използва основно на офис и домашни компютри. Pentium, или както го наричат ​​още "пън", също се използва у дома, но вече има много по-добра производителност, преди всичко благодарение на технологията Hyper-Threading, която "добавя" още две виртуални ядра към физическите две ядра , които се наричат ​​нишки ... По този начин двуядрен "процент" работи като най-бюджетния четириядрен процесор, въпреки че това не е съвсем правилно, но това е основната точка.

Що се отнася до линията Core, ситуацията е приблизително същата. По-младият модел с номер 3 има 2 ядра и 2 нишки. По-старата линия - Core i5 - вече има пълни 4 или 6 ядра, но липсва функцията Hyper-Threading и няма допълнителни нишки, с изключение на 4-6 стандартни. И последното нещо - core i7 - това са процесори от най-висок клас, които като правило имат от 4 до 6 ядра и два пъти повече нишки, тоест например 4 ядра и 8 нишки или 6 ядра и 12 нишки .

AMD

Сега си струва да споменем AMD. Списъкът с "камъчета" от тази компания е огромен, няма смисъл да изброявам всичко, тъй като повечето модели просто са остарели. Струва си, може би, да се отбележи новото поколение, което в известен смисъл "копира" "Intel" - Ryzen. Тази линия съдържа и модели с номера 3, 5 и 7. Основната разлика от сините на Ryzen е, че най-младият модел незабавно осигурява пълни 4 ядра, докато по-старият модел има не 6, а осем. Освен това броят на нишките варира. Ryzen 3 - 4 нишки, Ryzen 5 - 8-12 (в зависимост от броя на ядрата - 4 или 6) и Ryzen 7 - 16 нишки.

Струва си да се спомене още една "червена" линия - FX, която се появи през 2012 г. и всъщност тази платформа вече се счита за остаряла, но благодарение на факта, че сега все повече и повече програми и игри започват да поддържат многонишковост, Линията Vishera отново придоби популярност, която наред с ниските цени само расте.

Е, що се отнася до споровете за честотата на процесора и броя на ядрата, тогава всъщност е по-правилно да погледнем към второто, тъй като всички вече са решили за тактовите честоти за дълго време и дори топ моделите на Intel работят на номинални 2.7, 2.8, 3 GHz. Освен това честотата винаги може да се повиши с помощта на овърклок, но в случай на двуядрен процесор това няма да даде голям ефект.

Как да разберете колко ядра

Ако някой не знае как да определи броя на процесорните ядра, тогава това може да се направи лесно и просто, дори без изтегляне и инсталиране на отделни специални програми. Просто трябва да отидете в "Диспечер на устройства" и да кликнете върху малката стрелка до елемента "Процесори".

Можете да получите по-подробна информация за това какви технологии поддържа вашият "камък", каква тактова честота има, неговия номер на ревизия и много други с помощта на специална и малка програма CPU-Z. Можете да го изтеглите безплатно на официалния уебсайт. Има версия, която не изисква инсталация.

Предимството на две ядра

Какво може да бъде предимството на двуядрен процесор? В много неща, например в игри или приложения, при разработването на които еднонишковата работа беше основен приоритет. Вземете например играта Wold of Tanks. Най-често срещаните двуядрени процесори като Pentium или Celeron ще дадат доста приличен резултат по отношение на производителността, докато някои FX от AMD или INTEL Core ще използват много повече от възможностите си и резултатът ще бъде приблизително същият.

По-добрите 4 ядра

Как може 4 ядра да са по-добри от две? По-добро представяне. Четириядрените "камъни" са предназначени за по-сериозна работа, където простите "коноп" или "селерони" просто не могат да се справят. Всяка програма за 3D графика като 3Ds Max или Cinema4D е чудесен пример за това.

По време на процеса на изобразяване тези програми използват максималните компютърни ресурси, включително RAM и процесор. Двуядрените процесори ще изостават много във времето за обработка на изобразяване и колкото по-сложна е сцената, толкова повече време ще отнеме. Но процесорите с четири ядра ще се справят с тази задача много по-бързо, тъй като допълнителни нишки също ще им дойдат на помощ.

Разбира се, можете да вземете някакъв бюджетен "проциклист" от семейството на Core i3, например 6100, но 2 ядра и 2 допълнителни нишки все още ще бъдат по-ниски от пълноценния четириядрен процесор.

6 и 8 ядра

Е, и последният сегмент от многоядра - процесори с шест и осем ядра. Основната им цел по принцип е точно същата като тази на процесора по-горе, само че те са необходими там, където обикновените "четворки" не могат да се справят. Освен това, на базата на "камъни" с 6 и 8 ядра, те изграждат пълноценни профилни компютри, които ще бъдат "заточени" за определени дейности, например редактиране на видео, 3D програми за моделиране, рендиране на готови тежки сцени с голям брой полигони и обекти и др. .d.

Освен това такива многоядра се показват много добре при работа с архиватори или в приложения, където е необходима добра изчислителна мощност. В игри, които са оптимизирани за многонишковост, няма равен на такива процесори.

Какво влияе върху броя на процесорните ядра

И така, на какво друго може да повлияе броят на ядрата? На първо място, за увеличаване на консумацията на енергия. Да, колкото и невероятно да звучи, но е така. Не трябва да се притеснявате твърде много, защото в ежедневието този проблем, така да се каже, няма да бъде забележим.

Вторият е отоплението. Колкото повече ядра, толкова по-добра е охладителната система. Програмата AIDA64 ще помогне за измерване на температурата на процесора. При стартиране трябва да кликнете върху "Компютър" и след това да изберете "Сензори". Необходимо е да се следи температурата на процесора, защото ако той постоянно прегрява или работи при твърде високи температури, след известно време той просто ще изгори.

Двуядрените процесори не са запознати с подобен проблем, защото нямат твърде висока производителност и съответно разсейване на топлината, но многоядрените процесори - да. За "най-горещите" камъни се считат от AMD, особено от серията FX. Например вземете FX-6300. Температурата на процесора в програмата AIDA64 е около 40 градуса и това е в режим на готовност. При натоварване цифрата ще расте и ако възникне прегряване, компютърът ще се изключи. Така че, когато купувате многоядрен процесор, не бива да забравяте за охладител.

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

Струва си да се каже и няколко думи за факта, че многоядрените процесори имат много полезно нещо, наречено "L3 кеш от трето ниво". Този кеш има определено количество памет, която постоянно записва различна информация за работещи програми, извършени действия и т. н. Всичко това е необходимо, за да се увеличи скоростта на компютъра и неговата производителност. Например, ако човек често използва Photoshop, тогава тази информация ще бъде запазена в паметта на кашата и времето за стартиране и отваряне на програмата ще бъде значително намалено.

Обобщавайки

Обобщавайки разговора за това какво влияе броят на процесорните ядра, можем да стигнем до едно просто заключение: ако имате нужда от добра производителност, скорост, многозадачност, работа в тежки приложения, възможност за удобно игра на съвременни игри и т.н., тогава вашият избор е процесор с четири или повече ядра. Ако имате нужда от обикновен "компютър" за офис или домашна употреба, който ще бъде използван до минимум, тогава 2 ядра са това, от което се нуждаете. Във всеки случай, когато избирате процесор, първо трябва да анализирате всичките си нужди и задачи и едва след това да разгледате всякакви опции.

Процесорът е основното компютърно устройство, което извършва логически и аритметични операции и управлява всички компоненти на компютъра. Процесорът е миниатюрна правоъгълна тънка силиконова плоча, която съдържа огромен брой транзистори, които изпълняват всички функции, изпълнявани от процесора. Силиконова плоча е много крехка и тъй като всяка повреда по нея ще доведе до повреда на процесора, тя се поставя в пластмасов или керамичен корпус.

1. Въведение 2. Ядро на процесора 2.1. Как работи процесорното ядро 2.2. Начини за подобряване на производителността на процесорното ядро 2.2.1. Тръбопроводи 2.2.2. Суперскаларност 2.2.3. Паралелна обработка на данни 2.2.4. Hyper-threading технология 2.2.5. Технология Turbo Boost. 2.2.6. Ефективност на изпълнението на командите. 2.3 Начини за намаляване на консумацията на енергия от процесорното ядро 3. Кеш памет

1. Въведение.

Модерният процесор е сложно и високотехнологично устройство, което включва всички най-нови постижения в изчислителните технологии и свързаните с тях области на науката.

Повечето съвременни процесори се състоят от:

    едно или повече ядра, които изпълняват всички инструкции;

    няколко нива на кеш паметта (обикновено 2 или три нива), ускоряващи взаимодействието на процесора с RAM;

    RAM контролер;

    контролер на системна шина (DMI, QPI, HT и др.);

И се характеризира със следните параметри:

    вид микроархитектура;

    тактова честота;

    набор от изпълними команди;

    броя на кеш нивата и техния размер;

    вида и скоростта на системната шина;

    размера на обработените думи;

    наличието или отсъствието на вграден контролер на паметта;

    типът на поддържаната RAM памет;

    количеството адресируема памет;

    наличието или отсъствието на вградено графично ядро;

    консумация на енергия.

Опростена блокова схема на модерен многоядрен процесор е показана на фигура 1.

Нека започнем нашия преглед на процесорното устройство с основната му част - ядрото.

2. Ядрото на процесора.

Ядрото на процесора е основната му част, съдържаща всички функционални блокове и изпълняваща всички логически и аритметични операции.

Фигура 1 показва блокова схема на ядрото на процесора. Както можете да видите на фигурата, всяко ядро ​​на процесора се състои от няколко функционални блока:

    извличане на блок с инструкции;

    блокове за декодиране на инструкции;

    блокове за вземане на проби от данни;

    контролен блок;

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

    блокове за запазване на резултати;

    блок на работа с прекъсвания;

    набор от регистри;

    командния брояч.

Блок за извличане на инструкциичете инструкции на адреса, посочен в брояча на командите. Обикновено чете няколко инструкции на такт. Броят на четливите инструкции се определя от броя на декодиращите блокове, тъй като е необходимо блоковете за декодиране да се зареждат колкото е възможно повече при всеки цикъл на работа. За да може модулът за извличане да работи оптимално, в процесорното ядро ​​има предиктор за разклонение.

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

Декодиращи блокове, както подсказва името, са блокове, които декодират инструкции, т.е. определя какво трябва да направи процесорът и какви допълнителни данни са необходими за изпълнение на инструкцията. Тази задача е много трудна за повечето съвременни търговски процесори, базирани на концепцията CISC. Факт е, че дължината на инструкциите и броят на операндите не са фиксирани и това значително усложнява живота на разработчиците на процесори и прави процеса на декодиране нетривиална задача.

Често отделните сложни инструкции трябва да бъдат заменени с микрокод - поредица от прости инструкции, които заедно изпълняват същото действие като една сложна инструкция. Наборът от микрокодове се прехвърля в ROM, вграден в процесора. В допълнение, микрокодът опростява разработването на процесора, тъй като няма нужда да се създават сложни блокове на ядрото за изпълнение на отделни команди, а фиксирането на микрокода е много по-лесно от премахването на грешка във функционирането на блока.

В съвременните процесори обикновено има 2-4 блока за декодиране на инструкции, например в процесорите Intel Core 2 всяко ядро ​​съдържа два такива блока.

Блокове за извличане на данниизвличане на данни от кеш паметта или RAM, необходими за изпълнение на текущите инструкции. Обикновено всяко процесорно ядро ​​съдържа няколко блока за извличане на данни. Например процесорите Intel Core използват два блока за извличане за всяко ядро.

Контролен блокна базата на декодирани инструкции контролира работата на блоковете за изпълнение на инструкции, разпределя натоварването между тях и осигурява навременното и правилно изпълнение на инструкциите. Това е един от най-важните блокове на процесорното ядро.

Блокове за изпълнение на инструкциивключва няколко блока от различни видове:

ALU - аритметично-логическа единица;

FPU - устройство за извършване на операции с плаваща запетая;

Блокове за обработка на разширяване на набори от инструкции. Използват се допълнителни инструкции за ускоряване на обработката на потоци от данни, криптиране и декриптиране, видеокодиране и т.н. За това в ядрото на процесора се въвеждат допълнителни регистри и набори от логика. В момента най-популярните разширения към набори от инструкции са:

MMX (Multimedia Extensions) – набор от инструкции, разработени от Intel за ускоряване на кодирането и декодирането на поточно аудио и видео данни;

SSE (Streaming SIMD Extensions) е набор от инструкции, разработени от Intel за извършване на същата последователност от операции върху набор от данни с паралелен изчислителен процес. Наборите от команди непрекъснато се подобряват, като в момента има ревизии: SSE, SSE2, SSE3, SSSE3, SSE4;

ATA (Application Targeted Accelerator) е набор от инструкции, разработени от Intel за ускоряване на работата на специализиран софтуер и намаляване на консумацията на енергия при работа с такива програми. Тези инструкции могат да се използват например при изчисляване на контролни суми или търсене на данни;

3DNow е набор от инструкции, разработен от AMD за разширяване на възможностите на набора от инструкции MMX;

AES (Advanced Encryption Standard) е набор от инструкции, разработени от Intel за ускоряване на работата на приложения, използващи криптиране на данни, използвайки същия алгоритъм.

Единица за съхранение на резултатитеосигурява запис на резултата от изпълнението на инструкцията в RAM на адреса, посочен в обработената инструкция.

Блок за прекъсване.Работата с прекъсвания е една от най-важните задачи на процесора, която му позволява да реагира на събития своевременно, да прекъсва потока на програмата и да извършва необходимите от него действия. Поради наличието на прекъсвания, процесорът е способен на псевдопаралелна работа, т.е. към така наречения многозадачност.

Обработката на прекъсване е както следва. Процесорът проверява за заявка за прекъсване преди стартиране на всеки цикъл. Ако има прекъсване за обработка, процесорът съхранява в стека адреса на инструкцията, която е трябвало да изпълни, и данните, получени след изпълнението на последната инструкция, и продължава да изпълнява функцията за обработка на прекъсване.

След края на изпълнението на услугата за прекъсване, записаните в нея данни се четат от стека и процесорът подновява изпълнението на възстановената задача.

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

Регистрите с общо предназначение се използват при извършване на аритметични и логически операции или специфични операции на допълнителни набори от инструкции (MMX, SSE и др.).

Регистрите със специално предназначение съдържат системни данни, необходими за работа на процесора. Такива регистри включват например контролни регистри, системни адресни регистри, регистри за отстраняване на грешки и др. Достъпът до тези регистри е строго регулиран.

Брояч на команди- регистър, съдържащ адреса на командата, която процесорът ще започне да изпълнява при следващия цикъл на работа.

Въведение.

Модерният процесор е сложно и високотехнологично устройство, което включва всички най-нови постижения в изчислителните технологии и свързаните с тях области на науката.

Повечето съвременни процесори се състоят от:

  • едно или повече ядра, които изпълняват всички инструкции;
  • няколко нива на кеш паметта (обикновено 2 или три нива), ускоряващи взаимодействието на процесора с RAM;
  • RAM контролер;
  • контролер на системна шина (DMI, QPI, HT и др.);

И се характеризира със следните параметри:

  • вид микроархитектура;
  • тактова честота;
  • набор от изпълними команди;
  • броя на кеш нивата и техния размер;
  • вида и скоростта на системната шина;
  • размера на обработените думи;
  • наличието или отсъствието на вграден контролер на паметта;
  • типът на поддържаната RAM памет;
  • количеството адресируема памет;
  • наличието или отсъствието на вградено графично ядро;
  • консумация на енергия.

Опростена блокова схема на модерен многоядрен процесор е показана на фигура 1.

Нека започнем нашия преглед на процесорното устройство с основната му част - ядрото.

Ядрото на процесора е основната му част, която съдържа всички функционални блокове и изпълнява всички логически и аритметични операции.

Фигура 1 показва блокова схема на ядрото на процесора. Както можете да видите на фигурата, всяко ядро ​​на процесора се състои от няколко функционални блока:

  • извличане на блок с инструкции;
  • блокове за декодиране на инструкции;
  • блокове за вземане на проби от данни;
  • контролен блок;
  • блокове за изпълнение на инструкции;
  • блокове за запазване на резултати;
  • блок на работа с прекъсвания;
  • ROM, съдържащ микрокод;
  • набор от регистри;
  • командния брояч.

Блок за извличане на инструкциичете инструкции на адреса, посочен в брояча на командите. Обикновено чете няколко инструкции на такт. Броят на четливите инструкции се определя от броя на декодиращите блокове, тъй като е необходимо блоковете за декодиране да се зареждат колкото е възможно повече при всеки цикъл на работа. За да може модулът за извличане да работи оптимално, в процесорното ядро ​​има предиктор за разклонение.

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

Декодиращи блокове, както подсказва името, са блокове, които декодират инструкции, т.е. определя какво трябва да направи процесорът и какви допълнителни данни са необходими за изпълнение на инструкцията. Тази задача е много трудна за повечето съвременни търговски процесори, базирани на концепцията CISC. Факт е, че дължината на инструкциите и броят на операндите не са фиксирани и това значително усложнява живота на разработчиците на процесори и прави процеса на декодиране нетривиална задача.



Често отделните сложни инструкции трябва да бъдат заменени с микрокод - поредица от прости инструкции, които заедно изпълняват същото действие като една сложна инструкция. Наборът от микрокодове се прехвърля в ROM, вграден в процесора. В допълнение, микрокодът опростява разработването на процесора, тъй като няма нужда да се създават сложни блокове на ядрото за изпълнение на отделни команди, а фиксирането на микрокода е много по-лесно от премахването на грешка във функционирането на блока.

В съвременните процесори обикновено има 2-4 блока за декодиране на инструкции, например в процесорите Intel Core 2 всяко ядро ​​съдържа два такива блока.

Блокове за извличане на данниизвличане на данни от кеш паметта или RAM, необходими за изпълнение на текущите инструкции. Обикновено всяко процесорно ядро ​​съдържа няколко блока за извличане на данни. Например процесорите Intel Core използват два блока за извличане за всяко ядро.

Контролен блокна базата на декодирани инструкции контролира работата на блоковете за изпълнение на инструкции, разпределя натоварването между тях и осигурява навременното и правилно изпълнение на инструкциите. Това е един от най-важните блокове на процесорното ядро.

Блокове за изпълнение на инструкциивключва няколко блока от различни видове:

ALU - аритметично-логическа единица;

FPU - устройство за извършване на операции с плаваща запетая;

Блокове за обработка на разширяване на набори от инструкции. Използват се допълнителни инструкции за ускоряване на обработката на потоци от данни, криптиране и декриптиране, видеокодиране и т.н. За това в ядрото на процесора се въвеждат допълнителни регистри и набори от логика. В момента най-популярните разширения към набори от инструкции са:

MMX (Multimedia Extensions) – набор от инструкции, разработени от Intel за ускоряване на кодирането и декодирането на поточно аудио и видео данни;

SSE (Streaming SIMD Extensions) е набор от инструкции, разработени от Intel за извършване на същата последователност от операции върху набор от данни с паралелен изчислителен процес. Наборите от команди непрекъснато се подобряват, като в момента има ревизии: SSE, SSE2, SSE3, SSSE3, SSE4;

ATA (Application Targeted Accelerator) е набор от инструкции, разработени от Intel за ускоряване на работата на специализиран софтуер и намаляване на консумацията на енергия при работа с такива програми. Тези инструкции могат да се използват например при изчисляване на контролни суми или търсене на данни;

3DNow е набор от инструкции, разработен от AMD за разширяване на възможностите на набора от инструкции MMX;

AES (Advanced Encryption Standard) е набор от инструкции, разработени от Intel за ускоряване на работата на приложения, използващи криптиране на данни, използвайки същия алгоритъм.

Единица за съхранение на резултатитеосигурява запис на резултата от изпълнението на инструкцията в RAM на адреса, посочен в обработената инструкция.

Блок за прекъсване.Работата с прекъсвания е една от най-важните задачи на процесора, която му позволява да реагира на събития своевременно, да прекъсва потока на програмата и да извършва необходимите от него действия. Поради наличието на прекъсвания, процесорът е способен на псевдопаралелна работа, т.е. към така наречения многозадачност.

Обработката на прекъсване е както следва. Процесорът проверява за заявка за прекъсване преди стартиране на всеки цикъл. Ако има прекъсване за обработка, процесорът съхранява в стека адреса на инструкцията, която е трябвало да изпълни, и данните, получени след изпълнението на последната инструкция, и продължава да изпълнява функцията за обработка на прекъсване.

След края на изпълнението на услугата за прекъсване, записаните в нея данни се четат от стека и процесорът подновява изпълнението на възстановената задача.

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

Регистрите с общо предназначение се използват при извършване на аритметични и логически операции или специфични операции на допълнителни набори от инструкции (MMX, SSE и др.).

Регистрите със специално предназначение съдържат системни данни, необходими за работа на процесора. Такива регистри включват например контролни регистри, системни адресни регистри, регистри за отстраняване на грешки и др. Достъпът до тези регистри е строго регулиран.

Брояч на команди- регистър, съдържащ адреса на командата, която процесорът ще започне да изпълнява при следващия цикъл на работа.

... в процеса на разработка броят на ядрата ще става все повече и повече.

(Разработчици на Intel)

Още ядро, освен това ядро, и дори много, много ядро!..

... Доскоро не чухме и не знаехме за многоядренпроцесори, а днес те агресивно заменят едноядрените. Започна бумът на многоядрените процесори, който все още е леко! - сдържат ги относително високите им цени. Но никой не се съмнява, че бъдещето е с многоядрени процесори! ..

Какво е процесорно ядро

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

Ядрото е свързано с останалата част от чипа (наречена "опаковка", CPU пакет) чрез флип-чип технология ( флип-чип, залепване с флип-чип- обърната сърцевина, закрепване с обърнат кристал). Тази технология получи името си, защото обърнатата навън – видима – част от ядрото всъщност е нейното „дъно“ – за осигуряване на директен контакт с радиатора на охладителя за по-добро разсейване на топлината. На задната (невидима) страна има самия "интерфейс" - връзката между кристала и опаковката. Свързването на ядрото на процесора към опаковката се извършва с помощта на удари ( Неравности при запояване).

Сърцевината е разположена върху текстолитна основа, по която контактните пътеки преминават към "краката" (контактни подложки), запълнена е с термичен интерфейс и затворена със защитен метален капак.

Първият (естествено, едноядрен!) Микропроцесор Intel 4004е представен на 15 ноември 1971 г. от Intel Corporation. Той съдържаше 2300 транзистора, работеше на 108 kHz и струваше 300 долара.

Изискванията за изчислителна мощност на централния микропроцесор нарастват постоянно и продължават да нарастват. Но ако по-ранните производители на процесори трябваше постоянно да се адаптират към настоящите спешни (непрекъснато нарастващи!) потребителски заявки, сега производителите на чипове са по-напред от играта!

Дълго време повишаването на производителността на традиционните едноядрени процесори се дължи главно на последователно увеличаване на тактовата честота (около 80% от производителността на процесора се определя от тактовата честота) с едновременно увеличаване на броя на транзистори на един кристал. Въпреки това, по-нататъшно увеличаване на тактовата честота (при тактова честота над 3,8 GHz, чиповете просто прегряват!) се сблъсква с редица основни физически бариери (тъй като технологичният процес е почти близо до размера на атом: днес процесорите се произвеждат по 45-nm технология, а размерът на силициевия атом е приблизително 0,543 nm):

Първо, когато размерът на кристала намалява и тактовата честота се увеличава, токът на утечка на транзисторите се увеличава. Това води до увеличаване на консумацията на енергия и увеличаване на топлинните емисии;

Второ, ползите от по-високите тактови честоти са частично компенсирани от латентността на паметта, тъй като времената за достъп до паметта не съвпадат с нарастващите тактови честоти;

Трето, за някои приложения традиционните последователни архитектури стават неефективни с увеличаване на тактовата честота поради така нареченото "тесно място на фон Нойман" - ограничение на производителността, произтичащо от последователен поток от изчисления. В същото време забавянето на предаването на резистивно-капацитивния сигнал се увеличава, което е допълнително тесно място, свързано с увеличаване на тактовата честота.

Използването на многопроцесорни системи също не е широко разпространено, тъй като изисква сложни и скъпи многопроцесорни дънни платки. Поради това беше решено да се търси по-нататъшно повишаване на производителността на микропроцесорите с други средства. Най-ефективната посока беше призната като концепцията многонишковост, който възниква в света на суперкомпютрите, е едновременната паралелна обработка на няколко потока от инструкции.

Така че в недрата на компанията Intelе роден Hyper-Threading технология (HTT) е технология за обработка на данни със свръхнишки, която позволява на процесора да изпълнява до четири програмни нишки паралелно в едноядрен процесор. Hyper-threadingзначително повишава ефективността на изпълнение на ресурсоемки приложения (например свързани с аудио и видео редактиране, 3D-моделиране), както и работата на ОС в режим на многозадачност.

процесор Pentium 4с включени Hyper-threadingима един физическиядро, което е разделено на две логично, така че операционната система го идентифицира като два различни процесора (вместо един).

Hyper-threadingвсъщност се превърна в трамплин към създаването на процесори с две физически ядра на един кристал. В 2-ядрен чип две ядра (два процесора!) работят паралелно, които при по-ниска тактова честота осигуряват b ОПо-добра производителност, тъй като два независими потока от инструкции се изпълняват паралелно (едновременно!).

Извиква се способността на процесора да изпълнява няколко програмни нишки едновременно паралелизъм на ниво нишка (TLPпаралелизъм на ниво нишка). Нуждата за TLPзависи от конкретната ситуация (в някои случаи е просто безполезно!).

Основните проблеми при създаването на процесори

Всяко процесорно ядро ​​трябва да бъде независимо – с независима консумация на енергия и контролирана мощност;

Пазарът на софтуер трябва да бъде снабден с програми, които могат ефективно да разделят алгоритъма за разклоняване на инструкциите на четен (за процесори с четен брой ядра) или нечетен (за процесори с нечетен брой ядра) брой нишки;

Според пресслужбата AMD, днес пазарът на 4-ядрени процесори е не повече от 2% от общия. Очевидно за съвременния купувач покупката на 4-ядрен процесор за домашни нужди досега няма смисъл по много причини. Първо, днес практически няма програми, които могат ефективно да използват предимствата на 4 едновременно работещи нишки; второ, производители позиционирайте 4-ядрените процесори като Hi-End-решения чрез добавяне към щракването най-модерните видеокарти и големи твърди дискове - и това в крайна сметка допълнително увеличава цената на вече скъпите

Разработчици Intelте казват: "... в процеса на развитие броят на ядрата ще става все повече и повече ...".

Какво ни очаква в бъдеще

В корпорация Intelте вече не говорят за "Многоядрен" ( Многоядрен) процесори, както е направено по отношение на 2-, 4-, 8-, 16- или дори 32-ядрени решения, и относно „Multicore“ ( Многоядрени), което предполага напълно нова архитектурна макроструктура на чипа, сравнима (но не подобна) на архитектурата на процесора клетка.

Структурата на такива Многоядрени-chip предполага работа със същия набор от инструкции, но с помощта на мощно централно ядро ​​или няколко мощни ПроцесорЗаобиколен от много помощни ядра, за да ви помогне да се справяте със сложни мултимедийни приложения по-ефективно в многонишков режим. В допълнение към ядрата с "общо предназначение", процесори Intelще има и специализирани ядра за изпълнение на различни класове задачи – като графики, алгоритми за разпознаване на реч, обработка на комуникационни протоколи.

Това е точно архитектурата, която Джъстин Ратнър ​​( Джъстин Р. Ратнър), управител на сектор Корпоративна технологична група Intel, на пресконференция в Токио. Според него може да има няколко десетки такива спомагателни ядра в нов многоядрен процесор. За разлика от фокусирането върху големи, енергоемки изчислителни ядра с високо разсейване на топлината, многоядрени кристали Intelще активира само онези ядра, които са необходими за текущата задача, докато останалите ядра ще бъдат деактивирани. Това ще позволи на кристала да консумира точно толкова електричество, колкото му е необходимо в даден момент.

През юли 2008 г. корпорацията Intelобяви, че обмисля възможността за интегриране на няколко десетки или дори хиляди изчислителни ядра в един процесор. Водещ инженер на компанията Енвар Галум ( Ануар Гулум) написа в блога си: „В крайна сметка препоръчвам да използвате следващия ми съвет... разработчиците трябва да започнат да мислят за десетки, стотици и хиляди ядра сега.“ По думите му към момента Intelпроучва технологии, които биха могли да мащабират изчисленията „по броя на ядрата, които все още не продаваме“.

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