Как рассчитать тактовую частоту в многоядерных процессорах?

23

Можно ли, например, сказать, что процессор с четырьмя ядрами, работающими на частоте 3 ГГц, на самом деле является процессором, работающим на частоте 12 ГГц?

Однажды я попал в аргумент «Mac против ПК» (который, кстати, НЕ является темой этой темы ... который был в средней школе) со знакомым, который настаивал на том, что Mac рекламировались только как машины с частотой 1 ГГц, потому что они были двухпроцессорные G4, каждый из которых работал на частоте 500 МГц.

В то время я знал, что это фигня по причинам, которые, как мне кажется, очевидны для большинства людей, но я только что увидел на этом сайте комментарий о «6 ядрах x 0,2 ГГц = 1,2 ГГц», и это заставило меня снова задуматься о том, есть реальный ответ на это.

Итак, это более или менее философский / глубокий технический вопрос о семантике вычисления тактовой частоты. Я вижу две возможности:

  1. Каждое ядро ​​фактически выполняет x вычислений в секунду, таким образом, общее количество вычислений составляет x (ядер).
  2. Тактовая частота - это скорее число циклов, которые процессор проходит за секунду, поэтому, пока все ядра работают с одинаковой скоростью, скорость каждого тактового цикла остается одинаковой независимо от того, сколько ядер существует , Другими словами, Гц = (core1Hz + core2Hz + ...) / cores.
NReilingh
источник
Многие из ответов здесь хорошо объясняют, почему, например, четырехъядерный процессор с частотой 2 ГГц не обязательно равен одноядерному процессору с частотой 8 ГГц. Тем не менее, мне трудно предугадать, как следует учитывать скорости многоядерных процессоров при принятии решения о пригодности системы для приложения, в котором указаны конкретные требования к скорости и количеству ядер? (например, для Borderlands 2 требуется двухъядерный процессор 2,4 ГГц. Стоит ли ожидать, что четырехъядерный процессор с более низкой скоростью или одноядерный процессор с более высокой скоростью тоже так хорошо справятся?) На это (или можно ли) ответить здесь, или это должен быть отдельный вопрос?
Изи
@Iszi Это должен быть другой вопрос, но вполне вероятно, что Borderlands оптимизирован для более чем одного потока, если они включают «двухъядерный» в свои требования. В этом случае одноядерный процессор не рекомендуется, но неясно, может ли он использовать преимущества> 2 ядер.
NReilingh
Важно помнить, что тактовая частота и количество ядер не только определяют «скорость» процессора. Например, размеры и скорость кэша будут влиять на время, которое процессор тратит на ожидание инструкций и данных. Кроме того, инструкции за цикл (в некотором смысле, «эффективность», хотя и отличная от энергоэффективности и связанная с ней) также влияют на скорость расчетов. Разным процессорам потребуется разное время для выполнения одной и той же инструкции.
Боб

Ответы:

35

Основная причина, по которой четырехъядерный процессор с частотой 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 ГГц» является мусором в любой ситуации, кроме случаев, когда задачи совершенно параллельны и независимы. Существует множество параллельных задач, но они все равно требуют определенной синхронизации. Ручной тормоз - это видео транкодер, который очень хорошо использует все доступные процессоры, но для него требуется основной процесс, чтобы другие потоки были заполнены данными и собирали данные, с которыми они работают.

  1. Каждое ядро ​​фактически выполняет x вычислений в секунду, таким образом, общее количество вычислений составляет x (ядер).

Каждое ядро ​​способно выполнять x вычислений в секунду, предполагая, что рабочая нагрузка подходит параллельно, в линейной программе все, что у вас есть, - это 1 ядро.

  1. Тактовая частота - это скорее число циклов, которые процессор проходит за секунду, поэтому, пока все ядра работают с одинаковой скоростью, скорость каждого тактового цикла остается одинаковой независимо от того, сколько ядер существует , Другими словами, Гц = (core1Hz + core2Hz + ...) / cores.

