Как рассчитать тактовую частоту в многоядерных процессорах?
Можно ли, например, сказать, что процессор с четырьмя ядрами, работающими на частоте 3 ГГц, на самом деле является процессором, работающим на частоте 12 ГГц?
Однажды я вступил в спор "Mac против ПК" (который, кстати, НЕ является темой этой темы... который был еще в средней школе) со знакомым, который настаивал на том, что Mac рекламировались только как машины 1 ГГц, потому что они были двухпроцессорные G4, каждый из которых работал на частоте 500 МГц.
В то время я знал, что это фигня по причинам, которые, как мне кажется, очевидны для большинства людей, но я только что увидел на этом сайте комментарий о "6 ядрах x 0,2 ГГц = 1,2 ГГц", и это заставило меня снова задуматься о том, есть реальный ответ на это.
Итак, это более или менее философский / глубокий технический вопрос о семантике вычисления тактовой частоты. I see two possibilities:
- Each core is in fact doing x calculations per second, thus the total number of calculations is x(cores).
- Clock speed is rather a count of the number of cycles the processor goes through in the space of a second, so as long as all cores are running at the same speed, the speed of each clock cycle stays the same no matter how many cores exist. In other words, Hz = (core1Hz+core2Hz+...)/cores.
7 ответов
Основная причина, по которой четырехъядерный процессор с частотой 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 ядер x 0,2 ГГц = 1,2 ГГц" является мусором в любой ситуации, кроме случаев, когда задачи совершенно параллельны и независимы. Существует множество параллельных задач, но они все равно требуют определенной синхронизации. Ручной тормоз - это видео транкодер, который очень хорошо использует все доступные процессоры, но для него требуется основной процесс, чтобы другие потоки были заполнены данными и собирали данные, с которыми они работают.
- Каждое ядро фактически выполняет x вычислений в секунду, таким образом, общее количество вычислений составляет x(ядер).
Каждое ядро способно выполнять x вычислений в секунду, предполагая, что рабочая нагрузка подходит параллельно, в линейной программе все, что у вас есть, - это 1 ядро.
- Тактовая частота - это скорее число циклов, которые процессор проходит за секунду, поэтому, пока все ядра работают с одинаковой скоростью, скорость каждого тактового цикла остается одинаковой независимо от того, сколько ядер существует, In other words, Hz = (core1Hz+core2Hz+...)/cores.
I think it is a fallacy to think that 4 x 3GHz = 12GHz, granted the maths works, but you're comparing apples to oranges and the sums just aren't right, GHz can't simply be added together for every situation. I would change it to 4 x 3GHz = 4 x 3GHz.
Другие сделали хороший аргумент с технической точки зрения. Вместо этого я приведу пару простых аналогий, которые, я надеюсь, объяснят, почему 4*3 ГГц не эквивалентны 1*12 ГГц.
Например, одна женщина может родить одного ребенка за девять месяцев. Смогут ли девять женщин родить одного ребенка за один месяц? Нет, потому что беременность не может быть распараллелена (ну, по крайней мере, на этом технологическом уровне).
Вот еще одно: на гидроэлектростанции, которую я недавно посетил, один из генераторов был модернизирован. Им пришлось перевозить статор генератора на корабле. Одна шестая часть статора может перевозиться на грузовике, но им нужно было перевозить весь статор; поэтому им пришлось использовать один корабль, а не шесть грузовиков.
Другим случаем может быть точное время событий. Иногда компьютерные процессоры используются в качестве точных таймеров (хотя эта практика больше не рекомендуется из-за переменных часов на большинстве процессоров. Вместо этого следует использовать высокоточный таймер событий). Если предположить, что у нас есть процессор с относительно стабильной тактовой частотой 12 ГГц, мы можем использовать его для измерения времени с гораздо более высоким разрешением, чем на процессоре с тактовой частотой 3 ГГц. Независимо от того, сколько у нас ядер 3GHz, мы не сможем достичь разрешения ядра 12 ГГц. Это похоже на наличие 4 часов с 7-сегментным дисплеем, где каждые часы показывают правильное время в часах. Независимо от того, насколько правильно они показывают часы, вы не можете использовать их для измерения временных интервалов в пределах одной секунды.
I'm not an expert on the subject, but I do have a degree in Computer Engineering. In theory (this is a highly conceptual answer), a quad-core 3GHz each processor can be the equivalent of one 12GHz processor if, for example, there were four sets of calculations needed for a single end result. That is what's called parallel processing.
Чтобы упростить логику, допустим, мы говорим о двухъядерном процессоре. Если набор расчетов был, скажем:
а = Ь +1;
с = D +1;
тогда эти два вычисления могут быть выполнены на отдельных ядрах, и процессор xGHz будет эквивалентен одноядерному процессору 2*xGHz. Это связано с тем, что оба вычисления, хотя и выполняются на скорости х, будут обрабатываться одновременно. В то время как одноядерный процессор мог выполнять их со скоростью 2 * x, но один за другим. Если два процессора выполнили этот код одновременно, они завершат работу одновременно. Однако, если код был:
а = Ь +1;
с = а +1;
тогда для двухъядерного процессора потребуется вдвое больше времени, чем для одноядерного процессора, поскольку во второй инструкции значение a зависит от первой инструкции и, следовательно, не может выполняться параллельно. Вот как некоторые программы могут использовать преимущества многопоточных процессоров.
Таким образом, теоретически одноядерный процессор с частотой 12 ГГц всегда может работать быстрее (или быстрее), чем четырехъядерный процессор с частотой 3 ГГц, но не наоборот.
Это сложный вопрос, но краткий ответ: нет
В реальных приложениях четыре процессора с частотой 3 ГГц не будут работать так же быстро, как один процессор с частотой 12 ГГц из-за неэффективности. Они могут быть очень близки, но они НЕ будут равны одному процессору с точки зрения вычислительной мощности.
Причина этого кроется в небольшой неэффективности при работе с программами, которые могут работать на более чем одном процессоре. Предполагая, что рассматриваемая программа может работать параллельно, у нас все равно будут проблемы с различными ядрами, конкурирующими друг с другом за другие ресурсы, такие как ОЗУ или даже проблемы с кэшем и синхронизацией потоков. Кроме того, всегда есть части программ, которые нельзя распараллелить и которые должны работать на одном ядре.
Посмотрите эту статью: http://en.wikipedia.org/wiki/Amdahl%27s_law
Похоже, мы не можем сказать, что 4 ядра при 3 ГГц можно сказать как 12 ГГц.
Различные ограничения, такие как совместная память, кэш-память и другие ресурсы, также являются общими для всех ядер, поэтому параллельный запуск кода на этих ядрах не будет столь же эффективным, как запуск на процессорах с частотой 12 ГГц (хотя такой процессор сложно создать).).
Также я где-то читал, что если мы удвоим транзисторы, встроенные в чип (CMP), то скорость, которую мы собираемся получить, составит всего 40% . Это дает существенный намек и на эту тему.
Что касается тактов, да, многоядерный процессор завершает x * cores
циклов работы в секунду. Обычно для упрощения сравнения тактовые частоты указаны для каждого ядра (иначе как бы вы могли легко сравнить двухъядерный чип 4 ГГц, работающий на частоте 2 ГГц / ядро, с четырехъядерным чипом 4 ГГц, работающим на частоте 1 ГГц / ядро?).
К сожалению, проблема становится сложной, когда вы пытаетесь сравнить разные процессоры в реальных приложениях.
Во-первых, большинство многоядерных процессоров имеют некоторые ресурсы, совместно используемые ядрами (например, кэш-память процессора). Они должны иметь общий доступ к этому кешу, поэтому вы не можете иметь оба ядра, которые хранят или читают данные на полной скорости. Это часто смягчается в многоядерных процессорах за счет наличия нескольких общих кешей (например, большинство четырехъядерных чипов имеют 2 кеша, каждый из которых совместно используется парой ядер), чтобы лучше разделить шансы узкого места на общем ресурсе.
Второе, и, возможно, менее известное в нетехническом мире, заключается в том, что сравнение тактовых частот может иногда походить на сравнение яблок и апельсинов. Разные процессоры выполняют разный объем работы за один тактовый цикл, так что, скажем, у вас есть великолепные звуки 1 ГГц против 1,2 ГГц, но микросхема 1 ГГц может фактически выполнить больше работы за определенный промежуток времени. Pentium 4 привел этот момент домой, что привело к мифу о мегагерце (о котором я не знал, когда придумал название до написания этой статьи).
Две машины, проезжающие по 50 миль в час, не суммируют до 100 миль в час. Это действительно настолько просто. Тактовая частота процессора - это не показатель скорости, с которой выполняется работа, а показатель того, как быстро тикают часы.