Hacker News
July 17, 20263 min read
Uma exploração sistemática de otimização de multiplicação de matrizes usando AVX2/FMA em C++ intrinsics, alcançando 63,5% do pico teórico de 134,4 GFLOPS em um AMD Ryzen 5 5500.
Este repositório contém o código fonte, resultados e análise de um estudo aprofundado sobre otimização de multiplicação de matrizes (GEMM) para precisão simples (FP32) em uma única núcleo da microarquitetura AMD Zen 3 . Foram testadas 28 configurações distintas (modelos MX01 a MX28) que combinam técnicas como:
O melhor modelo, MX24 , sustentou 85.30 GFLOPS , superando a implementação ingênua por um fator de 56,5× e igualando o desempenho de bibliotecas otimizadas como AMD AOCL e OpenBLAS.
Modelo Descrição GFLOPS % Pico MX24 4‑linhas + chain4 + B‑pack (BK=256) 85.30 63.5% MX22 4‑linhas + chain4 + B‑pack (BK=128) 84.10 62.6% MX23 4‑linhas + chain4 + B‑pack (BK=64) 82.93 61.7% MX16 4‑linhas + chain4 + alinhado (sem pack) 72.58 54.0% MX20 4‑linhas + chain4 + Bᵀ (transposta) 79.21 58.9% MX18 4‑linhas + chain4 + prefetch 79.75 59.3% ℹ️ O pico teórico é calculado como 2 portas FMA × 8 floats × 2 ops × 4,2 GHz = 134,4 GFLOPS .
Técnicas de Otimização Avaliadas Cache Blocking (Tiling)
zen3-gemm/ ├── README.md ├── src/ │ └── mx85.c # Código completo com todos os 28 modelos + benchmark ├── docs/ │ ├── artigo_en.tex # Artigo científico completo (LaTeX) │ └── resultados/ # Logs de saída do benchmark │ ├── mx85_benchmark.txt │ └── mx85_output8.txt └── build/ └── Makefile # (opcional) para compilação simples ⚙️ Compilação e Execução Pré‑requisitos Processador com suporte a AVX2 e FMA (ex: AMD Zen, Intel Haswell ou superior) Sistema operacional Windows (10/11) ou Linux Compilador GCC 12.2+ (MinGW‑w64 no Windows) ou equivalente com suporte a intrinsics AVX2 Memória suficiente para matrizes 2048×2048 (≈ 48 MB para as três matrizes) Compilar com GCC (Windows/MinGW ou Linux) No diretório src/ , execute:
gcc -O3 -mavx2 -mfma -march=native -funroll-loops -frename-registers -o mx85.exe mx85.c Flags importantes:
Para testar apenas um modelo específico, você pode modificar a função main() para chamar diretamente a função desejada (ex: mx24(A, B, C, N) ). Ou, para matrizes de outros tamanhos, altere a constante N (linha ~230).
Abaixo estão todos os 28 modelos testados, com GFLOPS medidos e porcentagem do pico teórico.
Modelo Técnica GFLOPS Causa MX21 Stores não temporais 1.24 C é lido‑modificado‑escrito; cada store invalida a cache, forçando reloads da DRAM. MX26 8 linhas em registradores 12.24 Necessita 64 registradores YMM; 48 são spilled , dominando o tempo de execução. MX27 C‑in‑regs através de k‑block 9.13 Mantém acumuladores vivos por muitas iterações, aumentando pressão de registradores. MX09 BI=128, BK=256 8.38 O working set (128×256×4 = 128 KB) excede a L1, causando muitas misses. MX10 Chain6 14.26 Cadeia longa demais; falta de registradores força spilling excessivo. 🧪 Validação Todos os modelos foram validados contra uma implementação de referência (escolar ijk ). Os três melhores modelos (MX24, MX22, MX23) apresentaram erro máximo absoluto = 0.0 (bit‑idênticos), pois a ordem de acumulação é preservada. Os demais modelos apresentaram erros da ordem de 1e-6 , dentro do esperado para aritmética de ponto flutuante.
Se utilizar este trabalho em suas pesquisas, por favor cite o artigo associado:
@article { housl2025gemm , title = { 85.30 GFLOPS Single-Core FP32 Matrix Multiplication on AMD Zen 3 } , author = { Housl } , journal = { arXiv preprint } , year = { 2025 } } 🤝 Contribuições Contribuições são bem‑vindas! Sinta‑se à vontade para abrir issues ou pull requests com melhorias, novos modelos ou adaptações para outras arquiteturas.
##📄 Licença Este projeto está disponível sob a MIT License. Isso significa que você pode usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do software, desde que mantenha o aviso de direitos autorais e a permissão. Veja o arquivo LICENSE para os termos completos.
##📧 Contato e Autoria Autor: Lucas Lima Freitag
Afiliação: Universidade Federal do Rio Grande do Norte (UFRN)
Divirta‑se otimizando! 🚀 Se tiver dúvidas, sugestões ou quiser compartilhar seus próprios resultados, fique à vontade para entrar em contato
Read what's here, then head to the original whenever you're ready - never required.
Continue Reading on Hacker NewsA2UI + MCP Apps: Combining the best of declarative and custom agentic UIs
Google Developers July 22, 2026