Як розрахувати швидкість процесора на багатоядерних процесорах?
Поява економічних багатоядерних процесорів споживчого класу ставить питання для багатьох користувачів: як ефективно обчислити реальну швидкість багатоядерної системи? Чи є 4-ядерна система 3Ghz дійсно 12Ghz? Читайте далі, як ми досліджуємо.
Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно від SuperUser - підрозділу Stack Exchange, групування спільноти веб-сайтів з запитань та відповідей.
Питання
Читач SuperUser NReilingh цікавився, як обчислюється швидкість процесора для багатоядерної системи:
Чи правильно сказати, наприклад, що процесор з чотирма ядрами, кожен з яких працює на частоті 3GHz, є процесором, що працює на частоті 12 ГГц?
Я колись потрапив до аргументу "Mac vs. PC" (який, до речі, не є фокусом цієї теми ... що повернувся в середню школу) з знайомим, який наполягав на тому, що Macs рекламувалися тільки як машини 1 ГГц, тому що вони були подвійними процесори G4s, кожен з яких працює на частоті 500 МГц.
У той час я знав, що це буде глибока помилка з причин, які, на мою думку, очевидні для більшості людей, але я просто побачила коментар на цьому сайті про ефект «6 ядер x 0.2GHz = 1.2Ghz», і це змусило мене знову подумати про те, є реальна відповідь на це.
Отже, це більш-менш філософське / глибоке технічне питання про семантику обчислення тактової частоти. Я бачу дві можливості:
- Кожне ядро фактично виконує x розрахунки в секунду, таким чином, загальна кількість розрахунків x (ядра).
- Швидкість тактового сигналу - це скоріше кількість циклів, через які процесор проходить через простір секунди, так що доки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається незмінною незалежно від того, скільки ядер існує. . Іншими словами, Hz = (core1Hz + core2Hz +…) / ядра.
Отже, що є правильним способом позначити загальну тактову частоту і, що ще важливіше, чи можна навіть використовувати одноядерну номенклатуру швидкості на багатоядерній системі?
Відповідь
Співробітники SuperUser Mokubai допомагають очистити речі. Він пише:
Основна причина, чому чотирьохядерний процесор 3GHz ніколи не настільки швидкий, як одиночне ядро 12 ГГц, пов'язаний з тим, як виконується завдання на цьому процесорі, тобто однопоточні або багатопоточні. Закон Amdahl важливий при розгляді типів завдань, які ви виконуєте.
Якщо у вас є завдання, яке за своєю суттю є лінійним і має бути зроблено точно, крок за кроком, наприклад (дуже проста програма)
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 ядер x 0.2GHz = 1.2Ghz” є сміттям у кожній ситуації, крім випадків, коли завдання абсолютно паралельні та незалежні. Існує велика кількість завдань, які дуже паралельні, але вони все ще вимагають певної форми синхронізації. Handbrake - це транскодер відео, який дуже добре використовує всі доступні процесори, але вимагає основного процесу, щоб зберегти інші потоки, заповнені даними, і зібрати дані, які вони виконують..
- Кожне ядро фактично виконує x розрахунки в секунду, таким чином, загальна кількість розрахунків x (ядра).
Кожне ядро здатне виконувати обчислення х в секунду, припускаючи, що робоче навантаження підходить паралельно, на лінійній програмі все, що у вас є, є одним ядром.
- Швидкість тактового сигналу - це скоріше кількість циклів, через які процесор проходить через простір секунди, так що доки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається незмінною незалежно від того, скільки ядер існує. . Іншими словами, Hz = (core1Hz + core2Hz +…) / ядра.
Я думаю, що це помилка, щоб думати, що 4 х 3 ГГц = 12 ГГц, якщо математика працює, але ви порівнюєте яблука з апельсинами і суми просто не правильно, ГГц не може просто бути додані для кожної ситуації. Я б змінив його на 4 х 3 ГГц = 4 х 3 ГГц.
Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.