85.3 GFlops: Optimizing FP32 Matrix Multiplication on a Single AMD Zen 3 Core

https://news.ycombinator.com/rss Hits: 9
Summary

🚀 85.30 GFLOPS Single‑Core FP32 GEMM on AMD Zen 3 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: Cache blocking (tiling) em três níveis (L1, L2, L3) Register blocking (2, 4 e 8 linhas) Encadeamento de instruções FMA (chain1 a chain6) Estratégias de empacotamento (sem packing, transposição, B‑pack on‑the‑fly) Alinhamento de memória (32 bytes) Prefetching por software Stores não temporais (stream stores) 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) BI, BJ, BK ajustados para manter os blocos dentro das caches L1 (32 KB), L2 (512 KB) e L3 (16 MB). O melhor BK encontrado foi 256, que maximiza a reutilização sem estourar a L2. Register Blocking Acumuladores de C mantidos em registradores YMM (16 disponíveis). 4 linhas proporcionou o melhor equilíbrio: apesar de exigir spill (16 registradores extras), a reutilização de A compensa o custo. FMA Chaining A latência da instrução FMA no Zen 3 é de 4 ciclos. O encadeamento chai...

First seen: 2026-07-20 20:16

Last seen: 2026-07-21 04:20