head 1.1; access; symbols; locks; strict; comment @// @; 1.1 date 2026.11.04.17.07.04; author wiz; state Exp; branches; next ; commitid EB0QPj3NthnIla2H; desc @@ 1.1 log @ggml: update to 0.29.0. ggml v0.29.0 adds an OCP FP8 E4M3 tensor type, a new ggml_flash_attn_ext_rows op where each query slice attends to its own list of K/V rows, a batched tensor copy API, and initial support for multi-node tensor parallelism through a new multi-process communicator interface. Core improvements include bounding tensor views by the bytes their strides reach, zero-copy GGUF export of host-buffer tensors, and vm_allocate-based allocations on Apple platforms. Performance work spans all major backends: new SVE kernels in the CPU backend, DPAS flash attention for quantized KV in SYCL, fused MoE MMQ in CUDA, faster MXFP4 mat-vec in Metal, split-K tuning in Vulkan, and a large expansion of quantized GEMM/GEMV coverage in OpenCL. The Hexagon backend gains support for several new ops, including the lightning indexer, top-k mask, conv2d and upscale. @ text @$NetBSD$ error: 'isnan' was not declared in this scope; did you mean 'std::isnan'? error: 'signbit' was not declared in this scope; did you mean 'std::signbit'? https://github.com/ggml-org/ggml/issues/1681 --- tests/test-quantize-fns.cpp.orig 2026-11-04 17:03:17.251240863 +0000 +++ tests/test-quantize-fns.cpp @@@@ -177,10 +177,10 @@@@ static uint8_t fp32_to_f8_e4m3_ref(float value) { }; static uint8_t fp32_to_f8_e4m3_ref(float value) { - if (isnan(value)) { + if (std::isnan(value)) { return 0x7F; } - const uint8_t sign = signbit(value) ? 0x80 : 0; + const uint8_t sign = std::signbit(value) ? 0x80 : 0; const double magnitude = fabs((double) value); if (magnitude >= F8_E4M3_VALUES[126]) { return sign | 126; @@@@ -222,8 +222,8 @@@@ static int test_f8_e4m3(bool verbose) { for (int i = 0; i < 256; ++i) { const bool is_nan = (i & 0x7F) == 0x7F; const float expected = is_nan ? NAN : copysignf(F8_E4M3_VALUES[i & 0x7F], i & 0x80 ? -1.0f : 1.0f); - const bool decode_failed = is_nan ? !isnan(decoded[i]) - : decoded[i] != expected || (expected == 0.0f && signbit(decoded[i]) != signbit(expected)); + const bool decode_failed = is_nan ? !std::isnan(decoded[i]) + : decoded[i] != expected || (expected == 0.0f && std::signbit(decoded[i]) != std::signbit(expected)); const bool encode_failed = !is_nan && roundtrip[i] != encoded[i]; if (decode_failed || encode_failed) { num_failed++; @@@@ -293,7 +293,7 @@@@ static int test_f8_e4m3(bool verbose) { x[0] = x.back() = code; float actual; traits_cpu->vec_dot(x.size(), &actual, 0, x.data(), 0, y.data(), 0, 1); - num_failed += !isnan(actual); + num_failed += !std::isnan(actual); } if (verbose || num_failed) { @