Ninguém sabe exatamente como funciona o cache dinâmico do M3, mas tenho uma teoria
Durante o evento “Scary Fast” da Apple , um recurso chamou minha atenção como nenhum outro: cache dinâmico. Provavelmente, como a maioria das pessoas que assistiram à apresentação, tive uma reação: “Como a alocação de memória aumenta o desempenho?”
A Apple baseou a estreia do novo chip M3 em um recurso “fundamental” que chama de cache dinâmico para GPU. A explicação simplificada da Apple não deixa claro exatamente o que o cache dinâmico faz, muito menos como melhora o desempenho da GPU no M3.
Pesquisei profundamente as arquiteturas típicas de GPU e enviei algumas perguntas diretas para descobrir o que exatamente é o cache dinâmico. Aqui está minha melhor compreensão do que é, sem dúvida, o recurso tecnicamente mais denso que a Apple já lançou em uma marca.
O que exatamente é cache dinâmico?
O cache dinâmico é um recurso que permite que os chips M3 usem apenas a quantidade precisa de memória necessária para uma tarefa específica. Veja como a Apple descreve isso no comunicado de imprensa oficial: “O cache dinâmico, ao contrário das GPUs tradicionais, aloca o uso de memória local no hardware em tempo real. Com o Cache Dinâmico, apenas a quantidade exata de memória necessária é usada para cada tarefa. Esta é uma inovação no setor, transparente para os desenvolvedores e a base da nova arquitetura de GPU. Ele aumenta drasticamente a utilização média da GPU, o que aumenta significativamente o desempenho dos aplicativos e jogos profissionais mais exigentes.”
No estilo típico da Apple, muitos aspectos técnicos são intencionalmente obscurecidos para focar no resultado. Há apenas o suficiente para entender a essência, sem revelar o segredo ou confundir o público com jargão técnico. Mas a conclusão geral parece ser que o cache dinâmico permite que a GPU tenha uma alocação de memória mais eficiente. Bastante simples, certo? Bem, ainda não está exatamente claro como a alocação de memória “aumenta a utilização média” ou “aumenta significativamente o desempenho”.
Para tentar entender o cache dinâmico, precisamos dar um passo atrás para examinar como as GPUs funcionam. Ao contrário das CPUs, as GPUs são excelentes no tratamento de cargas de trabalho massivas em paralelo. Essas cargas de trabalho são chamadas de shaders, que são os programas que a GPU executa. Para utilizar uma GPU de maneira eficaz, os programas precisam executar vários shaders ao mesmo tempo. Você deseja usar o máximo possível de núcleos disponíveis.
Isso leva a um efeito que a Nvidia chama de “cauda”. Muitos shaders são executados ao mesmo tempo e, em seguida, há uma queda na utilização enquanto mais shaders são enviados para serem executados em threads (ou, mais precisamente, blocos de threads em uma GPU). Este efeito foi refletido na apresentação da Apple quando explicou o Cache Dinâmico, à medida que a utilização da GPU aumentou antes de atingir o nível mínimo.
Como isso entra na memória? As funções em sua GPU leem instruções da memória e gravam a saída da função na memória. Muitas funções também precisarão acessar a memória várias vezes durante a execução. Ao contrário de uma CPU onde a latência de memória através de RAM e cache é extremamente importante devido ao baixo nível de funções paralelas, a latência de memória em uma GPU é mais fácil de esconder. Esses são processadores altamente paralelos; portanto, se algumas funções estiverem vasculhando a memória, outras poderão estar em execução.
Isso funciona quando todos os shaders são fáceis de executar, mas cargas de trabalho exigentes terão shaders muito complexos. Quando esses shaders forem programados para serem executados, a memória necessária para executá-los será alocada, mesmo que não seja necessária. A GPU está particionando muitos de seus recursos em uma tarefa complexa, mesmo que esses recursos sejam desperdiçados. Parece que o cache dinâmico é a tentativa da Apple de utilizar de forma mais eficaz os recursos disponíveis para a GPU, garantindo que essas tarefas complexas levem apenas o que precisam.
Isso deveria, em teoria, aumentar a utilização média da GPU, permitindo que mais tarefas fossem executadas ao mesmo tempo, em vez de ter um conjunto menor de tarefas exigentes devorando todos os recursos disponíveis para a GPU. A explicação da Apple concentra-se primeiro na memória, fazendo parecer que a alocação de memória por si só aumenta o desempenho. Pelo que entendi, parece que a alocação eficiente permite que mais shaders sejam executados ao mesmo tempo, o que levaria a um aumento na utilização e no desempenho.
Usado vs. alocado
Um aspecto importante que é fundamental para entender minha tentativa de explicação do cache dinâmico é como os shaders se ramificam. Os programas que sua GPU executa nem sempre são estáticos. Eles podem mudar dependendo de diferentes condições, o que é especialmente verdadeiro em shaders grandes e complexos, como os necessários para traçado de raio. Esses shaders condicionais precisam alocar recursos para o pior cenário possível, o que significa que alguns recursos podem ser desperdiçados.
Veja como o Unity explica os shaders de ramificação dinâmica em sua documentação: “Para qualquer tipo de ramificação dinâmica, a GPU deve alocar espaço de registro para o pior caso. Se uma ramificação for muito mais cara que a outra, isso significa que a GPU desperdiça espaço de registro. Isso pode levar a menos invocações do programa shader em paralelo, o que reduz o desempenho.”
Parece que a Apple está visando esse tipo de ramificação com cache dinâmico, permitindo que a GPU use apenas os recursos necessários, em vez de desperdiçá-los. É possível que o recurso tenha implicações em outros lugares, mas não está claro onde e quando o cache dinâmico entra em ação enquanto uma GPU está executando suas tarefas.
Ainda uma caixa preta
Claro, preciso observar que tudo isso é apenas meu entendimento, remendado a partir de como as GPUs funcionam tradicionalmente e do que a Apple declarou oficialmente. A Apple pode eventualmente divulgar mais informações sobre como tudo funciona, mas, em última análise, as minúcias técnicas do cache dinâmico não importam se a Apple for, de fato, capaz de melhorar a utilização e o desempenho da GPU.
No final das contas, Dynamic Caching é um termo comercializável para um recurso que se aprofunda na arquitetura de uma GPU. Tentar entender isso sem ser alguém que projeta GPUs inevitavelmente levará a equívocos e explicações redutivas. Em teoria, a Apple poderia simplesmente ter rejeitado a marca e deixado a arquitetura falar por si.
Se você estava procurando uma visão mais aprofundada do que o cache dinâmico poderia estar fazendo na GPU do M3, agora você tem uma explicação possível. O que é importante é o desempenho do produto final, e não teremos que esperar muito até que os primeiros dispositivos M3 da Apple estejam disponíveis ao público para que todos nós possamos descobrir. Mas com base nas afirmações de desempenho e nas demonstrações que vimos até agora, certamente parece promissor.