Я думаю, что ошибочно думать, что 4 x 3GHz = 12 ГГц, если математика работает, но вы сравниваете яблоки с апельсинами, а суммы просто не верны, ГГц нельзя просто сложить вместе для каждой ситуации. Я бы изменил его на 4 x 3GHz = 4 x 3GHz.

Мокубай
источник
Хороший пост .. Не могу проголосовать более 1+ :-(
Гопалакришнан Субрамани
Но закон Амдала - это проблема программирования, вызванная блокировкой, а не проблема аппаратного обеспечения. Если вам не нужно синхронизироваться, каждое ядро ​​может выполнять инструкции так быстро, как только может. Можно разработать параллельную программу (простую), которая будет идеально разделена между ядрами. Не будут ли производители оборудования рекламировать эту необработанную стоимость?
Джастин Майнерс
Чтобы уточнить, я понимаю, почему это отвечает на вопрос, почему 4 ядра с частотой 3 ГГц не так быстры, на практике, как 12 ГГц, но это не та часть, как вычисляется тактовая частота для многоядерных процессоров.
Джастин Майнерс
Тактовая частота @JustinMeiners на ядро ​​- это просто тактовая частота, на которой работает ядро. Не существует магического расчета, приравнивающего одно ядро ​​к многоядерному. Несколько ядер просто означает, что вы можете запускать больше отдельных задач одновременно. Закон Амдалса применяется из-за программного обеспечения, поэтому необходимая синхронизация и блокировка предотвратят «идеальную» задачу аппаратного обеспечения так же, как и программного обеспечения. Общие кэши и память вызывают конфликты и блокировки.
Мокубай
@Mokubai Просто чтобы уточнить, когда производитель перечисляет тактовую частоту, каждое ядро ​​работает на скорости, верно?
Джастин Майнерс
6

Другие сделали хороший аргумент с технической точки зрения. Вместо этого я приведу пару простых аналогий, которые, я надеюсь, объяснят, почему 4 * 3 ГГц не эквивалентны 1 * 12 ГГц.

Например, одна женщина может родить одного ребенка за девять месяцев. Смогут ли девять женщин родить одного ребенка за один месяц? Нет, потому что беременность не может быть распараллелена (ну, по крайней мере, на этом технологическом уровне).

Вот еще одно: на гидроэлектростанции, которую я недавно посетил, один из генераторов был модернизирован. Им пришлось перевозить статор генератора на корабле. Одна шестая часть статора может перевозиться на грузовике, но им нужно было перевозить весь статор; поэтому им пришлось использовать один корабль, а не шесть грузовиков.

Другим случаем может быть точное время событий. Иногда компьютерные процессоры используются в качестве точных таймеров (хотя эта практика больше не рекомендуется из-за переменных часов на большинстве процессоров. Вместо этого следует использовать высокоточный таймер событий). Если предположить, что у нас есть процессор с относительно стабильной тактовой частотой 12 ГГц, мы можем использовать его для измерения времени с гораздо более высоким разрешением, чем на процессоре с тактовой частотой 3 ГГц. Независимо от того, сколько у нас ядер 3GHz, мы не сможем достичь разрешения ядра 12 ГГц. Это похоже на наличие 4 часов с 7-сегментным дисплеем, где каждые часы показывают правильное время в часах. Независимо от того, насколько правильно они показывают часы, вы не можете использовать их для измерения временных интервалов в пределах одной секунды.

AndrejaKo
источник
Полезный ответ для менее технически мыслящих. Кроме того , я как аналогии :)
утвердительный
3

Я не эксперт по этому вопросу, но у меня есть степень в области компьютерной техники. В теории (это весьма концептуальный ответ), четырехъядерный 3 ГГц каждый процессор может быть эквивалентом одного процессора 12GHz , если, например, существует четыре набора вычислений , необходимых для одного конечного результата. Это то, что называется параллельной обработкой.

Чтобы упростить логику, допустим, мы говорим о двухъядерном процессоре. Если набор расчетов был, скажем:

