Як обчислити тактову частоту в багатоядерних процесорах?


23

Чи правильно сказати, наприклад, що процесор з чотирма ядрами, що працюють на частоті 3 ГГц, насправді є процесором, що працює на частоті 12 ГГц?

Я одного разу потрапив у аргумент "Mac vs. PC" (який, до речі, НЕ в центрі уваги цієї теми ... що був ще в середній школі) зі знайомим, який наполягав на тому, що Маки рекламуються лише як машини на 1 ГГц, оскільки вони були двопроцесорні G4, кожен працює на частоті 500 МГц.

У той час, коли я знав, що це багряниця з причин, на мою думку, це здається більшості людей, але я просто побачив коментар на цьому веб-сайті про ефект "6 ядер х 0,2 ГГц = 1,2 ГГц", і це змусило мене знову задуматися про те на це є реальна відповідь.

Отже, це більш-менш філософсько-глибокий технічний питання щодо семантики обчислення тактової частоти. Я бачу дві можливості:

  1. Кожне ядро ​​насправді робить x обчислення в секунду, таким чином загальна кількість обчислень становить x (ядра).
  2. Тактова швидкість - це швидше підрахунок кількості циклів, які процесор проходить за проміжок секунди, так що, поки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається однаковою незалежно від того, скільки ядер існує . Іншими словами, Hz = (core1Hz + core2Hz + ...) / ядра.

Багато відповідей тут непогано пояснюють, чому, наприклад, чотириядерний процесор 2 ГГц не обов'язково дорівнює одноядерному 8 ГГц процесору. Однак мені важко визначити, як слід враховувати багатоядерні швидкості процесора при вирішенні придатності системи для додатка, який перераховує конкретну швидкість і кількість ядер у своїх вимогах? (наприклад: Borderlands 2 вимагає двоядерного процесора потужністю 2,4 ГГц. Чи слід очікувати, що чотириядерний або швидкісний одноядерний з більш швидкою швидкістю спрацьовує так само?) На це (чи можна було б) відповісти тут, чи це має бути окреме питання?
Іссі

@Iszi Це має бути іншим питанням, але ймовірно, що Borderlands оптимізовано для більш ніж однієї нитки, якщо вони включають "подвійне ядро" у свої вимоги. У такому випадку одноядерний процесор не рекомендується, але незрозуміло, чи може він скористатися> 2 ядрами.
NReilingh

