Repository navigation
CI: run the LibCI job on Ubuntu 26.04 - #15515
Conversation
sysrsbuild-gh-agentic
left a comment
There was a problem hiding this comment.
🤖 Auto-generated by rs-agentic bot\n\nCI change looks correct — job rename and runner bump are consistent, no needs: references broken.\n\nTwo pre-existing patterns worth watching on 26.04:\n1. libglfw3 package (Prebuild step): transitional package renamed to libglfw3t64 since 24.04 — may be dropped on 26.04, breaking the apt step. Consider libglfw3t64 or confirm availability on the 26.04 runner.\n2. pip install without venv (Prebuild + LibCI pytest steps): PEP 668 externally-managed-environment may block bare pip calls on 26.04. Consider --break-system-packages or a venv.
Wrong, it tun and pass |
Overview: Moves the system-nlohmann_json LibCI job from Ubuntu 24.04 to 26.04, so the unit tests run against a current toolchain instead of being untested there — and fixes the floating-point contraction that the move exposed.
Why
#15384 was a
test-types-posefailure that only appears on Ubuntu 26.04, and it was invisible to this repo's CI. Only two Linux jobs run the untagged unit-test suite:test-types-poseU22_SH_Py_CI--context "linux"U24_SH_Py_CI_SYS_JSON--context "linux"U22_U24_SH_Py_DDS_CI--tag ddsU-Latest_ST_Py_EX_CfUdoes not help: it has noLibCIstep, never passes-DBUILD_UNIT_TESTS(defaultOFF), andubuntu-lateststill resolves toubuntu-24.04on GitHub runners today.The failure itself came from GCC 15.2 on 26.04 contracting multiply-adds into FMAs under the default
-ffp-contract=fast, which shifted an intermediate rounding by one ULP and broke an exact float comparison in the test. That is the class of breakage this job is meant to catch — it surfaces on a toolchain bump, not on a code change.Moving the job promptly surfaced a second instance of the same class, in
post-processing/pytest-filters.py, which this PR also fixes.Summary
U24_SH_Py_CI_SYS_JSONbecomesU26_SH_Py_CI_SYS_JSON,runs-on: ubuntu-26.04. All steps unchanged.U22_U24_ST_Py_EX_CfU) and DDS-tagged LibCI (U22_U24_SH_Py_DDS_CI). What it loses is the untagged suite.LRS_libci_triggeris a required context.CMake/unix_config.cmakebuilds with-ffp-contract=off.Chose the flip over adding a 26.04 matrix entry to keep the job count flat. The matrix alternative costs one extra job and would preserve untagged 24.04 coverage, if that tradeoff is preferred.
The
-ffp-contract=offfixpytest-filters.pycompares post-processing output byte-for-byte against a reference dataset. The spatial and temporal filters both computex * alpha + y * (1 - alpha)infloat(src/proc/temporal-filter.h,src/proc/spatial-filter.{h,cpp}— nine sites). GCC and Clang default to-ffp-contract=fast, which fuses one of those products into an FMA wherever the ISA has one, dropping an intermediate rounding. The 1-ULP drift is written back into the temporal filter's history buffer and compounds across a frame sequence; a few pixels per frame survive truncation touint16as a ±1 depth difference.This is not specific to Ubuntu 26.04. FMA is in the base aarch64 ISA, so the same four cases already differ on
ubuntu-24.04-armwith GCC 13.3 — identical cases, identical pixel counts. Jetson and Apple-Silicon builds have been producing filter output 1 LSB away from x86 and Windows all along; it went unnoticed because the Jetson LibCI stage runs--live, which skips this test. The 26.04 job made an existing cross-platform inconsistency visible rather than creating one.-ffp-contract=offrestores bit-identical results across toolchains. Where the ISA has no FMA — x86 up to 24.04, and Windows/MSVC — there is nothing to fuse, so codegen is unchanged and existing byte-exact jobs are unaffected. A source-level fix was rejected:-ffp-contract=fastignores statement boundaries, so splitting the expression into temporaries does not reliably prevent fusion, and=onstill fuses because it is a single expression.Only the
unix_config.cmakeplatforms are changed, since those are the ones measured here.Test plan
ubuntu-26.04runner and confirmed the merged test fix resolves it — three arms differing only in the line under test (upstreampose.h+ exact compare: fail; contributorpose.h+ exact compare: fail; + approximate compare: pass)gcc 15.2.0,-ffp-contract=fast,__FP_FAST_FMAdefined; measured error 4.77e-07 against aneq()tolerance of 2.03e-06pytest-filtersfailure to FMA contraction with a six-arm experiment onubuntu-26.04:-ffp-contract=offbyte-exact;-fno-tree-vectorizeand-O2still failing (so not vectorization or optimization level);gcc-13on 26.04 byte-exact; both runner CPU models present in passing and failing armsubuntu-24.04-arm(aarch64, GCC 13.3) with identical pixel counts, and go byte-exact with the flagos_set_flags(not a command-line override) and that all fourteen cases are byte-exact onubuntu-26.04,ubuntu-24.04-arm, andubuntu-24.04U26_SH_Py_CI_SYS_JSONjob green — first full-suite run on GCC 15.2, so unrelated failures are possible🤖 Generated by AI