а = Ь + 1;

с = D + 1;

тогда эти два вычисления могут быть выполнены на отдельных ядрах, и процессор xGHz будет эквивалентен одноядерному процессору 2 * xGHz. Это связано с тем, что оба вычисления, хотя и выполняются на скорости х, будут обрабатываться одновременно. В то время как одноядерный процессор мог выполнять их со скоростью 2 * x, но один за другим. Если два процессора выполнили этот код одновременно, они завершат работу одновременно. Однако, если код был:

а = Ь + 1;

с = а + 1;

тогда для двухъядерного процессора потребуется вдвое больше времени, чем для одноядерного процессора, поскольку во второй инструкции значение a зависит от первой инструкции и, следовательно, не может выполняться параллельно. Вот как некоторые программы могут использовать преимущества многопоточных процессоров.

Таким образом, теоретически одноядерный процессор с частотой 12 ГГц всегда может работать быстрее (или быстрее), чем четырехъядерный процессор с частотой 3 ГГц, но не наоборот.

blastawaythewall
источник
Обратите внимание, что эти вычисления будут выполняться быстрее только в том случае, если они многопоточные, и даже в этом случае возникают небольшие накладные расходы. Но да, хотя можно сделать одноядерный процессор, который может выполнять столько же вычислений, но это просто невозможно из-за высокой температуры и тому подобного.
Фоши
Этот ответ вводит в заблуждение по двум причинам. Во-первых, современные ядра делают больше, чем одну вещь одновременно. Во-вторых, ответ предполагает, что скорость ядра такая же, как скорость выполнения работы. Одноядерный процессор 12 ГГц не будет работать так же быстро, как четырехъядерный процессор 3GHz, если одноядерному процессору требуется значительно больше тактов для выполнения той же работы. (Что и было бы, поскольку процессору 12 ГГц потребовались бы гораздо более длинные конвейеры.)
Дэвид Шварц
2

Это сложный вопрос, но краткий ответ: нет

В реальных приложениях четыре процессора с частотой 3 ГГц не будут работать так же быстро, как один процессор с частотой 12 ГГц из-за неэффективности. Они могут быть очень близки, но они НЕ будут равны одному процессору с точки зрения вычислительной мощности.

Причина этого кроется в небольшой неэффективности при работе с программами, которые могут работать на более чем одном процессоре. Предполагая, что рассматриваемая программа может работать параллельно, у нас все равно будут проблемы с различными ядрами, конкурирующими друг с другом за другие ресурсы, такие как ОЗУ или даже проблемы с кэшем и синхронизацией потоков. Кроме того, всегда есть части программ, которые нельзя распараллелить и которые должны работать на одном ядре.

Посмотрите эту статью: http://en.wikipedia.org/wiki/Amdahl%27s_law

Faken
источник
Вы правы и неправы. Четыре 3-ГГц процессора, скорее всего, будут быстрее, чем один 12-ГГц процессор в приложениях «реального мира». В наши дни все больше и больше программ используют многопоточность, указанная вами ссылка относится к теоретическому однопоточному приложению. Один процессор на 12 ГГц имеет только один поток, поэтому преимущества многопоточности, которые может предложить программа «реального мира», будут потеряны. Индустрия не собирается выпускать более медленные ядра вместо меньших более быстрых ядер только потому, что преимущества многоядерной технологии намного перевешивают преимущества быстрой одноядерной технологии.
Убиквибакон
3
@typoknig: Это не совсем так. Одноядерный процессор 6 ГГц будет запускать многопоточное приложение примерно с той же скоростью, что и двухъядерный процессор 3 ГГц, предполагая, что приложение использует все преимущества каждого потока (что, скорее всего, не делает, если оно «реально»). Мир приложений », но это отдельный аргумент). Мы не видим процессоры 12 ГГц, потому что это слишком сложно с современной технологией, а не потому, что она медленнее.
Саша Чедыгов
4
@typoknig: Я запрограммировал несколько многопоточных программ и, поверьте мне, если бы у меня был один процессор 12 ГГц, я использовал бы его вместо этого. Однопоточное программирование в 10 раз проще и намного более эффективно, чем многопоточное программирование. Настоящая причина, по которой индустрия продвигает многоядерные процессоры, заключается не в том, что они работают быстрее, а в том, что мы не можем заставить отдельные процессоры работать быстрее! Это было изложено с технологией Intel Netburst еще в p4 дней. Они оценили процессоры 10 ГГц, по крайней мере, до тех пор, пока квантовая физика не ударила их по лицу и не сказала "нет, нуб!"
Faken
2
@typokning: F22 использует массив процессоров PowerPC для получения 10 миллиардов команд в секунду, что очень отличается от 10 ГГц! Это все равно что сказать, что ваш Radion HD5970 работает на частоте 4600 ГГц. Он способен на 4.6 TFLOPS, но только потому, что он высокопараллелен.
Faken
1
@typoknig: Вы явно не понимаете разницу между частотой процессора и IPS (количество команд в секунду), они не одно и то же. Пожалуйста, прочитайте: en.wikipedia.org/wiki/Instructions_per_second
Faken
2

