Dentro do Apple M1 há uma GPU incrivelmente peculiar
É uma espécie de cruzamento entre hardware de desktop e móvel
No contexto: a Apple mantém o funcionamento interno da família de processadores M1 em segredo do público, mas desenvolvedores dedicados têm feito engenharia reversa para criar drivers de código aberto e uma distribuição Linux, Asahi Linux, para Macs M1. No processo, eles descobriram alguns recursos interessantes.
Em seus esforços para desenvolver um driver gráfico de código aberto para o M1, Alyssa Rosenzweig recentemente encontrou uma peculiaridade no pipeline de renderização da GPU do M1. Ela estava renderizando geometrias 3D cada vez mais complicadas e, eventualmente, chegou a um coelho que acabou com o bug da GPU.
Basicamente - e observe que isso e tudo o mais que estou prestes a dizer é uma simplificação excessiva - o problema começa com o acesso ruim da GPU à memória. É uma GPU poderosa, mas, como o iPhone SoC da série A, com o qual compartilha um ancestral, usa atalhos para preservar a eficiência.
Em vez de renderizar diretamente no framebuffer como uma GPU discreta faria, o M1 faz duas passagens de um quadro: o primeiro encontra os vértices e o segundo faz todo o resto. Obviamente, a segunda passagem é muito mais intensa, então entre as passagens, o hardware dedicado segmenta o quadro em blocos (mini-quadros, basicamente) e a segunda passagem é feita um bloco de cada vez.
O ladrilho resolve o problema de não ter recursos de memória suficientes, mas para poder juntar os ladrilhos novamente em um quadro posteriormente, a GPU precisa manter um buffer de todos os dados por vértice. Rosenzweig descobriu que sempre que esse buffer transbordava, a renderização não funcionava. Veja o primeiro coelho, acima.
Em uma das apresentações da Apple, é explicado que quando o buffer está cheio, a GPU produz uma renderização parcial - ou seja, metade do coelho. No software da Apple, o buffer em questão é chamado de buffer de parâmetro, um nome aparentemente tirado da documentação do PowerVR da Imagination.
A Imagination é uma empresa sediada no Reino Unido que, como a Arm, projeta processadores que licencia para outras empresas. A Apple fechou um acordo com a empresa no início de 2020 que permite que a Apple licencie uma ampla gama de sua propriedade intelectual. É claro que o M1, que foi lançado no mercado no final de 2020, usa sua arquitetura de GPU PowerVR como uma espécie de base para sua GPU.
De qualquer forma, de volta ao coelho. Como você deve ter adivinhado, as renderizações parciais podem ser adicionadas para criar uma renderização do coelho inteiro (mas com uma dúzia de etapas extras, é claro).
Mas essa renderização ainda não está bem. Você pode ver artefatos no pé do coelho. Acontece que isso ocorre porque diferentes partes do quadro são divididas entre um buffer de cores e um buffer de profundidade, e o último se comporta mal quando carregado com renderizações parciais.
Uma configuração de engenharia reversa do driver da Apple corrige o problema e você pode finalmente renderizar o coelho (abaixo).
Não é apenas o driver gráfico de código aberto de Rosenzweig para o M1 que pula por todos esses aros para renderizar uma imagem: é exatamente assim que a GPU funciona. Sua arquitetura provavelmente não foi projetada com renderização 3D em mente, mas, apesar disso, a Apple a transformou em algo que pode rivalizar com as últimas GPUs discretas, se não superá-las, como a Apple afirma. É legal.
Para uma explicação mais detalhada (e tecnicamente precisa - em inglês) da renderização do coelho, e para outras explorações no M1, não deixe de conferir o blog de Rosenzweig e o site do Asahi Linux.




Comentários
Postar um comentário