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

9

Em um pergunta relacionada Eu perguntei sobre o benefício de um sistema de CPU dual em termos de duplicação do cache L3.

No entanto, tenho notado que a série de CPUs Xeon E5-2600 tem 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 os aplicativos de baixa prioridade podem "sobrecarregar" o cache L3 e diminuir o desempenho para aplicativos de primeiro plano com prioridade mais alta. Dois problemas específicos de desempenho que motivaram essa questão.

  1. Compilar 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 perto da CPU i7-970 topo de gama e RAM suficiente.

  2. Os programas geralmente demoram até 20 segundos para serem executados (por exemplo, exibir a janela principal deles) no meu sistema; e em um relacionado relacionado, o shell do Windows requer até 10 segundos para exibir o menu de contexto do Windows Explorer (e os comportamentos relacionados também demoram), apesar das minhas tentativas de limitar as entradas do menu de contexto (há atualmente talvez 10 adicionais além o padrão).

Meu sistema é certamente carregado com um número muito grande de aplicativos que eu instalei (e desinstalei) ao longo dos anos, mas eu faço o meu melhor para simplificar o sistema, mesmo assim.

Eu 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 geralmente somam cerca de 25% da utilização total da CPU neste sistema de 6 threads de 6 núcleos.

Eu vou estar recebendo um novo computador. Eu sei que continuarei executando muitos aplicativos em segundo plano e instalando / desinstalando muitos programas. Se eu pensasse que obter um sistema de duas CPUs que dobra não apenas os núcleos, mas o cache L3 ajudaria a superar o horrível desempenho do compilador C ++ e a lentidão geral do sistema, eu ficaria feliz em fazê-lo.

Não deve haver razão para que um sistema high-end opere tão lentamente, mesmo com muitos programas e aplicações em segundo plano. Mas se meus problemas ocorrerem, não importa quanta CPU e cache L3 eu forneço ao sistema, simplesmente porque tenho tantos programas e aplicativos em segundo plano instalados e funcionando, 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 especial sobre minha pergunta sobre se o cache L3 é compartilhado entre todos os núcleos (de modo que aplicativos em segundo plano de baixa prioridade possam possivelmente sobrecarregar o cache L3, retardando programas de prioridade mais alta) ou melhor amarrado a núcleos individuais, seria apreciado.

    
por Dan Nissenbaum 16.04.2012 / 23:43

2 respostas

10

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 a L3 inestimável para acelerar as operações de memória entre núcleos. O objetivo principal do cache L3 é atuar como uma área de comutação e área de teste para os núcleos. Por exemplo, se um núcleo quiser saber se uma região de memória pode ser armazenada em cache por outro núcleo, ele poderá verificar o cache L3. Se as informações foram processadas por um núcleo e as próximas precisam ser processadas por outro núcleo, elas são entregues através do cache L3, em vez da memória mais lenta fora do chip. Além disso, seu impacto no desempenho não é tão grande, exceto por algoritmos incomuns - o cache L2 é grande o suficiente para coisas pequenas e o cache L3 é muito pequeno para coisas grandes.

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 que mencionei, geralmente não é um efeito significativo na prática e geralmente não vale a pena se preocupar em otimizar 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.)

    
por 17.04.2012 / 01:23
0

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

Alguém me corrija se eu estiver errado.

    
por 17.04.2012 / 00:05