2.0.19
Fixes
- OpenCL: fix ~2x fp32 throughput undercount on Apple. The compute
kernels used themad()builtin, which the OpenCL spec permits (but does
not require) to fuse into hardware FMA. Apple's deprecated CL-on-Metal 1.2
compiler never lowers it, silently halving measured fp32 throughput
(2.2 → 4.5 TFLOPS on M1 Pro). Rewritten as a plain contracted expression
((y*x)+y), which forces the compiler to choose between fusing or
violating-cl-mad-enable— all vendors honor this. OpenCL fp32 now
matches Metal on Apple (within 1–2%); other platforms are unaffected
(mad()already fused there). - CUDA/ROCm: mark global-bandwidth kernel pointers
__restrict__. The
in/outpointer pair had no aliasing annotation, so the compiler
couldn't batch loads ahead of the trailing store and NVIDIA couldn't take
the read-onlyld.global.ncpath. These were the only kernels in either
backend with two pointer parameters, so the fix is contained to them. - CPU: fix GCC build failure on the crypto ISA extensions (
#189).
GCC declares AES/SHA-256 NEON intrinsics under a single umbrella
+cryptotarget attribute, so a translation unit built with only the
granular+aesor+sha2flag failed to inline them ("target specific
option mismatch"). GCC now gets+crypto(+crypto+sha3for the SHA-512
TU); Clang keeps the granular flags, since+cryptois deprecated there.
CI
- Added a GCC-only build job to catch this class of compiler-specific
regression going forward.
Full Changelog: 2.0.18...2.0.19