Домашня » як » Як розрахувати швидкість процесора на багатоядерних процесорах?

    Як розрахувати швидкість процесора на багатоядерних процесорах?

    Поява економічних багатоядерних процесорів споживчого класу ставить питання для багатьох користувачів: як ефективно обчислити реальну швидкість багатоядерної системи? Чи є 4-ядерна система 3Ghz дійсно 12Ghz? Читайте далі, як ми досліджуємо.

    Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно від SuperUser - підрозділу Stack Exchange, групування спільноти веб-сайтів з запитань та відповідей.

    Питання

    Читач SuperUser NReilingh цікавився, як обчислюється швидкість процесора для багатоядерної системи:

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

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

    У той час я знав, що це буде глибока помилка з причин, які, на мою думку, очевидні для більшості людей, але я просто побачила коментар на цьому сайті про ефект «6 ядер x 0.2GHz = 1.2Ghz», і це змусило мене знову подумати про те, є реальна відповідь на це.

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

    1. Кожне ядро ​​фактично виконує x розрахунки в секунду, таким чином, загальна кількість розрахунків x (ядра).
    2. Швидкість тактового сигналу - це скоріше кількість циклів, через які процесор проходить через простір секунди, так що доки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається незмінною незалежно від того, скільки ядер існує. . Іншими словами, 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 - це транскодер відео, який дуже добре використовує всі доступні процесори, але вимагає основного процесу, щоб зберегти інші потоки, заповнені даними, і зібрати дані, які вони виконують..

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

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

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

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

    Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.