Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở Phù hợp với người mới
#6,192 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
72/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c
Lĩnh vực
performance

Hướng nghiên cứu

Bắt đầu với điều kiện bảo vệ trong kernel/setparam-ref.c gần dòng 2135 và so sánh các chuỗi tên core với các tên được trả về trong driver/others/dynamic.c gần dòng 1025. Issue cung cấp một bản sửa tối thiểu và cách tái hiện bằng block_probe.c; hãy biên dịch và chạy với OPENBLAS_CORETYPE=SkylakeX và Haswell. Công việc hoàn tất khi kích thước block của SkylakeX được khôi phục và các giá trị Haswell vẫn không thay đổi.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
C
Star
7.7k
Fork
1.7k
Merge trung bình
1 ngày 8 giờ
Pull request đã merge (30 ngày)
60

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của OpenMathLib/OpenBLAS

Tất cả issue của OpenMathLib/OpenBLAS

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.