Case-sensitive core-name check in #6027 disables AMD AVX-512 block-size override
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:
- Guard in kernel/setparam-ref.c:
"cooperlake","skylakex","sapphirerapids". - Names in driver/others/dynamic.c:
"Cooperlake","SkylakeX","SapphireRapids".
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
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của OpenMathLib/OpenBLAS
-
New releaseĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 12/100
OpenMathLib/OpenBLAS#6189 · 10 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Build fails with NVHPC 26.9Đang mởBug in other software
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 18/100
OpenMathLib/OpenBLAS#6173 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
OpenMathLib/OpenBLAS#6152 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 28/100
OpenMathLib/OpenBLAS#6151 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
VORTEXM4: s2_usable() runs RDSVL before the SME2 check (SIGILL without SME)Có thể đã có người làm @tesch1 đã nhận 8 ngày trước. Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 25/100
OpenMathLib/OpenBLAS#6150 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của OpenMathLib/OpenBLAS
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 70/100
ly05010419/MacNativeGames#1340 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 1 ngày
-
area:stdlib bug found-by:cold-read kind:bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
InauguralSystems/EigenScript#2197 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Hide the cursorĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 63/100
seedds/nxnative#675 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 2 ngày