Поява економічних багатоядерних процесорів споживчого рівня ставить перед багатьма користувачами питання: як ефективно розрахувати реальну швидкість багатоядерної системи? Чи справді 4-ядерна система 3 ГГц є 12 ГГц? Читайте далі, коли ми розслідуємо.
Сьогоднішня сесія запитань та відповідей надійшла до нас люб’язно від SuperUser - підрозділу Stack Exchange, групи об’єднань веб-сайтів із запитаннями та відповідями.
Питання
Читач SuperUser NReilingh цікавився, як насправді розраховується швидкість процесора для багатоядерної системи:
Чи правильно говорити, наприклад, що процесор з чотирма ядрами, кожен з яких працює на частоті 3 ГГц, насправді є процесором, що працює на частоті 12 ГГц?
Одного разу я вступив у аргумент "Mac проти ПК" (який, до речі, НЕ в центрі уваги цієї теми ... це було ще в середній школі) зі своїм знайомим, який наполягав на тому, що Mac рекламували лише як машини на 1 ГГц, оскільки вони були подвійними -процесор G4 кожен працює на частоті 500 МГц.
У той час я знав, що це "фігня" з причин, які, на мою думку, очевидні для більшості людей, але я щойно побачив коментар на цьому веб-сайті про "6 ядер x 0,2 ГГц = 1,2 ГГц", і це змусило мене знову задуматися про те, на це є реальна відповідь.
Отже, це більш-менш філософське / глибоке технічне питання про семантику розрахунку тактової частоти. Я бачу дві можливості:
- Кожне ядро фактично робить х обчислень в секунду, отже загальна кількість обчислень дорівнює х (ядер).
- Тактова частота - це радше кількість циклів, які процесор проходить за секунду, тому, поки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається незмінною незалежно від того, скільки ядер існує . Іншими словами, Гц = (ядро1Гц + ядро2Гц + ...) / ядра.
Отже, який відповідний спосіб позначити загальну тактову частоту і, що ще важливіше, чи можливо взагалі використовувати одноядерну номенклатуру швидкості в багатоядерній системі?
Відповідь
Співробітники SuperUser Mokubai допомагають прояснити ситуацію. Він пише:
Основною причиною того, чому чотириядерний процесор на 3 ГГц ніколи не є таким швидким, як одноядерний на 12 ГГц, є те, як працює завдання, що працює на цьому процесорі, тобто однопоточне або багатопотокове. Закон Амдала важливо при розгляді типів завдань, які ви виконуєте.
Якщо у вас є завдання, яке за своєю суттю є лінійним і повинно виконуватися саме покроково, наприклад (надзвичайно проста програма)
10: a = a + 120: Кожні 10Тоді завдання сильно залежить від результату попереднього проходу і не може запустити декілька власних копій, не пошкодивши значення
"а"оскільки кожна копія отримувала б значення"а"в різний час і писати його назад по-різному. Це обмежує завдання одним потоком, і, отже, завдання може виконуватися лише на одному ядрі у будь-який момент часу, якщо воно виконується на декількох ядрах, то відбудеться пошкодження синхронізації. Це обмежує до 1/2 потужності процесора двоядерної системи або 1/4 в чотирьохядерній системі.Тепер візьміть таке завдання, як:
10: a = a + 120: b = b + 130: c = c + 140: d = d + 150: Кожні 10Усі ці рядки незалежні і можуть бути розділені на 4 окремі програми, як перша, і запускатись одночасно, кожна з яких може ефективно використовувати повну потужність одного з ядер без будь-яких проблем із синхронізацією, саме тут Закон Амдала в нього входить.
Отже, якщо у вас є одна різьбова програма, яка виконує обчислення грубої сили, єдиний процесор на 12 ГГц виграє руки, якщо ви можете якимось чином зробити завдання розділеним на окремі частини та багатопотокові, тоді 4 ядра можуть наблизитися, але не зовсім охопити, те саме виконання, як згідно із законом Амдала.
Головне, що дає вам система з декількома процесорами, це швидкість реагування. На одноядерній машині, яка напружено працює, система може здаватися млявою, оскільки більшу частину часу може використовувати одне завдання, а інші завдання виконуються лише короткими інтервалами між великим завданням, в результаті чого система здається млявою або дряхлою . У багатоядерній системі важке завдання отримує одне ядро, а всі інші завдання виконуються на інших ядрах, виконуючи свою роботу швидко та ефективно.
Аргумент “6 ядер x 0,2 ГГц = 1,2 ГГц” є сміттям у будь-якій ситуації, за винятком випадків, коли завдання абсолютно паралельні та незалежні. Існує велика кількість завдань, які є дуже паралельними, але вони все одно вимагають певної форми синхронізації. Ручне гальмо - це відеотранкодер, який дуже добре використовує всі доступні центральні процесори, але вимагає основного процесу, щоб інші потоки були заповнені даними та збирали дані, з якими вони закінчені.
- Кожне ядро фактично робить х обчислень в секунду, отже загальна кількість обчислень дорівнює х (ядер).
Кожне ядро здатне робити х обчислень за секунду, припускаючи, що робоче навантаження підходить паралельно, у лінійній програмі все, що у вас є, - це 1 ядро.
- Тактова частота - це радше кількість циклів, які процесор проходить за секунду, тому, поки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається незмінною незалежно від того, скільки ядер існує . Іншими словами, Гц = (ядро1Гц + ядро2Гц + ...) / ядра.
Думаю, помилково вважати, що 4 х 3 ГГц = 12 ГГц, отримані математичні дані працюють, але ви порівнюєте яблука з апельсинами, а суми просто неправильні, ГГц не можна просто скласти для кожної ситуації. Я б змінив його на 4 х 3 ГГц = 4 х 3 ГГц.
Є що додати до пояснення? Звук у коментарях. Хочете прочитати більше відповідей від інших досвідчених користувачів Stack Exchange? Ознайомтесь із повним обговоренням тут .