🚀 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