Как вы рассчитываете скорость процессора на многоядерных процессорах?
Появление экономичных многоядерных процессоров потребительского класса поднимает вопрос для многих пользователей: как эффективно рассчитать реальную скорость многоядерной системы? Является ли 4-ядерная система 3Ghz действительно 12 ГГц? Читайте дальше, как мы расследуем.
Сегодняшняя сессия Вопросов и Ответов приходит к нам благодаря SuperUser - подразделению Stack Exchange, групповой группе веб-сайтов вопросов и ответов..
Вопрос
Читателю SuperUser NReilingh было любопытно, как на самом деле рассчитывается скорость процессора для многоядерной системы:
Можно ли, например, сказать, что процессор с четырьмя ядрами, работающими на частоте 3 ГГц, на самом деле является процессором, работающим на частоте 12 ГГц??
Однажды я вступил в спор «Mac против ПК» (который, кстати, НЕ является темой этой темы… который был в средней школе) со знакомым, который настаивал на том, что Mac рекламировались только как машины с частотой 1 ГГц, потому что они были двойными. -процессор G4 каждый работает на частоте 500 МГц.
В то время я знал, что это фигня по причинам, которые, как мне кажется, очевидны для большинства людей, но я только что увидел на этом сайте комментарий о «6 ядрах x 0,2 ГГц = 1,2 ГГц», и это заставило меня снова задуматься о том, есть реальный ответ на это.
Итак, это более или менее философский / глубокий технический вопрос о семантике вычисления тактовой частоты. Я вижу две возможности:
- Каждое ядро фактически выполняет x вычислений в секунду, таким образом, общее количество вычислений составляет x (ядер).
- Тактовая частота - это скорее число циклов, которые процессор проходит за секунду, поэтому, пока все ядра работают с одинаковой скоростью, скорость каждого тактового цикла остается одинаковой независимо от того, сколько ядер существует , Другими словами, Гц = (core1Hz + core2Hz +…) / cores.
Итак, как правильно обозначить общую тактовую частоту и, что более важно, возможно ли даже использовать одноядерную номенклатуру скорости в многоядерной системе??
Ответ
Участники SuperUser Mokubai помогают прояснить ситуацию. Он пишет:
Основная причина, по которой четырехъядерный процессор с частотой 3 ГГц никогда не бывает столь же быстрым, как у одноядерного процессора с частотой 12 ГГц, заключается в том, как работает задача, выполняемая на этом процессоре, то есть однопоточная или многопоточная. Закон Амдала важен при рассмотрении типов задач, которые вы выполняете.
Если у вас есть задача, которая по своей природе линейна и должна выполняться точно пошагово, например (чрезвычайно простая программа)
10: а = а + 1
20: переход к 10
Тогда задача сильно зависит от результата предыдущего прохода и не может запустить несколько своих копий, не повредив значение
«А»
поскольку каждая копия будет получать значение«А»
в разное время и писать обратно по-разному. Это ограничивает задачу одним потоком, и, таким образом, задача может быть запущена только на одном ядре в любой момент времени; если она будет выполняться на нескольких ядрах, произойдет повреждение синхронизации. Это ограничивает его до 1/2 процессорной мощности двухъядерной системы или до 1/4 в четырехъядерной системе.Теперь возьмите задачу, такую как:
10: а = а + 1
20: b = b + 1
30: с = с + 1
40: d = d + 1
50: перейти к 10
Все эти линии независимы и могут быть разделены на 4 отдельные программы, такие как первая и запущенные одновременно, каждая из которых может эффективно использовать всю мощь одного из ядер без каких-либо проблем с синхронизацией, вот где закон Амдала входит в это.
Таким образом, если у вас есть однопоточное приложение, выполняющее вычисления методом грубой силы, один процессор с частотой 12 ГГц выиграет руки, если вы можете каким-то образом разделить задачу на отдельные части и многопоточную, тогда 4 ядра могут быть близки, но не совсем достижимы, та же производительность, что и по закону Амдала.
Главное, что дает многопроцессорная система - это отзывчивость. На одноядерной машине, которая усердно работает, система может показаться вялой, поскольку большую часть времени может использоваться одной задачей, а другие задачи выполняются только короткими пакетами между большими задачами, в результате чего система кажется вялой или дрожащей. , В многоядерной системе тяжелая задача получает одно ядро, а все остальные задачи играют на других ядрах, выполняя свою работу быстро и эффективно.
Аргумент «6 ядер x 0,2 ГГц = 1,2 ГГц» является мусором в любой ситуации, кроме случаев, когда задачи совершенно параллельны и независимы. Существует множество параллельных задач, но они все еще требуют определенной синхронизации. Ручной тормоз - это видео транкодер, который очень хорошо использует все доступные процессоры, но для этого требуется основной процесс, чтобы другие потоки были заполнены данными и собирали данные, с которыми они работают.
- Каждое ядро фактически выполняет x вычислений в секунду, таким образом, общее количество вычислений составляет x (ядер).
Каждое ядро способно выполнять x вычислений в секунду, при условии, что рабочая нагрузка подходит параллельно, в линейной программе все, что у вас есть, - это 1 ядро..
- Тактовая частота - это скорее число циклов, которые процессор проходит за секунду, поэтому, пока все ядра работают с одинаковой скоростью, скорость каждого тактового цикла остается одинаковой независимо от того, сколько ядер существует , Другими словами, Гц = (core1Hz + core2Hz +…) / cores.
Я думаю, что ошибочно думать, что 4 x 3GHz = 12 ГГц, если математика работает, но вы сравниваете яблоки с апельсинами, а суммы просто не верны, ГГц нельзя просто сложить вместе для каждой ситуации. Я бы изменил его на 4 x 3GHz = 4 x 3GHz.
Есть что добавить к объяснению? Звук выключен в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.