Важливо пам’ятати, що тактова частота та кількість ядер визначають не лише «швидкість» процесора. Наприклад, розміри та швидкість кешу впливатимуть на час процесор витрачає на очікування інструкцій та даних. Крім того, вказівки на цикл (певним чином, «ККД», хоча і відрізняється від енергоефективності та пов'язана з нею) також впливатимуть на швидкість обчислень. У різних процесорів знадобиться різний час для виконання однієї і тієї ж інструкції.
Боб

Відповіді:


35

Основна причина, чому чотириядерний процесор 3 ГГц ніколи не настільки швидкий, як одноядерний 12 ГГц, - це те, як працює завдання, що працює на цьому процесорі, тобто однопотоковий або багатопотоковий. Закон Амдала важливий при розгляді типів завдань, які ви виконуєте.

Якщо у вас є завдання, яке за своєю суттю є лінійним і його потрібно виконувати точно поетапно, наприклад, (грубо проста програма)

10: a = a + 1
20: goto 10

Тоді завдання сильно залежить від результату попереднього пропуску і не може запустити кілька копій самої себе, не зіпсувавши значення, 'a'оскільки кожна копія отримувала б значення 'a'у різний час і записувала його назад по-різному. Це обмежує завдання однією ниткою, і, таким чином, завдання може бути запущено лише на одному ядрі в будь-який момент часу, якщо воно запускається на декількох ядрах, тоді відбудеться пошкодження синхронізації. Це обмежує його на 1/2 потужності процесора двоядерної системи або на 1/4 в чотирьохядерній системі.

Тепер візьміть таке завдання, як:

10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10

Усі ці рядки є незалежними і можуть бути розділені на 4 окремі програми, як перша і запускаються одночасно, кожна з яких зможе ефективно використовувати повну потужність одного з ядер без будь-якої проблеми синхронізації. Ось тут закон Амдаля вступає в це.

Отже, якщо у вас є однопотокове додаток, яке виконує обчислення грубої сили, один процесор 12 ГГц виграє руки, якщо ви зможете якось зробити завдання розділити на окремі частини та багатопотокові, то 4 ядра могли б наблизитися, але не зовсім охопити, таку саму дію, як згідно із Законом Амдала.

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

Аргумент "6 ядер х 0,2 ГГц = 1,2 ГГц" є сміттям у будь-якій ситуації, за винятком випадків, коли завдання ідеально паралельні та незалежні. Існує велика кількість завдань, які є дуже паралельними, але вони все ще потребують певної форми синхронізації. Handbrake - це транскодер відео, який дуже добре використовує всі наявні процесори, але для цього потрібен основний процес, щоб інші потоки були заповнені даними та збирали дані, якими вони займаються.

  1. Кожне ядро ​​насправді робить x обчислення в секунду, таким чином загальна кількість обчислень становить x (ядра).

Кожне ядро ​​здатне робити х обчислень за секунду, якщо припустити, що навантаження підходить паралельно, у лінійній програмі все, що у вас є, - 1 ядро.

  1. Тактова швидкість - це швидше підрахунок кількості циклів, які процесор проходить за проміжок секунди, так що, поки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається однаковою незалежно від того, скільки ядер існує . Іншими словами, Hz = (core1Hz + core2Hz + ...) / ядра.

Я думаю, що помилково вважати, що 4 х 3 ГГц = 12 ГГц, що дає математику, працює, але ви порівнюєте яблука з апельсинами, а суми просто не вірні, ГГц не можна просто скласти разом для кожної ситуації. Я змінив би його на 4 x 3GHz = 4 x 3GHz.


Хороший пост .. Не міг проголосувати більше 1+ :-(
Gopalakrishnan Subramani

Але закон amdahl є проблемою програмування, спричиненою блокуванням, а не технічним забезпеченням. Якщо вам не потрібно синхронізувати, кожне ядро ​​може виконувати інструкції так само швидко, як це можливо. Можна було б розробити паралельну програму (просту), яка була б ідеально розділена між ядрами. Хіба б виробники обладнання не рекламували цю сировину?
Джастін Майнерс

Для уточнення я розумію, чому це відповідає на питання, чому 4 ядра при 3 ГГц не такі швидкі на практиці, як 12 ГГц, але це не частина того, як обчислюється тактова частота для багатоядерних.
Джастін Майнерс

@JustinMeiners тактова частота на одне ядро ​​- це просто тактова частота, на якій працює ядро. Немає жодного магічного розрахунку, який би прирівнював одне ядро ​​до багатоядерного. Кілька ядер просто означає, що ви можете одночасно виконувати більше окремих завдань. Закон Амдалса застосовується через програмне забезпечення, необхідні синхронізація та блокування запобігають тому, щоб завдання було «ідеальним» в апаратному забезпеченні так само, як і програмне забезпечення. Спільні кеші та пам'ять викликає суперечки та блокування.
Мокубай

@Mokubai Просто для уточнення, коли виробник перераховує тактову частоту, кожне окреме ядро ​​працює зі швидкістю, правда?
Джастін Майнерс

6

Інші зробили хороший аргумент з технічної точки зору. Натомість я зроблю кілька простих аналогій, які, сподіваюся, пояснять, чому 4 * 3GHz не еквівалентно 1 * 12GHz.

Наприклад, одна жінка може виготовити одну дитину за дев'ять місяців. Чи зможуть дев'ять жінок за один місяць народити одну дитину? Ні, оскільки вагітність не може бути паралельною (ну, принаймні, на цьому технологічному рівні).

Ось ще одне: На гідроелектростанції, яку я нещодавно відвідав, один з генераторів модернізувався. Вони повинні були транспортувати статор генератора судном. Шосту частину статора можна було перевезти вантажівкою, але їм потрібно було перевезти цілий статор; тож їм довелося використовувати одне судно, а не шість вантажівок.

Іншим випадком може бути точний термін подій. Іноді комп'ютерні процесори використовуються як точні таймери (хоча практика більше не рекомендується через змінні тактові частоти на більшості процесорів. Замість цього слід використовувати таймер високої точності). Якщо припустити, що у нас є процесор з відносно стабільною тактовою частотою 12 ГГц, ми можемо використовувати його для вимірювання часу в набагато більшій роздільній здатності, ніж для процесора з тактовою частотою 3 ГГц. Скільки б ядер 3 ГГц у нас не було, ми не зможемо досягти роздільної здатності ядра 12 ГГц. Це начебто 4 годин із 7-сегментними дисплеями, де кожен годинник відображає правильний час у годинах. Незалежно від того, наскільки правильно вони показують години, ви не можете використовувати їх для вимірювання часових інтервалів в одному секундному діапазоні.


Корисна відповідь для менш технічно налаштованих. Також мені подобаються аналогії :)
афіф

3

Я не фахівець з цього питання, але маю спеціальність "Комп'ютерна інженерія". В теорії (це дуже концептуальний відповідь), чотирьохядерний 3 ГГц кожен процесор може бути еквівалентом одного процесора 12GHz , якщо, наприклад, існує чотири набори обчислень , необхідних для одного кінцевого результату. Саме так називається паралельна обробка.

Для спрощення логіки скажімо, що ми говоримо про двоядерний процесор. Якщо набір обчислень був, скажіть:

a = b + 1;

c = d + 1;

тоді ці два обчислення можуть бути виконані на окремих ядрах, і процесор xGHz був би еквівалентний одноядерному 2 * xGHz процесору. Це тому, що два обчислення, хоч і зроблені зі швидкістю x, будуть оброблятися одночасно. Тоді як одноядерний процесор може робити їх зі швидкістю 2 * x, але одна за одною. Якби два ЦП виконували цей код одночасно, вони закінчувались одночасно. Однак якщо код був:

a = b + 1;

c = a + 1;

тоді двоядерний процесор займе вдвічі більше, ніж одноядерний процесор, оскільки у другій інструкції значення a залежить від першої інструкції і тому не може бути виконано паралельно. Ось так деякі програми можуть скористатися багатопотоковими процесорами.

Тож теоретично одноядерний процесор 12 ГГц завжди може працювати так само швидко (або швидше), ніж чотириядерний процесор 3 ГГц, але не навпаки.


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

Ця відповідь вводить в оману з двох причин. По-перше, сучасні сердечники роблять по одній справі одночасно. По-друге, відповідь передбачає, що швидкість основної роботи така ж, як і швидкість, з якою виконується робота. Одноядерний процесор 12 ГГц не буде працювати так швидко, як чотирьохядерний процесор 3 ГГц, якщо одноядерний процесор потребує значно більше тактових циклів, щоб виконати ту саму роботу. (Що би могло, оскільки процесору 12 ГГц потрібні були б набагато довші трубопроводи.)
Девід Шварц

2

На це складне питання відповісти, але коротка відповідь: Ні

У реальних додатках чотири 3 ГГц процесори не будуть настільки швидкими, як один процесор 12 ГГц через неефективність. Вони можуть бути дуже близькими, але вони НЕ зрівняються з одним процесором за потужністю обробки.

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

Погляньте на цю статтю: http://en.wikipedia.org/wiki/Amdahl%27s_law


Ви маєте рацію і неправильно. Чотири 3Гц-процесори, швидше за все, будуть Швидші, ніж один процесор 12ГГц у додатках "реального світу". В наші дні все більше програм використовують багатопотокове передавання, посилання, яке ви подали, посилається на теоретичну програму з однорядним потоком. Один процесор на 12 ГГц має лише один потік, тому багатопотокові переваги, які може запропонувати програма "реального світу", будуть втрачені. Промисловість не йде до більш повільних ядер замість меншої кількості швидших ядер тільки тому, що переваги багатоядерних технологій набагато перевищують переваги швидкої одноядерної технології.
ubiquibacon

3
@typoknig: Це не зовсім так. Одноядерний процесор 6 ГГц запускав би багатопотокове додаток приблизно з тією ж швидкістю, як і двоядерний процесор 3 ГГц, припускаючи, що додаток в повній мірі використовує всі потоки (що, швидше за все, не робить, якщо це "справжній" світовий додаток ", але це окремий аргумент). Ми не бачимо процесорів 12 ГГц, тому що це занадто складно з сучасними технологіями, а не тому, що це повільніше.
Саша Чедигов

4
@typoknig: Я запрограмував декілька програм, що читаються без змін, і повірте, якби у мене був один процесор 12 ГГц, я використовую його замість. Однопотокове програмування в 10 разів простіше і набагато ефективніше, ніж багатопотокове програмування. Справжня причина, по якій галузь рухає межі процесорів muticore, полягає не в тому, що вони швидші, а тому, що ми не можемо швидше запускати окремі процесори! Це було виокремлено за допомогою технології Intel-netburst ще за p4 дні. Вони підрахували, щонайменше, 10 ГГц процесори, тобто до тих пір, поки квантова фізика не вдарила їх по обличчю і не сказала "ні noob!"
Факен

2
@typokning: F22 використовує масив процесорів powerPC для досягнення 10 мільярдів інструкцій в секунду, що дуже відрізняється від 10 ГГц! Це як би сказати, що ваш Radion HD5970 працює на 4600 ГГц. Він здатний використовувати 4.6 TFLOPS, але тільки тому, що він є паралельним.
Faken

1
@typoknig: Ви чітко не розумієте різниці між частотою процесора та IPS (інструкції в секунду), вони не одна і та ж. Будь ласка, прочитайте: en.wikipedia.org/wiki/Instructions_per_second
Faken

2

Здається, що ми не можемо сказати, що 4 ядра при 3 ГГц можна сказати як 12 ГГц.

Різні обмеження, такі як спільна пам'ять, вміст кешу та інші ресурси, також є загальними для всіх ядер, тому запуск фрагмента коду паралельно на цих ядрах не буде настільки ефективним, як запуск його на 12 ГГц-процесорах (хоча складно створити такий процесор ).

Також я десь читав, що якщо ми подвоїмо транзистори, вбудовані в мікросхему (CMP), швидкість, яку ми збираємося отримати, становить лише 40%. Це дає істотний натяк і на цю тему.


1

Що стосується виконуваних циклів годин, так багатоядерний процесор виконує завершені x * coresцикли роботи в секунду. Зазвичай тактові швидкості перераховані на основі ядра для більш легкого порівняння (інакше як би ви легко порівняли двоядерний чіп 4 ГГц, що працює на частоті 2 ГГц / ядро, і чотириядерний чіп 4 ГГц, що працює на частоті 1 ГГц / ядро?).

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

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

По-друге, і, мабуть, менш відомий у світі, який не перебуває в техніці, полягає в тому, що порівнювати тактову частоту іноді може бути як порівняння яблук та апельсинів. Різні процесори виконують різний обсяг роботи за один тактовий цикл, тому мовляв, у вас 1 ГГц проти 1,2 ГГц звучить чудово, але чіп 1 ГГц насправді може зробити більше роботи за певний проміжок часу. Pentium 4 загнав цю точку додому, ведучи до Міфу про Мегагерц (який я не знав, чи було ім’я, придумане до написання цього повідомлення).


Швидкість тактової частоти не перерахована "за основою". Швидкість ніколи не буває "за". Якщо машина їде 50 миль на годину, швидкість становить 50 миль на годину. Якщо два автомобілі їдуть 50 миль на годину, швидкість все одно 50 миль на годину. Ідея "швидкості на машину" безглузда і непослідовна.
Девід Шварц

1

Два автомобілі, що їздять по 50 миль на годину, не "досягають" 100 миль на годину. Це дійсно так просто. Тактова частота процесора - це не міра швидкості, з якою виконується робота, це міра того, наскільки швидко тактирує годинник.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.