В связанном вопросе я спросил о преимуществах двухпроцессорной системы с точки зрения удвоения кеша L3.
Однако я заметил, что процессоры серии Xeon E5-2600 имеют ровно 2,5 МБ кэш-памяти L3 на ядро .
Это наводит меня на мысль, что операционная система резервирует 2,5 МБ кэш-памяти L3 на ядро. Тем не менее, у меня также есть противоречивое впечатление, что кэш L3 является общим для всех ядер. На удивление мало информации или дискуссий по этому поводу.
Моя главная проблема заключается в том, могут ли фоновые приложения с низким приоритетом «перегружать» кэш L3 и снижать производительность для приоритетных приложений с более высоким приоритетом. Две конкретные проблемы с производительностью, которые у меня есть, мотивируют этот вопрос.
Компиляция определенной программы на C ++ требует 25 минут в моей текущей системе разработки в VS 2008, тогда как в другой системе она идет значительно быстрее, требуя всего 5 минут в VS 2008 с идентичными настройками - несмотря на то, что у меня есть i7- почти высокого класса. 970 CPU и достаточно оперативной памяти.
Программы часто запускаются в моей системе до 20 секунд (т.е. отображают главное окно); и что касается соответствующего, оболочке Windows требуется до 10 секунд, чтобы отобразить контекстное меню проводника Windows (и связанные варианты поведения также занимают столько же времени), несмотря на мои попытки ограничить пункты контекстного меню (в настоящее время, возможно, 10 дополнительных за пределами по умолчанию).
Моя система, безусловно, загружена очень большим количеством приложений, которые я установил (и удалил) за эти годы, но, тем не менее, я делаю все возможное, чтобы оптимизировать систему.
У меня также работает много фоновых приложений с низким приоритетом; в частности, избыточное программное обеспечение для резервного копирования в облачное хранилище, такое как CrashPlan, которое обычно использует около 25% общей загрузки ЦП в этой 6-ядерной 12-поточной системе.
Я буду получать новый компьютер. Я знаю, что я буду продолжать запускать много фоновых приложений и устанавливать / удалять многие программы. Если бы я думал, что получение двухпроцессорной системы, которая удваивает не только ядра, но и кэш-память L3, поможет преодолеть ужасную производительность компилятора C ++ и общее замедление работы системы, я бы с удовольствием это сделал.
Не должно быть никаких причин, по которым высокопроизводительная система работает так медленно, даже со многими программами и фоновыми приложениями. Но если у меня возникнут проблемы, независимо от того, какую мощность процессора и кэш-памяти L3 я отдам системе, просто потому, что у меня установлено и запущено так много программ и фоновых приложений, я не хочу тратить дополнительные 2500 долларов на двухпроцессорный процессор система, которая не поможет решить мою проблему.
Любые предложения, в частности, касающиеся моего вопроса о том, является ли кэш L3 общим для всех ядер (так, чтобы фоновые приложения с низким приоритетом могли предположительно включать кэш L3, замедлять программы с более высоким приоритетом), или, скорее, если он привязан к отдельным ядра, будут оценены.
источник
Ответы:
На этих процессорах каждое физическое ядро имеет свой собственный кэш второго уровня. Кэш L3 совместно используется всеми ядрами и является инклюзивным, то есть любые данные, которые находятся в кэше L2 любого ядра, также находятся в кэше L3.
Хотя это может показаться пустой тратой пространства L3, на самом деле это делает L3 незаменимым для ускорения операций между ядрами памяти. Основное назначение кэша L3 - выполнять роль коммутатора и промежуточной области для ядер. Например, если одно ядро хочет знать, может ли область памяти кэшироваться другим ядром, оно может проверить кэш L3. Если информация была обработана одним ядром, а следующее должно быть обработано другим ядром, они передают ее через кэш-память третьего уровня, а не через более медленную внешнюю память. Кроме того, его влияние на производительность невелико, за исключением необычных алгоритмов - кэш L2 достаточно велик для мелких вещей, а кэш L3 слишком мал для больших вещей.
Таким образом, в то время как каждое ядро имеет собственный кэш L2 размером 256 КБ и эффективно резервируется в кэш-памяти L3 объемом 256 КБ, баланс распределяется между всеми ядрами. Менее важная активность в других ядрах может повредить выполнению более важной задачи, которая выигрывает от использования пространства L3. Но по причинам, которые я упомянул, это, как правило, незначительный эффект на практике, и, как правило, не стоит беспокоиться о том, чтобы не только оптимизировать операции с «объемными данными» (например, сжатие и сканирование), чтобы минимизировать загрязнение кэша. (Например, используя невременные операции.)
источник
Насколько я понимаю, все уровни кэша реализованы непосредственно на чипе, и что L2 и L3 - это одно и то же (что только Intel распознает разницу, AMD объединяет их). Имея это в виду, я бы предположил, что кэш L3 на процессорах не распределяется между процессорами на материнской плате с двумя сокетами. Это также имеет смысл, имея в виду, что типично видеть отдельные каналы памяти в ОЗУ на процессор.
Кто-то поправит меня, если я ошибаюсь.
источник