SciML / SciML/DiffEqGPU.jl

Track pre-existing x86 CPU CI blockers in BFloat16s and SymbolicUtils

Open
#531 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Julia
Stars
327
Forks
42
Avg merge
14h 13m
Merged PRs (30d)
34

Description

The new 32-bit CPU lane fails before running DiffEqGPU tests because dependency precompilation fails in BFloat16s 0.6.1 and SymbolicUtils 4.46.1. The same failures occur with unmodified DiffEqGPU master (f1d1f81); they are independent of the persistent-kernel performance changes.

Observed CI: https://github.com/SciML/DiffEqGPU.jl/actions/runs/34198106601/job/101970397847 . This issue tracks the blockers separately from https://github.com/SciML/DiffEqGPU.jl/pull/529 .

BFloat16s / Julia i686 code generation

A fresh environment containing only BFloat16s 0.6.1 fails on using BFloat16s, including with --compiled-modules=no. The failure reduces further to this script with no external packages:

using InteractiveUtils
versioninfo()
f(x::Int64) = Base.sitofp(Core.BFloat16, x)
precompile(f, (Int64,))

julia +1.12~x86 bfloat-core-mwe.jl exits 134:

LLVM ERROR: Do not know how to soft promote this operator's result!
signal 6 (-6): Aborted

Environment:

Julia Version 1.12.7
Commit 6d172b025e4 (2026-08-15 08:05 UTC)
OS: Linux (i686-linux-gnu)
CPU: 128 × AMD EPYC 7502 32-Core Processor
WORD_SIZE: 32
LLVM: libLLVM-18.1.7 (ORCJIT, znver2)
Threads: 1 default, 1 interactive, 1 GC

The identical script passes on Julia 1.10.11 i686 and Julia 1.12.7 x64; Julia 1.11.9 i686 raises StackOverflowError. This is a Julia release-family comparison, not a Julia source bisect.

An adjacent-commit runtime test identifies the BFloat16s change that exposes the compiler problem:

A local diagnostic only that removes i686 from BFloat16s' native storage/arithmetic support restores import and passes Float32(BFloat16(1.5) + BFloat16(2.0)) == 3.5f0. This is neither a submitted upstream fix nor a fully validated production patch. No external issue or PR was filed as part of this investigation.

Existing https://github.com/JuliaMath/BFloat16s.jl/pull/126 addresses a different AVX512 vector-conversion problem tracked by https://github.com/JuliaLang/julia/issues/62666 . This reproducer is scalar i686 on znver2, and that workaround is disabled for Julia >=1.12.7.

SymbolicUtils hash truncation

A separately instantiated environment containing only SymbolicUtils 4.46.1 reproduces the exact CI failure with julia +1.12~x86 --project=... -e 'using SymbolicUtils':

InexactError: trunc(UInt32, 0x8b4142914d506ccb)
hash_bsimpl ... src/hashconsing.jl:556

The bare FNTYPE_SEED UInt64 literal widens the XOR result and cannot fit a UInt32 hash field. Source history traces that constant to https://github.com/JuliaSymbolics/SymbolicUtils.jl/commit/2b68bfb5d518cfa8a7fb633403e1fce531c55ee7 ; this is source attribution, not a historical runtime bisect.

An upstream fix already exists: https://github.com/JuliaSymbolics/SymbolicUtils.jl/pull/1048 , commit https://github.com/JuliaSymbolics/SymbolicUtils.jl/commit/510356e9e1f0d88327dbb96574aed44a2c2a02fb . Other 32-bit hash seeds were addressed by https://github.com/JuliaSymbolics/SymbolicUtils.jl/pull/1060 . Both are included in https://github.com/JuliaSymbolics/SymbolicUtils.jl/releases/tag/v4.46.3 . The later FNTYPE_SEED PR https://github.com/JuliaSymbolics/SymbolicUtils.jl/pull/895 adds no further tree change because that correction was already present.

Fresh-environment validation of SymbolicUtils 4.46.3 on Julia 1.12.7 i686 completed successfully. The same script that failed with 4.46.1 imports SymbolicUtils, constructs @syms f(::Real), and calls hash(f); exit status 0:

192763.9 ms  ✓ SymbolicUtils
2 dependencies successfully precompiled in 216 seconds. 76 already precompiled.
f = f
hash(f) = 0x8bcd499b

This verifies the SymbolicUtils blocker is fixed in 4.46.3. Resolving that dependency alone does not resolve the independent BFloat16s blocker.

AI investigation: Codex (version unknown; exact model ID unknown). Local session ID: 01a07fcc-1c4f-7ee3-9a1e-51eaab7df293; no shareable conversation URL exposed.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the linked CI job and reproduce the minimal BFloat16s script on Julia 1.12.7 i686, then compare the dependency environments described in the issue. Verify SymbolicUtils 4.46.3 against 4.46.1 and investigate the separate BFloat16s failure without conflating it with PR #529. Done means the x86 CI lane can precompile dependencies and reach the DiffEqGPU tests, or the remaining external blocker is clearly documented.

Written by the indexing model from the issue text.

Assessment

Tech stack
julia
Domain
build-system, ci-cd
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.