12 pontos por GN⁺ 2024-11-06 | 6 comentários | Compartilhar no WhatsApp
  • As linguagens de programação modernas de alto nível e os compiladores avançados de hoje simplificam bastante o desenvolvimento de software e reduzem custos, mas a ineficiência das APIs tende a ocultar os recursos de desempenho do hardware moderno
  • Segundo os desenvolvedores do FFmpeg, o uso de código em assembly pode melhorar o desempenho de 3x a 94x, dependendo da carga de trabalho
  • Para acelerar funções específicas dentro do FFmpeg, foram criados caminhos de código otimizados com o conjunto de instruções AVX-512, o que permitiu atingir desempenho muito superior ao da implementação padrão
  • O AVX-512 usa registradores de 512 bits e pode processar 16 FLOPs de precisão simples ou 8 FLOPs de dupla precisão em uma única operação, permitindo processamento paralelo de grandes volumes de dados
  • De acordo com os resultados de benchmark, o novo caminho de código AVX-512 escrito manualmente é significativamente mais rápido do que o código C de referência e outras implementações com conjuntos SIMD inferiores, como AVX2 e SSE3
  • Esse desenvolvimento é especialmente útil para usuários que executam em hardware com suporte a AVX-512, permitindo processar conteúdo de mídia com muito mais eficiência
  • No entanto, a Intel desativou o AVX-512 nos processadores Core de 12ª, 13ª e 14ª gerações, impedindo que os donos dessas CPUs usem esse recurso
  • Em contrapartida, os CPUs da série Ryzen 9000 da AMD contam com FPU AVX-512 totalmente ativada, então os proprietários desses processadores podem aproveitar os ganhos do FFmpeg
  • Infelizmente, devido à complexidade e à natureza especializada do AVX-512, essas otimizações geralmente ficam restritas a aplicações em que o desempenho é crítico e exigem conhecimento especializado em programação de baixo nível e microarquitetura de processadores
    ( Este conteúdo foi extraído de FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code, da Tom's Hardware )

6 comentários

 
gurugio 2024-11-08

Como alguém que já fez esse tipo de trabalho por um tempo, posso dizer que, antes de tudo, esse 94 é clickbait.
Como comentaram nas respostas, a grande diferença de desempenho apareceu por causa da diferença entre código escalar e vetorial.
Mas a maioria dos codecs comerciais faz otimização com código em assembly.
Dizer que "a maior parte do código em C é compilada para código assembly otimizado" está correto, mas, para desenvolver produtos comerciais, é preciso ir além desse nível da maioria. Isso é ainda mais importante especialmente no lado de sistemas embarcados.

 
GN⁺ 2024-11-06
Comentários no Hacker News
  • A alegação de que o desempenho melhorou 94x em um filtro específico do FFmpeg é enganosa. A maioria dos usuários já estava usando AVX/SSE, então não havia necessidade de otimização no código C
    • Os principais consumidores de CPU no FFmpeg são codificação e decodificação, e esta melhoria não afeta isso
  • Não é uma comparação entre código assembly escrito à mão e código que não foi, mas entre código escalar e código vetorial
    • Se o código C for escrito usando intrínsecos AVX, é possível obter ganhos de velocidade semelhantes mesmo sem código assembly
  • Em casos específicos, código assembly escrito à mão pode ser vantajoso
    • Decodificadores de vídeo contêm loops muito apertados, então código assembly é necessário para manter a consistência do desempenho
  • A equipe do FFmpeg proíbe o uso de intrínsecos e exige que todo código específico de plataforma seja escrito em assembly
    • Código assembly sempre será mais rápido com esforço suficiente, mas intrínsecos podem alcançar um desempenho muito próximo com bem menos esforço
  • O ganho de 94x é uma otimização do dav1d e pode ser usada em outros programas, não apenas no FFmpeg
    • Há um pedido por otimização para RISC-V (64 bits), o que é uma boa oportunidade para quem tiver interesse
  • Mike Pall, do LuaJIT, já explicou as vantagens de escrever código assembly
  • Em um microbenchmark, uma única função ficou 94x mais rápida do que o código C
  • A Intel desativou o AVX-512 nos processadores Core de 12ª, 13ª e 14ª gerações
    • Não foi possível encontrar um motivo claro para isso
  • Antes de resolver problemas de desempenho, muitas vezes não se faz trabalho suficiente para identificar os gargalos
    • A maior parte do código C é compilada em código assembly ótimo
  • A causa do ganho de desempenho não é o código assembly escrito à mão, mas o uso de instruções SIMD AVX-512
    • Eu gostaria de ver uma comparação com a vetorização AVX-512 do gcc
 
maclier 2024-11-06

Nova vulnerabilidade Downfall AVX2/AVX-512 da Intel e seu enorme impacto no desempenho

https://tuxcare.com/ko/blog/…

 
cosine20 2024-11-08

Ah, então foi por isso que a Intel descontinuou o AVX-512.

 
shlee1503 2024-11-10

Pelo que sei, não foi exatamente por esse motivo; como os E-cores não suportam AVX-512, acredito que isso tenha sido bloqueado por software.
Os P-cores tinham suporte não oficial a AVX-512.

 
cosine20 2024-11-11

Entendi. Obrigado por avisar :)