Похоже, мы не можем сказать, что 4 ядра при 3 ГГц можно сказать как 12 ГГц.

Различные ограничения, такие как совместная память, кэш-память и другие ресурсы, также являются общими для всех ядер, поэтому параллельный запуск кода на этих ядрах не будет столь же эффективным, как запуск на процессорах с частотой 12 ГГц (хотя такой процессор сложно создать). ).

Также я где-то читал, что если мы удвоим транзисторы, встроенные в чип (CMP), то скорость, которую мы собираемся получить, составит всего 40%. Это дает существенный намек и на эту тему.

Хармит Сингх
источник
1

Что касается тактовых циклов, то да, многоядерный процессор выполняет полный x * coresцикл работы в секунду. Обычно для упрощения сравнения тактовые частоты указаны для каждого ядра (иначе как бы вы могли легко сравнить двухъядерный чип 4 ГГц, работающий на частоте 2 ГГц / ядро, с четырехъядерным чипом 4 ГГц, работающим на частоте 1 ГГц / ядро?).

К сожалению, проблема становится сложной, когда вы пытаетесь сравнить разные процессоры в реальных приложениях.

Во-первых, большинство многоядерных процессоров имеют некоторые ресурсы, совместно используемые ядрами (например, кэш-память ЦП). Они должны иметь общий доступ к этому кешу, поэтому вы не можете иметь оба ядра, которые хранят или читают данные на полной скорости. Это часто смягчается в многоядерных процессорах за счет наличия нескольких общих кешей (например, большинство четырехъядерных чипов имеют 2 кеша, каждый из которых совместно используется парой ядер), чтобы лучше разделить шансы узкого места на общем ресурсе.

Второе, и, возможно, менее известное в нетехническом мире, заключается в том, что сравнение тактовых частот может иногда походить на сравнение яблок и апельсинов. Разные процессоры выполняют разный объем работы за один тактовый цикл, так что, скажем, у вас есть великолепные звуки 1 ГГц против 1,2 ГГц, но микросхема 1 ГГц может фактически выполнить больше работы за определенный промежуток времени. Pentium 4 привел этот момент домой, что привело к мифу о мегагерце (о котором я не знал, когда придумал название до написания этой статьи).

Джимми
источник
Тактовые частоты не указаны для каждого ядра. Скорости никогда не "за" ничего. Если машина движется со скоростью 50 миль в час, скорость составляет 50 миль в час. Если две машины едут со скоростью 50 миль в час, скорость все равно составляет 50 миль в час. Идея «скорость на машину» бессмысленна и бессвязна.
Дэвид Шварц
1

Две машины, проезжающие по 50 миль в час, не суммируют до 100 миль в час. Это действительно настолько просто. Тактовая частота процессора - это не показатель скорости, с которой выполняется работа, а показатель того, как быстро тикают часы.

Дэвид Шварц
источник