Почему большее количество ядер ведет к более высокому CPI? - PullRequest
0 голосов
/ 07 мая 2020

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

Насколько я понимаю, CPI должен увеличиваться только при увеличении тактовой частоты, поэтому увеличение CPI не имеет для меня особого смысла.

1 Ответ

0 голосов
/ 07 мая 2020

Какой график? Какие факторы они сохраняют неизменными при увеличении количества ядер? Возможно, общий бюджет транзистора, поэтому каждое ядро ​​должно быть проще, чтобы иметь больше ядер?

Увеличение размера одного ядра приводит к уменьшению отдачи, но создание большего количества ядер дает линейную отдачу для недопустимо параллельных задач ; следовательно, Xeon Phi имеет множество простых ядер, а графические процессоры являются очень простыми конвейерами.

Но процессоры, которые также заботятся о производительности / задержке однопотока (а не только о пропускной способности), будут pu sh в эту убывающую прибыль и построить более широкие ядра. Многие проблемы, которые мы запускаем на процессорах, являются не тривиальными для распараллеливания, поэтому большое количество слабых ядер хуже, чем меньшее количество более быстрых ядер. Для заданного размера проблемы, чем больше потоков у вас есть, тем больше общего времени поток будет взаимодействовать с другими потоками (и, возможно, ожидать от них данных).


Если вы do сохраняйте идентичность каждого ядра при добавлении дополнительных ядер, их CPI обычно остается неизменным при запуске одного и того же кода. например, SPECint_rate масштабируется почти линейно с количеством ядер для текущих процессоров Intel / AMD (которые масштабируются добавив больше таких же ядер).

Так что это не должно быть тем, о чем говорит ваша диаграмма. Вам нужно будет прояснить вопрос, если вы хотите получить более конкретный c ответ.

Вы не получите идеально линейное масштабирование, потому что ядра действительно конкурируют друг с другом за пропускную способность памяти, и место в общем кэше последнего уровня. (Хотя в большинстве современных проектов размер кеш-памяти последнего уровня увеличивается с увеличением количества ядер. Например, AMD Zen имеет кластеры из 4 ядер, совместно использующие 8 МБ L3, которые являются частными для этих ядер. Intel использует большой общий L3, который имеет часть L3 с каждым ядром, поэтому L3 на ядро ​​примерно одинаков.)

Но большее количество ядер также означает более сложное межсоединение, чтобы связать их все вместе и с контроллерами памяти . Многоядерные процессоры Intel Xeon имеют заметно худшую однопоточную пропускную способность, чем четырехъядерные «клиентские» микросхемы той же микроархитектуры, хотя ядра в них одинаковы. Почему Skylake намного лучше Broadwell-E по пропускной способности однопоточной памяти?

...