Case 82: SYCL overload set removed (DPC++ build withdrawn)¶
| Field | Value |
|---|---|
| Verdict | 🔴 BREAKING |
| Category | Breaking |
| Platforms | Linux, macOS, Windows |
| Flags | ABI break, API break |
Detected ChangeKinds |
sycl_overload_set_removed |
| Source files | browse on GitHub |
Category: Overload-family ABI | Verdict: BREAKING
What breaks¶
In v1 the library exports every algorithm entry point twice — once with a
CPU signature and once accepting sycl::queue& as the first parameter:
result_t compute(const descriptor&, const table&);
result_t compute(sycl::queue&, const descriptor&, const table&); // SYCL
In v2 the DPC++ build is dropped. The CPU overloads are unchanged; the
sycl::queue& overloads disappear — typically 30–80 symbols across an
algorithm catalog like oneDAL's.
Mechanically this is N×func_removed. Reporting it that way buries the
signal under a wall of independent removals, making the suppression UX a
mess (one rule per algorithm) and obscuring the deployment-level question
("did the SYCL surface go away?").
Why this is its own ChangeKind¶
A grouped finding — SYCL_OVERLOAD_SET_REMOVED — names the deployment
event in one place: "the DPC++ overload family was removed (N affected
entry points: compute, train, infer, finalize, …)". Per-symbol
func_removed findings for the affected entries are suppressed as
children.
How abicheck detects it¶
After the per-symbol removal pass, the new detector
(abicheck/diff_onedal.py::detect_sycl_overload_set_removal) groups removed symbols by their
demangled unqualified name and parameter list-minus-first-arg.
When ≥ K removed siblings share an unqualified name with a surviving
non-SYCL overload AND the removed one's first parameter type contains
sycl::queue, a single SYCL_OVERLOAD_SET_REMOVED finding is emitted
listing the affected entry-point family.
Real-world reference¶
cpp/oneapi/dal/algo/*/compute.hpp, train.hpp, infer.hpp each ship a
CPU overload and a sycl::queue& overload guarded by ONEDAL_DATA_PARALLEL.
Switching off DPC++ at build time withdraws every queue-taking overload in
one go.
Source files¶
See also: Examples overview · All BREAKING cases · Category: Breaking.