Основна причина, чому чотириядерний процесор 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 - це транскодер відео, який дуже добре використовує всі наявні процесори, але для цього потрібен основний процес, щоб інші потоки були заповнені даними та збирали дані, якими вони займаються.
- Кожне ядро насправді робить x обчислення в секунду, таким чином загальна кількість обчислень становить x (ядра).
Кожне ядро здатне робити х обчислень за секунду, якщо припустити, що навантаження підходить паралельно, у лінійній програмі все, що у вас є, - 1 ядро.
- Тактова швидкість - це швидше підрахунок кількості циклів, які процесор проходить за проміжок секунди, так що, поки всі ядра працюють з однаковою швидкістю, швидкість кожного тактового циклу залишається однаковою незалежно від того, скільки ядер існує . Іншими словами, Hz = (core1Hz + core2Hz + ...) / ядра.
Я думаю, що помилково вважати, що 4 х 3 ГГц = 12 ГГц, що дає математику, працює, але ви порівнюєте яблука з апельсинами, а суми просто не вірні, ГГц не можна просто скласти разом для кожної ситуації. Я змінив би його на 4 x 3GHz = 4 x 3GHz.