O cache L3 é compartilhado por todos os núcleos de uma CPU Sandy-Bridge E Xeon?


12

Em uma pergunta relacionada , perguntei sobre os benefícios de um sistema com CPU dupla em termos de duplicação do cache L3.

No entanto, notei que a série de CPUs Xeon E5-2600 possui exatamente 2,5 MB de cache L3 por núcleo .

Isso me leva a acreditar que o sistema operacional reserva 2,5 MB de cache L3 por núcleo. No entanto, também tenho a impressão contraditória de que o cache L3 é compartilhado entre todos os núcleos. Surpreendentemente, há pouca informação ou discussão sobre isso.

Minha principal preocupação é se aplicativos em segundo plano de baixa prioridade podem "sobrecarregar" o cache L3 e diminuir o desempenho de aplicativos em primeiro plano de alta prioridade. Dois problemas específicos de desempenho que motivaram esta pergunta.

  1. A compilação de um determinado programa C ++ requer 25 minutos no meu sistema de desenvolvimento atual no VS 2008, enquanto em outro sistema ele é muito mais rápido, exigindo apenas 5 minutos no VS 2008 com configurações idênticas - apesar do fato de eu ter um i7- CPU 970 e RAM suficiente.

  2. Os programas geralmente levam até 20 segundos para serem executados (ou seja, exibem a janela principal) no meu sistema; e em uma observação relacionada, o shell do Windows requer até 10 segundos para exibir o menu de contexto do Windows Explorer (e os comportamentos relacionados também demoram tanto tempo), apesar das minhas tentativas de limitar as entradas do menu de contexto (atualmente existem talvez 10 adicionais além o padrão).

Meu sistema certamente está carregado com um número muito grande de aplicativos que eu instalei (e desinstalei) ao longo dos anos, mas eu faço o possível para simplificar o sistema.

Também tenho muitos aplicativos em segundo plano de baixa prioridade em execução; em particular, software de backup em nuvem redundante, como o CrashPlan, que normalmente soma cerca de 25% da utilização total da CPU neste sistema de 6 núcleos e 12 threads.

Eu vou estar recebendo um novo computador. Sei que continuarei executando muitos aplicativos em segundo plano e instalando / desinstalando muitos programas. Se eu pensasse que a obtenção de um sistema de CPU dupla que dobre não apenas os núcleos, mas o cache L3 ajudaria a superar o desempenho horrível do compilador C ++ e a lentidão geral do sistema, eu o faria com prazer.

Não deve haver razão para que um sistema high-end opere tão lentamente, mesmo com muitos programas e aplicativos em segundo plano. Mas se meus problemas ocorrerem, independentemente da quantidade de energia da CPU e do cache L3 que eu forneça ao sistema, simplesmente porque tenho muitos programas e aplicativos em segundo plano instalados e em execução, não quero desperdiçar US $ 2.500 adicionais em uma CPU dupla sistema que não ajudará a resolver meu problema.

Alguma sugestão, em particular em relação à minha pergunta sobre se o cache L3 é compartilhado entre todos os núcleos (de modo que aplicativos em segundo plano de baixa prioridade possam estar atrapalhando o cache L3, diminuindo a velocidade dos programas de alta prioridade) ou melhor, se ele está vinculado a indivíduos núcleos, seria apreciado.


Boa pergunta para a qual pessoalmente não tenho uma boa resposta, exceto para dizer que também tive a impressão de que L3 foi compartilhado. Gostaria de perguntar por que diabos você está chamando esses Xeons de 'segunda geração' quando 'Xeon' é um produto Intel há uma década. (Se isso é por analogia com Sandy Bridge i3 / 5/7 chips de ser '2ª geração', em seguida, que é uma má analogia)
Shinrai

A Intel refere-se à linha de CPUs i7-2600 como "segunda geração" ( ark.intel.com/products/family/59136/… ). Por "Xeon de segunda geração", quero dizer o lançamento equivalente das CPUs da arquitetura Xeon Sandy-Bridge E em 6 de março de 2012 ( en.wikipedia.org/wiki/… ).
Dan Nissenbaum

1
Essa é a analogia que eu pensei que você estava fazendo. É ruim (esses são os i7s de segunda geração, mas não são os Xeons de segunda geração), e eu mudaria o título IMO ... Eu esperava encontrar uma pergunta sobre processadores de 12 anos e que poderia manter muitas pessoas de clicar aqui. Talvez mude a 'segunda geração' para 'Sandy Bridge-E'.
Shinrai

Respostas:


13

Nessas CPUs, cada núcleo físico possui seu próprio cache L2. O cache L3 é compartilhado por todos os núcleos e é inclusivo - ou seja, todos os dados que residem no cache L2 de qualquer núcleo também residem no cache L3.

Embora isso possa parecer um desperdício de espaço L3, ele realmente torna o L3 inestimável para acelerar operações de memória entre núcleos. O objetivo principal do cache L3 é atuar como uma central de distribuição e área de preparação para os núcleos. Por exemplo, se um núcleo quiser saber se uma região da memória pode ser armazenada em cache por outro núcleo, poderá verificar o cache L3. Se as informações foram processadas por um núcleo e, em seguida, precisam ser processadas por outro núcleo, elas são transmitidas pelo cache L3, em vez da memória mais lenta do chip. Além disso, seu impacto no desempenho não é tanto, exceto em algoritmos incomuns - o cache L2 é grande o suficiente para pequenas coisas e o cache L3 é muito pequeno para grandes coisas.

Portanto, embora cada núcleo tenha seu próprio cache L2 de 256 KB e efetivamente 256 KB reservados no cache L3, o saldo é compartilhado por todos os núcleos. Atividades menos importantes em outros núcleos podem prejudicar o desempenho de uma tarefa mais importante que se beneficia do uso do espaço L3. Mas, pelas razões mencionadas, geralmente não é um efeito significativo na prática e geralmente não vale a pena se preocupar além de otimizar as operações de "dados em massa" (como compactação e varredura) para minimizar a poluição do cache. (Por exemplo, usando operações não temporais.)


0

Entendo que todos os níveis de cache são implementados diretamente no chip e que L2 e L3 são os mesmos (que apenas a Intel reconhece a diferença, a AMD os combina). Com isso em mente, eu imagino que o cache L3 nas CPUs não seja compartilhado entre as CPUs em uma placa-mãe com soquete duplo. Isso também faz sentido, tendo em mente que é comum ver canais de memória separados para RAM por CPU.

Alguém me corrija se eu estiver errado.


L2 e L3 não são a mesma coisa. Nos projetos recentes da Intel, L1 / L2 é por núcleo e pequeno (32k L1 I $ & D $ / 256k L2 unificado), enquanto L3 é inclusivo e compartilhado pela GPU e todos os núcleos. L1 / L2 são fisicamente separados, mas meio que servem a propósitos semelhantes (por exemplo, tornar o acesso à memória rápido para um único núcleo). O L3 inclusivo tem outro objetivo: coerência entre os núcleos (e a GPU). Veja a resposta de @ DavidSchwartz.
Peter Cordes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.