Как се изчислява скоростта на процесора на многоядрени процесори?
Появата на многоядрени многоядрени процесори за потребителски клас повдига въпроса за много потребители: как ефективно да изчислите реалната скорост на многоядрената система? Дали 4-ядрена 3Ghz система наистина е 12Ghz? Прочетете, докато проучваме.
Днешната сесия на въпросите и отговорите идва с любезното съдействие на SuperUser - подразделение на Stack Exchange, обединяващо групи от уебсайтове с въпроси и отговори.
Въпроса
SuperUser четец NReilingh беше любопитен как да се изчисли скоростта на процесора за многоядрена система:
Правилно ли е да се каже например, че процесор с четири ядра, всеки от които работи на 3GHz, всъщност е процесор, работещ на 12GHz?
Веднъж попаднах в аргумента „Mac vs. PC“ (който между другото не е фокусът на тази тема… който се върна в средното училище) с познат, който настояваше, че Mac-овете се рекламират само като 1GHz машини, защото бяха двойни процесор G4s всеки работи на 500MHz.
По това време знаех, че това е глупост по причини, които според мен са очевидни за повечето хора, но току-що видях коментар на този сайт за ефекта на „6 ядра x 0.2GHz = 1.2Ghz“ и това ме накара да мисля отново дали има реален отговор на това.
Така че, това е повече или по-малко философски / дълбоко технически въпрос за семантиката на изчислението на часовника. Виждам две възможности:
- Всяко ядро всъщност прави x изчисления в секунда, като по този начин общият брой на изчисленията е x (ядра).
- Скоростта на часовника е по-скоро броене на броя на циклите, през които процесорът преминава през секунда, така че докато всички ядра работят с една и съща скорост, скоростта на всеки тактов цикъл остава същата, без значение колко съществуват ядра. , С други думи, Hz = (core1Hz + core2Hz +…) / ядра.
И така, какъв е подходящият начин за обозначаване на общата тактова честота и, което е по-важно, дори е възможно да се използва едноядрена скоростна номенклатура на многоядрена система?
Отговорът
Сътрудниците на SuperUser Mokubai помага да се изяснят нещата. Той пише:
Основната причина, поради която един четириядрен 3GHz процесор никога не е толкова бърз като 12GHz едноядрен, е свързан с това как работи задачата, която работи на този процесор, т.е. с еднонишко или многонишково. Законът на Amdahl е важен, когато се разглеждат видовете задачи, които изпълнявате.
Ако имате задача, която по своята същност е линейна и трябва да се извърши точно стъпка по стъпка, като (грубо проста програма)
10: a = a + 1
20: Гото 10
Тогава задачата зависи силно от резултата от предишното преминаване и не може да изпълнява няколко копия от себе си, без да нарушава стойността на
"А"
като всяко копие ще получи стойността на"А"
по различно време и да го пишат различно. Това ограничава задачата до една нишка и по този начин задачата може да се изпълнява само на едно ядро във всеки един момент, ако се изпълнява на няколко ядра, тогава ще се случи корупцията при синхронизирането. Това го ограничава до 1/2 от силата на процесора на двуядрена система или 1/4 в четириядрена система.Сега изпълнете задача като:
10: a = a + 1
20: b = b + 1
30: с = с + 1
40: d = d + 1
50: goto 10
Всички тези линии са независими и могат да се разделят на 4 отделни програми като първата и да се изпълняват по едно и също време, като всеки може ефективно да използва пълната мощност на една от ядрата без никакъв проблем с синхронизацията. влиза в него.
Така че, ако имате едно-единствено резбовано приложение, което прави изчисления с груба сила, единственият 12GHz процесор ще спечели ръцете надолу, ако можете по някакъв начин да направите задачата разделена на отделни части и многонишкови, тогава 4-те ядра могат да се доближат, но не съвсем. същото изпълнение, според Закона на Amdahl.
Основното, което ви дава мултипроцесорна система, е отзивчивостта. На една основна машина, която работи усилено системата може да изглежда бавна, тъй като по-голямата част от времето може да се използва от една задача, а другите задачи се изпълняват само в кратки интервали между по-голямата задача, което води до система, която изглежда бавна или дразнеща , В многоядрената система тежката задача получава едно ядро и всички останали задачи играят на другите ядра, изпълняват задачите си бързо и ефективно.
Аргументът за “6 ядра x 0.2GHz = 1.2Ghz” е боклук във всяка ситуация, освен когато задачите са напълно паралелни и независими. Има голям брой задачи, които са много паралелни, но те все още изискват някаква форма на синхронизация. Ръчната спирачка е видео транскодер, който е много добър в използването на всички налични процесори, но изисква основен процес, за да се запазят другите нишки, пълни с данни, и да се съберат данните, с които са направени..
- Всяко ядро всъщност прави x изчисления в секунда, като по този начин общият брой на изчисленията е x (ядра).
Всяко ядро е в състояние да прави изчисления x в секунда, приемайки, че работното натоварване е подходящо успоредно, на линейна програма всичко, което имате, е 1 ядро.
- Скоростта на часовника е по-скоро броене на броя на циклите, през които процесорът преминава през секунда, така че докато всички ядра работят с една и съща скорост, скоростта на всеки тактов цикъл остава същата, без значение колко съществуват ядра. , С други думи, Hz = (core1Hz + core2Hz +…) / ядра.
Мисля, че е грешка да се мисли, че 4 x 3GHz = 12GHz, предоставени на математиката работи, но вие сравнявате ябълки с портокали и сумите просто не са прави, GHz не може просто да се добавят заедно за всяка ситуация. Бих го променил на 4 x 3GHz = 4 x 3GHz.
Имате ли какво да добавите към обяснението? Звукът е изключен в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.