No contexto: A Apple está mantendo o funcionamento interno da família de processadores M1 em segredo do público, mas desenvolvedores dedicados fizeram 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 eu encontrei um capricho no pipeline de renderização da GPU do M1. Ele estava renderizando uma geometria 3D cada vez mais complicada e, finalmente, atingiu um coelho que causou a falha da GPU.
Basicamente, e lembre-se de 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 SoC da série A do iPhone, com o qual compartilha um ancestral, corta cantos para preservar a eficiência.
Em vez de renderizar diretamente no buffer de quadros 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 leva um bloco de cada vez.
O ladrilho resolve o problema de não ter recursos de memória suficientes, mas para reposicionar os ladrilhos 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. Olhe para o primeiro coelho, acima.
Em uma das apresentações da Apple, é explicado que quando o buffer está cheio, a GPU gera uma renderização parcial, ou seja, metade do coelho. No software da Apple, o buffer em questão é chamado buffer de parâmetroum nome aparentemente retirado da documentação do PowerVR da Imagination.
Imaginação é uma empresa sediada no Reino Unido que, como a Arm, projeta processadores que licencia para outras empresas. A Apple assinou um acordo com a empresa no início de 2020 que permite à Apple licenciar uma ampla gama de sua propriedade intelectual. É claro que o M1, lançado 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 completo (mas com uma dúzia de etapas extras, é claro).
Mas esta renderização ainda Não é bem correto. 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, com o último se comportando 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 da Rosenzweig para o M1 que supera todos esses obstáculos para renderizar uma imagem – é como a GPU funciona. Sua arquitetura pode não ter sido projetada com renderização 3D em mente, mas apesar disso, a Apple a transformou em algo que pode competir com as últimas GPUs discretas. se você não superá-los, como a Apple afirma. É genial.
Para uma explicação mais detalhada (e tecnicamente precisa) da renderização de coelhos e outras explorações no M1, não deixe de conferir blog de rosenzweig e ele asahi-linux site web.
Crédito do cabeçalho: alvenaria