Разделяется ли кэш L3 всеми ядрами для процессора Sandy-Bridge E Xeon?

В связанном вопросе я спросил о преимуществах двухпроцессорной системы с точки зрения удвоения кеша L3.

Однако я заметил, что процессоры серии Xeon E5-2600 имеют ровно 2,5 МБ кэш-памяти третьего уровня на ядро.

Это наводит меня на мысль, что операционная система резервирует 2,5 МБ кэш-памяти третьего уровня на ядро. Тем не менее, у меня также есть противоречивое впечатление, что кэш L3 используется всеми ядрами. На удивление мало информации или дискуссий по этому поводу.

Моя главная проблема заключается в том, могут ли фоновые приложения с низким приоритетом "перегружать" кэш L3 и снижать производительность для приоритетных приложений с более высоким приоритетом. Две конкретные проблемы с производительностью, которые у меня есть мотивировать этот вопрос.

  1. Компиляция определенной программы на C++ требует 25 минут в моей текущей системе разработки в VS 2008, тогда как в другой системе она идет намного быстрее, требуя всего 5 минут в VS 2008 с идентичными настройками - несмотря на то, что у меня есть высокопроизводительный i7-970 CPU и достаточно оперативной памяти.

  2. Программы часто запускаются в моей системе до 20 секунд (т.е. отображают главное окно); и что касается соответствующего, оболочке Windows требуется до 10 секунд для отображения контекстного меню проводника Windows (и связанные поведения также занимают столько же времени), несмотря на мои попытки ограничить записи в контекстном меню (в настоящее время, возможно, еще 10 дополнительных по умолчанию).

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

У меня также работает много фоновых приложений с низким приоритетом; в частности, избыточное программное обеспечение для резервного копирования в облачное хранилище, такое как CrashPlan, которое обычно составляет около 25% от общей загрузки ЦП в этой 6-ядерной 12-поточной системе.

Я буду получать новый компьютер. Я знаю, что я буду продолжать запускать много фоновых приложений, а также устанавливать / удалять многие программы. Если бы я думал, что получение двухпроцессорной системы, которая удваивает не только ядра, но и кэш-память L3, поможет преодолеть ужасную производительность компилятора C++ и общее замедление работы системы, я бы с удовольствием это сделал.

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

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

2 ответа

Решение

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

Хотя это может показаться пустой тратой пространства L3, оно фактически делает L3 незаменимым для ускорения операций между ядрами памяти. Основное назначение кэша L3 - выполнять роль коммутатора и промежуточной области для ядер. Например, если одно ядро ​​хочет знать, может ли область памяти кэшироваться другим ядром, оно может проверить кэш L3. Если информация была обработана одним ядром, а следующее должно быть обработано другим ядром, они передают ее через кэш-память третьего уровня, а не через более медленную внешнюю память. Кроме того, его влияние на производительность невелико, за исключением необычных алгоритмов - кеш L2 достаточно велик для мелких вещей, а кеш L3 слишком мал для больших вещей.

Таким образом, в то время как каждое ядро ​​имеет свой собственный кэш L2 объемом 256 КБ и эффективно зарезервированный в кэше L3 256 КБ, баланс распределяется между всеми ядрами. Менее важные действия в других ядрах могут повредить выполнению более важной задачи, которая выигрывает от использования пространства L3. Но по причинам, которые я упомянул, это, как правило, незначительный эффект на практике, и, как правило, не стоит беспокоиться о том, чтобы не только оптимизировать операции с "объемными данными" (такие как сжатие и сканирование), чтобы минимизировать загрязнение кэша. (Например, используя невременные операции.)

Насколько я понимаю, все уровни кэша реализованы непосредственно на чипе, и что L2 и L3 - это одно и то же (что только Intel распознает разницу, AMD объединяет их). Имея это в виду, я бы предположил, что кэш-память L3 на процессорах не распределяется между процессорами на материнской плате с двумя сокетами. Это также имеет смысл, имея в виду, что типично видеть отдельные каналы памяти в ОЗУ на процессор.

Кто-то поправит меня, если я ошибаюсь.

Другие вопросы по тегам