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