Segredo para a boa utilização da memória assíncrona e não simétrica da série X poderá estar nas suas caches.

A questão de como a Xbox série X poderá superar a limitação da sua RAM dividida em duas pools e com canais partilhados, poderá ter uma resposta nas suas caches!

Se bem se lembram, quando analisamos a questão da RAM da série X deparamos-nos com uma memória assincrona e não simétrica numa configuração de partilha de controladores de memória que ao terem de aceder a duas pools de memória (10 GB de memória com 560 GB/s de largura de banda, e 6 GB com 336 GB/s), criam problemas com a largura de banda.

Esse artigo explicitando esse problema, encontra-se neste link, cuja leitura recomendamos, caso queiram perceber o potencial problema.

Apenas como referência, refira-se que a configuração de memória da série X já foi usada em tempos pela Nvidia nas sua GTX 650 TI e GTX 660 TI, causando os problemas que aqui se prevêem igualmente existir.

Procurando-se perceber que solução poderia existir para o problema em causa, contactei algumas pessoas da área na procura de uma resposta sobre qual poderia ser a solução para este problema. A resposta que obtive não foi a mais tranquilizadora, uma vez que todos os contactados reconhecem que o problema existe, e que a única coisa que pode ser feita é mitigar o mesmo.



Daí que a solução referida passaria pela criação de níveis de prioridade na RAM, que colocaria na memória de 6 GB apenas aqueles dados não relevantes e menos processados.

Esse artigo foi escrito e encontra-se aqui.

Confesso porém que desde essa altura não parei de pensar na situação. Porque a realidade é que se esta solução realmente mitiga e muito o problema, ela não o elimina. Qualquer acesso aos 6 GB, seja ele feito pelo sistema operativo (que vai funcionar ali), ou meramente para aceder aos dados na RAM, mesmo que tais acessos sejam minimizados ao máximo, vai cortar a largura de banda da Pool de 10 GB para 392 GB/s.

E esta situação será sempre um problema, pois torna, para todos os efeitos, impossível contar-se com mais do que essa largura de banda se a ideia é manter as performances sem engasgos quando acontece um acesso.

Daí que, desde essa altura, não tenho parado de ler tudo o que se tem escrito sobre esse assunto, na procura de uma solução para este problema, que dificilmente teria passado em claro na mente dos engenheiros da Microsoft.

E foi durante uma nova leitura a um artigo da Digital Foundry que encontrei algo que poderá ser a solução para este problema: As caches da Xbox série X!



Qualquer um que leia regularmente foruns diversos com as discussões sobre as novas consolas, terá consciência que basicamente ninguém fala neste assunto. E daí que a questão das caches estará ignorada.

É que lento o artigo da Digital Foundry podemos encontrar um pequeno trecho, quase ignorado, em que a Microsoft refere que a Xbox série X possui na totalidade dos constituintes do seu APU, uma memória cache total de 76 MB.

E se este número não aparenta dizer nada… ele pode dizer muita coisa! Repare-se!

A Xbox possui dois CCX com 4 núcleos Zen 2 cada um. A versão de secretária destes CPUs possui um total de 16 MB de cache para cada CCX.

Neste caso, a Xbox, possuindo dois, estará a usar 32 MB de cache com os CPUs.



Cada núcleo possui ainda 64 KB de cache L1 e 512 KB de cache L2, o que para 8 núcleos perfaz 512 KB de cache L1, e 4096 MB de cache L2

Ou seja, o CPU terá no total 36,5 MB de caches.

Já o GPU é mais dificil de se analisar uma vez que pouco se sabe sobre o RDNA 2. Mas o RDNA 1 possui 32 KB de cache L0 em cada duplo CU, o que perfaz 832 KB de cache L0 num GPU com 52 duplos CUs. Vamos por conveniência arredondar isto para 1 MB.

Depois o RDNA possui ainda 128 KB de cache L1 por cada Shader Array. E possuindo dois Shader Engines com 2 Shader Arrays cada um, isto perfaz um total de 512 KB de cacle L1.

O RDNA possui ainda 4 MB de cache L2 na totalidade do chip.



Isto perfaz um total de 5.5 MB de caches no GPU. Que somados aos anteriores 36,5 MB, perfazem 42 MB.

Isto quer dizer que, num total de 76 MB, sobram 34 MB em caches que se desconhecem onde estão!

Ora é muito provável que algumas destas caches estejam dedicados ao sistema de I/O, com um buffer de descompressão, e isso é algo sobre o qual a Microsoft não foi clara.

Mas outra possibilidade é que, sem impedir que haja igualmente esse buffer, os caches do CPU e do GPU estejam aumentados. E isso permitir-lhe-ia uma gestão de dados mais eficiente nos ciclos em que o corte da largura de banda existia, compensando assim esses cortes, e impedindo a performance de flutuar.

No entanto, caso essa esta gestão mista entre a memória normal e uma cache mais reduzida existe, isso traz recordações de uma consola bem recente, a Xbox One. Ora se esta situação acontecesse,  talvez fosse por aí que Ali Salehi, Engenheiro da Crytek, fez a comparação da memória da X com a memória da Xbox One. Será uma solução, mas uma que envolve uma gestão dos tempos de acesso à RAM e gestão da mesma com as caches.



Refira-se que estou aqui a pisar ovos. Não podemos garantir de forma nenhuma que isto acontece! A Microsoft nunca explicitou onde estão essas caches, ou o que é que elas fazem. para todos os efeitos, o CPU até pode ter caches cortadas face aos CPUs de mesa, e este acréscimo de cache ser todo ele devido ao sistema de gestão de Entrada e Saida de dados (O Velocity Engine).

No entanto, não queria deixar de registar aqui esta possibilidade, uma vez que ela seria, pelo conhecido até ao momento, a situação que melhor permitiria lidar com as variações de largura de banda na memória.

Note-se que esta gestão basicamente permitiria que CPU e GPU acedessem em ciclos alternados à RAM sem penalização.



error: Conteúdo protegido