Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Case-sensitive core-name check in #6027 disables AMD AVX-512 block-size override

Aperta Adatta ai principianti
#6,192 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
c
Ambito
performance

Direzione di ricerca

Inizia dalla guardia in kernel/setparam-ref.c intorno alla riga 2135 e confronta le sue stringhe dei nomi dei core con i nomi restituiti in driver/others/dynamic.c intorno alla riga 1025. L’issue fornisce una correzione minima e una riproduzione con block_probe.c; compilala ed eseguila con OPENBLAS_CORETYPE=SkylakeX e Haswell. Il lavoro è completato quando le dimensioni dei blocchi di SkylakeX sono ripristinate e i valori di Haswell restano invariati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

The core-name guard added by #6027 uses case-sensitive strcmp against lowercase names, while gotoblas_corename() returns mixed-case names. Consequently, the AMD AVX-512 block-size override is skipped even for the intended cores.

This is still present in develop at 40fa0ead64f2:

This report concerns block-size initialization. Kernel selection still reports SkylakeX. I have not measured a performance regression or speedup.

Controlled native comparison

Host: AMD Ryzen 5 7500F (Zen 4), Windows 11 x64. GCC 16.2.0 from w64devkit 2.10.1; ILP64, DYNAMIC_ARCH, actual runtime thread count 1.

Three builds used the same source baseline, compiler and options:

  • A: #6027's first parent, 78501e395e86efdf9397234f162e9403b363616e.
  • B: A plus exactly #6027, equivalent to merge commit e5a25b7afa4f9d40916039ba34b753c6b70039a0.
  • C: B with only the three string literals corrected to their actual capitalization.
Build Haswell DGEMM P/Q SkylakeX DGEMM P/Q Haswell access violations / 26 cases
A 512 / 512 512 / 512 23 / 26
B 512 / 128 192 / 384 0 / 26
C 512 / 128 512 / 512 0 / 26

Thus #6027 fixes the Haswell crash in this experiment, while the capitalization correction separately restores the intended SkylakeX block sizes and preserves the Haswell fix.

SHA-256 comparison of 3,204 object files found only the five kernel/setparam_*.obj files changed in each transition. The test program object was identical across all three binaries. The only original source file changed was kernel/setparam-ref.c.

Minimal block-size reproduction

Save this as block_probe.c in the source root. It uses internal headers to observe initialization directly:

#include <stdio.h>
#include "common.h"
#include "cblas.h"
extern void gotoblas_dynamic_init(void);
int main(void) {
    gotoblas_dynamic_init();
    openblas_set_num_threads(1);
    printf("core=%s P=%d Q=%d threads=%d\n", openblas_get_corename(),
           gotoblas->dgemm_p, gotoblas->dgemm_q, openblas_get_num_threads());
    return 0;
}

From a clean source checkout at B, with w64devkit's bin on PATH, the options used in the experiment are below (PowerShell). Run libs and netlib sequentially:

$opts = @(
  'BINARY=64', 'DYNAMIC_ARCH=1',
  'DYNAMIC_LIST=PRESCOTT NEHALEM SANDYBRIDGE HASWELL SKYLAKEX',
  'TARGET=PRESCOTT', 'USE_THREAD=1', 'NUM_THREADS=64', 'USE_OPENMP=0',
  'NO_AFFINITY=1', 'NO_SHARED=1', 'NO_LAPACKE=1',
  'BUILD_SINGLE=1', 'BUILD_DOUBLE=1', 'INTERFACE64=1',
  'COMMON_OPT=-O2 -march=x86-64 -mtune=generic -fno-asynchronous-unwind-tables',
  'FCOMMON_OPT=-O2 -march=x86-64 -mtune=generic -fno-asynchronous-unwind-tables -frecursive -fdefault-integer-8 -fallow-argument-mismatch'
)
make -j8 libs @opts
make -j8 netlib @opts
gcc -O2 -march=x86-64 -fno-asynchronous-unwind-tables -I. -DDYNAMIC_ARCH -DBUILD_SINGLE=1 -DBUILD_DOUBLE=1 -DSMP_SERVER -DSMALL_MATRIX_OPT -DMS_ABI block_probe.c libopenblasp-r0.3.34.dev.a -lpthread -lm -o block_probe.exe
$env:OPENBLAS_NUM_THREADS = '1'
$env:OPENBLAS_CORETYPE = 'SkylakeX'
.\block_probe.exe
$env:OPENBLAS_CORETYPE = 'Haswell'
.\block_probe.exe

No OPENBLAS_L2_SIZE override was set for these two runs. The build used the C-translated LAPACK backend. The probe's feature macros must match the library build because it reads gotoblas_t.

On this host, B prints:

core=SkylakeX P=192 Q=384 threads=1
core=Haswell P=512 Q=128 threads=1

Apply the literal-only correction below, rebuild and relink with the same options. C prints:

core=SkylakeX P=512 Q=512 threads=1
core=Haswell P=512 Q=128 threads=1

This reduced probe was also compiled and run against all three experiment libraries.

Candidate correction
-      if (strcmp(gotoblas_corename(), "cooperlake") == 0 || strcmp(gotoblas_corename(), "skylakex") == 0 || strcmp(gotoblas_corename(), "sapphirerapids") == 0) {
+      if (strcmp(gotoblas_corename(), "Cooperlake") == 0 || strcmp(gotoblas_corename(), "SkylakeX") == 0 || strcmp(gotoblas_corename(), "SapphireRapids") == 0) {
Additional validation and scope

Each build ran 156 independent-process cases: six configurations (automatic, Haswell, Zen, SkylakeX, Sandybridge, and Haswell with L2 override 2048), each with DGEMM 256×K @ K×256 for K=128,160,176,256,300,340,512,1024 repeated three times, plus symmetric positive-definite DSYEVD at N=300 and 1240.

B and C both passed 156/156. DGEMM was checked against independent scalar dot products, and DSYEVD against an independently computed full AV−VΛ residual. Across passing cases of the three builds, maximum DGEMM absolute error was 1.43e-13 and maximum eigen residual relative to the matrix Frobenius norm was 1.77e-15 (rounded upward).

Automatic dispatch selected SkylakeX; Zen requests mapped to Haswell in this DYNAMIC_LIST. Cooperlake and SapphireRapids were not separate kernels in this build, so their capitalization mismatch is source evidence, not a claim of native testing for those kernels. This was a static native OpenBLAS comparison, not three rebuilt NumPy wheels. No performance claim is made.

Investigation, local patch preparation and test execution were assisted by Codex.

Lingua principale
C
Stelle
7.7k
Fork
1.7k
Merge medio
1g 8h
PR unite (30g)
60

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di OpenMathLib/OpenBLAS

Tutte le issue di OpenMathLib/OpenBLAS

Issue simili

Altre issue su C

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.