Apelo técnico de um desenvolvedor do Anukari à Apple
(anukari.com)- O Anukari, simulador de áudio em tempo real com GPU, explica o problema de não conseguir garantir desempenho previsível em dispositivos macOS com Apple Silicon e pede uma conexão direta com a equipe do Apple Metal
- O Anukari é um sintetizador de áudio baseado em física que precisa integrar centenas de objetos na GPU a cada bloco de buffer de áudio e depende totalmente do desempenho de ALU da GPU
- Como a lógica automática de ajuste de energia/desempenho do macOS não reconhece bem essa carga de trabalho especial de áudio, o clock da GPU permanece baixo, causando queda de desempenho e interrupções no áudio
- Para resolver isso, foi introduzida a estratégia de "waste makes haste", com um spin kernel que engana a GPU gerando carga falsa, mas a chance de falha aumenta em Macs mais potentes a partir do M1
- Como solução, propõe-se introduzir reconhecimento em tempo real na fila de comandos da GPU ou estender o conceito de Audio Workgroup ao Metal, entre outras medidas
O que é o Anukari?
- Anukari é um sintetizador de áudio em tempo real baseado em física 3D que gera áudio calculando grandes modelos de massa-mola na GPU
- É usado em estações de trabalho de áudio (DAW) no formato AudioUnit/VST3 e solicita cálculos à GPU por unidade de buffer de áudio
- O processamento é focado em computação, não em memória (= ALU), e usa threadgroup memory da GPU para obter processamento rápido em nível de cache L1
A essência do problema de desempenho
- O macOS ajusta automaticamente o clock da GPU com foco em eficiência energética e reduz o clock quando detecta baixa carga de GPU
- Como o Anukari repete tarefas curtas, densas e em tempo real, o macOS não reconhece corretamente a carga da GPU
- Isso impede que se obtenha o desempenho necessário para atender às restrições de tempo real
Evidências e testes
- A diferença de clock entre estados de desempenho foi confirmada diretamente com o Metal Profiler do Apple Xcode
- No estado de Maximum performance, tudo funciona de forma suave, mas no estado Minimum ocorrem falhas e cortes no áudio
Estratégia "waste makes haste"
- Para forçar clocks mais altos na GPU, o Anukari executa em paralelo trabalhos de GPU para gerar carga com spin loop
- Essa estratégia funciona no M1, mas em chips Pro/Max ela pode falhar porque a carga se distribui por outros núcleos da GPU
Soluções propostas
- Estender o Audio Workgroup até a GPU para que a carga seja reconhecida como workload de tempo real
- Adicionar à API Metal um sinalizador de sensibilidade a tempo real
- (Idealmente) Receber orientação caso já exista um método para isso
Outras alternativas analisadas e limitações
- O Game Mode é baseado no processo inteiro, então não pode ser aplicado ao Anukari em formato de plugin
- No Windows não há esse problema, possivelmente devido a uma gestão de clock mais flexível ou a maior controle de configuração
- A execução multi-kernel com hedge é inadequada por aumentar a latência de áudio e criar problemas de sincronização de estado
- A otimização do código de GPU já foi levada ao limite (uso de FP16, alinhamento de grupos SIMD, otimização de ALU etc.)
Por que GPU e não CPU?
- O Anukari executa cálculos físicos para 768~1024 objetos 48.000 vezes por segundo, com suporte a até 16 vozes de polifonia
- A CPU não consegue lidar com isso nem em volume de computação nem em paralelismo
- As capacidades da GPU em ALU, controle de cache L1 e controle paralelo com
threadgroup_barriersão absolutamente necessárias
Por que a Apple deveria se importar com esse problema?
- O Anukari é um produto de nicho de uma pequena startup, mas tem uma base de usuários apaixonada e atrai o interesse de artistas renomados
- O Apple Silicon já tem desempenho suficiente para essa carga de trabalho, e bastaria mudar a política de ajuste de clock para resolver o problema
Por que uma GPU Audio API não é viável?
- O Anukari não é DSP tradicional, mas sim um integrador numérico de equações diferenciais, mais próximo de um motor de física de jogos, então não se encaixa no nível de abstração de GPU Audio
- Ele usa a API Metal diretamente, e otimização extrema específica do domínio é indispensável
Resumo do pedido: aguarda uma resposta de engenheiros da Apple para adicionar ao Metal API ou à política de ajuste de desempenho do macOS um mecanismo de reconhecimento de processamento em tempo real
1 comentários
Opiniões do Hacker News
Olá pessoal, tive uma conversa muito produtiva com a pessoa certa da equipe Metal. Obrigado por ajudarem a chamar a atenção da Apple. Eu realmente não esperava receber tanto apoio
Tenho curiosidade sobre a origem do nome Anukari
Tive experiência com duas empresas conhecidas que tinham aplicativos muito famosos na Apple App Store
O profiler do Metal tem um recurso muito útil: é possível selecionar o "estado de desempenho" do Metal enquanto se faz o profiling do aplicativo. Isso não pode ser configurado fora do profiler
O problema de expor uma API para isso é que desenvolvedores demais acabariam forçando sempre o estado máximo de desempenho. Não sei se existe uma boa forma de evitar isso e, ao mesmo tempo, manter a API
A melhor forma de resolver esse problema:
Não deixem passar o link jogado no penúltimo parágrafo. É um link para um demo feito por Mick Gordon. @anukarimusic responde a isso
Além disso, o Anukari deveria lançar um pacote de sons do Mick Gordon e dividir a receita com ele. Esse cara está criando coisas incríveis. O demo dele é excelente. Quando se tem uma ferramenta poderosa, colaborar com artistas é um bom negócio e faz bem para o mundo. Se você gosta do Mick Gordon. Eu gosto
Eu não preciso deste app, mas ele é muito legal. Apps assim trazem de volta a "diversão" para a computação. Não que hoje não haja diversão, mas isso me lembra os velhos tempos, quando havia mais programas gráficos e experimentais circulando por aí. Até mesmo a demoscene