9

В связанном вопросе я спросил о преимуществах двухпроцессорной системы с точки зрения удвоения кеша 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-поточной системе.

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

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

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

2 ответа2

10

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

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

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .