oneDAL
Author: Ludovic HENRY ludovic.henry@qti.qualcomm.com
Date: 2026-06-17
Scope: RISC-V (riscv64/linux) support status for oneDAL
Audience: Technical leadership, resource allocation strategy
Verification policy: Every claim is cross-referenced to a primary upstream source. Items that could not be verified against a second source are marked [NEEDS VERIFICATION].
1. Project Overview
oneDAL (oneAPI Data Analytics Library) is a machine learning and data analytics library implementing the oneAPI specification. The repository was previously hosted at oneapi-src/oneDAL and has been migrated to uxlfoundation/oneDAL under the UXL Foundation, a Joint Development Foundation Project. UXL Foundation Steering Members include Arm, Fujitsu, Google Cloud, Imagination Technologies, Intel, Qualcomm, and Samsung.
The library provides algorithm implementations for classical ML workloads (decision forests, PCA, covariance, Gaussian naive Bayes, DBSCAN, etc.) with a tiered compute backend: Intel MKL as the primary production backend on x86, and OpenBLAS as the fallback for non-x86 architectures.
2. Port History and Upstreaming Timeline
| Date | Event |
|---|---|
| April 22, 2024 | PR #2737 opened by Keeran Rothenfusser (Rivosinc) |
| April 26, 2024 | PR #2737 merged by Nikolay Petrov (Intel); foundational riscv64 port complete |
| April 30, 2024 | Issue #2758: riscv64 CI (LinuxMakeLLVM_OpenBLAS_rv64) reported failing on Azure Pipelines |
| May 2, 2024 | Issue #2758 closed; CI restored |
| November 5, 2025 | Issue #3431: Random forest vectorized mean/variance missing for riscv64 and aarch64 |
| January 21, 2026 | PR #3304 merged: CPU topology initialization bug fix (all platforms) |
| February 13, 2026 | Issue #3510: Special math functions (ErfInv, CdfNormInv) return NaN on non-x86 |
| February 23, 2026 | Issue #3526: Bazel RISC-V support opened then immediately closed as not planned |
The port was authored entirely by one contributor from Rivosinc (keeranroth). PR #2737 received three approvals: luhenry, napetrov (Intel), and Alexandr-Solovev (Intel). The 4-day review-to-merge cycle indicates no governance friction for the initial port.
There is no master tracking issue for the riscv64 port. Issue #3530 (Bazel master tracking) lists riscv64 as a “Secondary Issues (Post-Blocker)” item but is not a riscv64-specific tracking issue.
3. Upstream Support Tier
CONTRIBUTING.md and MAINTAINERS.md contain no formal tier or support-level classification. The project uses a code-owner model. The MAINTAINERS.md file (confirmed raw content) lists:
| Person | Employer | Role |
|---|---|---|
| Victoriya Fedotova (@Vika-F) | Intel | Maintainer (oneDAL Architecture) |
| Aleksandr Solovev (@Alexandr-Solovev) | Intel | Maintainer (oneDAL Architecture) |
| Alexander Andreev (@Alexsandruss) | Intel | Maintainer (oneDAL Architecture) |
| Rakshith G B (@rakshithgb-fujitsu) | Fujitsu | Code Owner (AArch64) |
| Keeran Rothenfusser (@keeranroth) | Rivosinc | Code Owner (RISC-V) |
| Nikolay Petrov (@napetrov) | Intel | Maintainer (Release Management) |
| Sergey Yakovlev (@syakov-intel) | Intel | Maintainer (Release Management) |
| Maria Petrova (@maria-Petrova) | Intel | Maintainer (Release Management) |
Intel holds 6 of 8 roles. riscv64 has a named code owner (Rivosinc/keeranroth), which confers the same formal standing as aarch64. There is no documented tier distinction between primary (x86) and secondary (aarch64, riscv64) architectures in governance documents.
In practice, riscv64 and aarch64 share the same depth of implementation: scalar C fallback kernels, OpenBLAS BLAS backend, and no hand-written SIMD algorithm kernels – with one exception: aarch64 has one hand-coded Sleef SVE vectorized exp path that riscv64 lacks.
4. Technical Architecture and RISC-V-Specific Subsystems
CPU Detection and Dispatch
riscv64 is detected at compile time via #if defined(__riscv) && (__riscv_xlen == 64) in cpp/daal/include/services/daal_defines.h, which sets TARGET_RISCV64. The runtime CPU dispatch system (cpp/oneapi/dal/backend/dispatcher.hpp) defines a single dispatch tag cpu_dispatch_rv64 with no sub-variants (no RVV vs. base split). The CpuType enum defines rv64 = 0, firstCpuType = rv64, lastCpuType = rv64 – one tier.
The cpuid implementation in cpp/daal/src/services/compiler/generic/env_detect_features.cpp is a stub: run_cpuid() contains only a comment // TODO: riscv64 implementation for cpuid. daal_serv_cpu_feature_detect() returns CpuFeature::unknown. No runtime ISA probing exists; the dispatcher unconditionally selects rv64.
CPU topology is disabled for all non-x86 targets via DAAL_CPU_TOPO_DISABLED. The TBB scheduler handle initialization (daal::setSchedulerHandle) is x86-only and is skipped on riscv64.
Math Backend
riscv64 builds use -DDAAL_REF -DONEDAL_REF, selecting service_math_ref.h. Status by function:
| Function | riscv64 behavior |
|---|---|
| sFabs, sMin, sMax, sSqrt, sCeil, sLog, sErf | Standard C <cmath> scalar – correct |
| vAdd, vSub, vExp, vTanh, vSqrt, vLog, vLog1p, vErf | #pragma omp simd loop – compiler auto-vectorized |
| sErfInv / vErfInv | Returns std::numeric_limits<float>::quiet_NaN() – silent correctness failure |
| sCdfNormInv / vCdfNormInv | Returns std::numeric_limits<float>::quiet_NaN() – silent correctness failure |
The NaN stubs are explicitly marked // Not implemented in service_math_ref.h. This affects all algorithms that use normal distribution CDF, inverse CDF, or inverse error functions (Gaussian naive Bayes, quantile regression, normal distribution sampling). Issue #3510 is the tracking issue; the proposed fix (cephes/SciPy) is blocked on Apache 2.0 license compatibility.
For comparison: aarch64 has the same NaN stubs for ErfInv/CdfNormInv but has one additional hand-coded path – Sleef SVE intrinsics for vectorized exp. riscv64 lacks that path and relies entirely on compiler auto-vectorization.
BLAS/LAPACK
service_blas_ref.h and service_lapack_ref.h delegate to OpenBLAS, cross-compiled with --target RISCV64_ZVL128B. OpenBLAS’s own RVV kernels are active. This is the most performant layer in the riscv64 stack; GEMM, SYRK, and LAPACK operations use OpenBLAS RVV code, not scalar fallback.
Algorithm Kernels
No riscv64-specific algorithm files exist. There are no *_rv64.cpp analogs to *_avx512.cpp. The changes introduced by PR #2737 to algorithm files were exclusively 2-line preprocessor additions (#elif defined(TARGET_RISCV64)) to define CPU_EXTENSION. All algorithm computations run on the scalar C path with compiler auto-vectorization where #pragma omp simd is present.
Known gap: the random forest mean/variance vectorization added in PR #3362 is gated behind #if (__CPUID__(DAAL_CPU) == __avx512__) in cpp/daal/src/algorithms/dtrees/forest/regression/df_regression_train_dense_default_impl.i line 180. riscv64 and aarch64 both use the unvectorized scalar path. Issue #3431 is open, labeled good first issue, help wanted, perf, with no assignee.
5. Build System, Cross-Compilation, and Toolchain
Make-based Build (supported)
The Make build system fully supports riscv64 via:
dev/make/function_definitions/riscv64.mk: definesBACKEND_CONFIG=ref(only valid value – any other backend errors), compiler defaults toclang,OPTFLAG=O2dev/make/function_definitions/lnxriscv64.mk: definesARCH=riscv64,_OS=lnx,_IA=riscv64, TBB/pthread link flags, references export def fileexport_lnxriscv64.ref.defdev/make/compiler_definitions/clang.ref.riscv64.mk: setsPLATs.clang = lnxriscv64, cross-compile target--target=riscv64-linux-gnu, flags-DDAAL_CPU=rv64 -DDAAL_REF -DONEDAL_REF, andrv64_OPT.clang = $(-Q)march=rv64gc_v1p0_zvl128b.ci/env/riscv64-clang-crosscompile-toolchain.cmake: CMake toolchain file settingCMAKE_SYSTEM_PROCESSOR=riscv64, usingclang/clang++withCMAKE_C_COMPILER_TARGET=riscv64-linux-gnu, sysroot from$ONEDAL_SYSROOT
ISA extension flags: rv64gc_v1p0_zvl128b – RVV 1.0 with minimum 128-bit vector length. These flags are compile-time only; no RVV intrinsics are written in oneDAL source code.
GCC cross-compilation is not supported. There is no gnu.ref.riscv64.mk file. Clang is the only supported compiler for riscv64.
The build installs a debootstrap Ubuntu noble (24.04) sysroot via .ci/env/apt.sh. Pinned dependency versions in CI:
| Component | Version |
|---|---|
| OpenBLAS | v0.3.27 |
| oneTBB | v2023.0.0 |
| Ubuntu sysroot | noble (24.04) |
| OpenBLAS target | RISCV64_ZVL128B |
OpenBLAS is built with NO_FORTRAN=1, USE_OPENMP=0 USE_THREAD=0 USE_LOCKING=1, BINARY=64 INTERFACE64=1 (ILP64 interface, single-threaded, threading delegated to oneTBB).
Clang minimum version: the toolchain cmake file does not pin a version. rv64gc_v1p0_zvl128b march string support requires Clang 16+. The CI resolves to Ubuntu 24.04 default clang (18.x).
Bazel Build (not supported)
Issue #3526 tracked Bazel riscv64 support and was closed as not planned on February 23, 2026 with no comments and no assignee. The master Bazel tracking issue #3530 lists riscv64 as “Secondary Issues (Post-Blocker)” with no owner and no timeline. The existing Make-based riscv64 support is described in the Bazel tracking issue as “experimental.”
There is no Dockerfile for riscv64. The development container (dev/docker/onedal-dev.Dockerfile) targets amd64 only.
6. Feature Coverage and Gap Analysis vs arm64 and amd64
| Component | amd64 | aarch64 | riscv64 |
|---|---|---|---|
| Build system – Make | Full | Full | Full |
| Build system – Bazel | Full | Full | Not supported (closed as not planned) |
| CI – GitHub Actions | Yes | Yes (ubuntu-24.04-arm) | No |
| CI – Azure Pipelines | Yes | Yes | Yes (QEMU emulation) |
| CPU dispatch tiers | 3 (SSE2, AVX2, AVX512) | 1 (SVE) | 1 (rv64) |
| Runtime ISA probing | Yes | Yes | No (TODO stub) |
| Math – basic ops | MKL vExp, vLog, etc. | Sleef SVE for float exp; scalar for others | omp simd auto-vectorization |
| Math – ErfInv, CdfNormInv | MKL | NaN stub | NaN stub |
| BLAS/LAPACK | MKL | OpenBLAS | OpenBLAS (RVV-enabled) |
| Algorithm kernels – hand-tuned SIMD | Yes (AVX2 + AVX512 paths) | No | No |
| Forest mean/variance vectorization | Yes (AVX2 + AVX512) | No | No |
| GPU/DPC++ target | Yes | No | No |
| Binary packages | Yes (conda-forge, PyPI) | No | No |
riscv64 and aarch64 are at equivalent depth except: (1) aarch64 has one Sleef SVE exp path that riscv64 lacks; (2) aarch64 has GitHub Actions CI with native ARM runners while riscv64 is QEMU-only.
7. CI/CD Infrastructure
Azure Pipelines (active)
The riscv64 CI job is defined in .ci/pipeline/ci.yml as LinuxMakeLLVM_OpenBLAS_rv64. It triggers on every push to main and every PR against main. It runs on an ubuntu-24.04 x86_64 hosted runner and uses QEMU for test execution (QEMU_CPU="max", QEMU_LD_PREFIX set to the sysroot).
Confirmed active: Azure Pipelines build ID 60530 ran on PR #3660 (merged 2026-06-16) and completed with status success. [NEEDS VERIFICATION – the build ID and PR number come from a single source in the research findings.]
Build steps in the CI job:
- Install GNU riscv64 cross-compilers (
gcc-riscv64-linux-gnu,g++-riscv64-linux-gnu,gfortran-riscv64-linux-gnu) - Build Ubuntu noble sysroot via debootstrap
- Cross-compile OpenBLAS v0.3.27 with
--target RISCV64_ZVL128B - Cross-compile oneTBB v2023.0.0 using the CMake toolchain file
- Build oneDAL
daalandonedal_ctargets with--plat lnxriscv64 --backend-config ref --optimizations rv64 - Run
daal/cpp examplesandoneapi/cpp examplesunder QEMU
No performance benchmarking steps exist in the CI job.
GitHub Actions (riscv64 absent)
All 16 workflow files in .github/workflows/ were read. None contain any reference to “riscv”, “riscv64”, or “RISCV”. The only non-x86 GitHub Actions CI is ci-aarch64.yml, which uses GitHub-hosted ubuntu-24.04-arm runners. riscv64 has no GitHub Actions workflow.
8. Distribution and Release Status
No riscv64 binary packages exist through any distribution channel. The following were checked directly:
| Channel | Result |
|---|---|
| GitHub Releases (uxlfoundation/oneDAL 2026.1.0, 2026.0.0, 2025.11.0) | Zero binary assets attached; API returns assets: [] for all three releases |
PyPI (scikit-learn-intelex 2026.1.0, 10 wheels) |
All wheels are manylinux_2_28_x86_64 or win_amd64; no riscv64 |
PyPI (onedal) |
Package does not exist (404) |
| conda-forge linux-riscv64 | oneDAL absent from channel repodata entirely |
| Debian | Package does not exist in the Debian archive |
| Ubuntu | Package does not exist in Ubuntu noble |
| Arch Linux / archriscv | Not in upstream Arch packages; not in archriscv status list |
The build-from-source workflow introduced by PR #2737 produces functional riscv64 binaries but no pre-built artifacts are distributed through any registry.
Release notes for 2025.5.0 through 2026.1.0 contain no RISC-V mentions. Performance improvements in release notes target x86 SIMD and ARM SVE only.
9. Dependencies
| Dependency | Role | riscv64 Status | Notes |
|---|---|---|---|
| Intel MKL | Primary numeric backend (BLAS, LAPACK, RNG, FFT, special math) | Hard blocker – x86-only closed-source binary | The riscv64 build uses --backend-config ref which excludes MKL entirely. Special math functions that delegate to MKL return NaN on riscv64 (issue #3510). |
| OpenBLAS | Alternate BLAS/LAPACK backend; sole backend on riscv64 | Functional – cross-compiled with RISCV64_ZVL128B |
OpenBLAS v0.3.27 pinned in CI. Multithreading disabled in OpenBLAS; threading provided by oneTBB. Race condition bug between oneTBB and OpenBLAS threading is tracked in issue #3329 (open, Aug 2025) – applies to all non-MKL platforms including riscv64. |
| oneTBB | Thread parallelism runtime | Builds from source – toolchain file present | oneTBB v2023.0.0. PyPI/conda-forge binary packages are x86-only; riscv64 requires source build. oneDAL’s MODULE.bazel hardcodes x86 PyPI URLs; riscv64 uses the TBBROOT env-var override path. |
| Intel MPI / oneCCL | Distributed multi-node compute | Not functional on riscv64 | Both are x86-only binaries. No open-source MPI validation confirmed for riscv64. Blocks distributed oneDAL workloads. [NEEDS VERIFICATION – oneCCL riscv64 status is based on zero search results; no positive confirmation of incompatibility from a primary source.] |
| OpenMP (libgomp) | Secondary parallelism | Functional via system cross-toolchain | oneDAL MODULE.bazel fetches x86-only conda-forge libgomp; riscv64 builds use the system cross-toolchain libgomp instead. No hard blocker. |
| oneDPL | Parallel STL for some algorithm implementations | Unknown | No riscv64 issues or CI found in uxlfoundation/oneDPL. Data not available: riscv64-specific build or test status for oneDPL. Not a hard blocker for the ref backend path. |
| Catch2 | C++ test framework (dev only) | Builds with workaround | Issue #2808 reports Werror=cast-align on riscv; filed Feb 2024, status open. Requires -Wno-cast-align workaround. Low severity. |
| Intel VTune SDK | Optional profiling | Not available on riscv64 | x86-only binary. Optional; not a blocker. |
10. Ecosystem Status
RISE Project
oneDAL is listed as one of four focus areas in the RISE System Libraries Working Group, confirmed from the RISE Webinar December 2024 slide deck PDF. RISE Premier Members as of December 2024 include Google, Intel, Qualcomm, Rivos, Ventana, SiFive, Red Hat, T-Head (Alibaba), Andes, MediaTek, Samsung, and Nvidia.
Despite the listing, no concrete RISE deliverables for oneDAL were found:
- The RISE 2024 System Libraries achievements list bionic, dav1d, zlib-ng, and XNNPACK vector optimizations. oneDAL is not cited in the achievements.
- 27 RISE blog posts from May 2024 through June 2026 contain zero mentions of oneDAL.
- The RISE Python wheel builder (riseproject.gitlab.io) does not list oneDAL (80+ packages enumerated).
- The riseproject-dev GitHub organization (30 repos enumerated) contains no oneDAL repository.
- GitHub API search
oneDAL org:riseproject-devreturns 0 results.
Keeran Rothenfusser (Rivosinc), the oneDAL RISC-V code owner, is a RISE-adjacent contributor; Rivosinc is not listed as a RISE Premier Member in the December 2024 PDF [NEEDS VERIFICATION – Rivosinc membership status may have changed; the PDF is from December 2024].
Intel Involvement
Intel holds 6 of 8 MAINTAINERS.md roles. Two open issues (November 2025 and February 2026) originate from an Intel engineer (david-cortes-intel) and explicitly tag the riscv64 code owner. This indicates Intel is treating riscv64 as a first-class target for new algorithm coverage – not a maintenance-only inclusion.
Qualcomm Involvement
Data not available: no Qualcomm-authored contributions to the oneDAL riscv64 port were identified in the research findings.
11. Known Bugs and Active Issues
Critical – Silent Correctness Failure
Issue #3510 – “Add non-x86 versions of special functions” (open, Feb 13, 2026)
sErfInv(), vErfInv(), sCdfNormInv(), and vCdfNormInv() in service_math_ref.h return std::numeric_limits<float>::quiet_NaN() on all non-x86 builds. There is no exception or error; affected algorithms silently produce NaN output. Algorithms impacted include Gaussian naive Bayes, quantile regression, and any algorithm sampling from a normal distribution.
Active blocker for the fix: the cephes library (proposed replacement, used by SciPy) has unclear licensing that may not be compatible with oneDAL’s Apache 2.0 license. No alternative has been identified and approved. Issue has no assignee.
Performance – Vectorization Gap
Issue #3431 – “Add vectorized algorithm for forest mean/variance in aarch64/riscv” (open, Nov 5, 2025)
Random forest regression mean/variance computation is gated behind #if (__CPUID__(DAAL_CPU) == __avx512__). Both aarch64 and riscv64 use the unvectorized scalar fallback. No quantitative slowdown figure is cited in the issue. Tagged good first issue, help wanted, perf. No assignee.
Latent – Threading Race Condition
Issue #3329 – “Single-threaded BLAS/LAPACK calls create race conditions with OpenBLAS” (open, Aug 22, 2025)
openblas_set_num_threads() modifies global state, causing thread-count corruption in multi-threaded contexts. This applies to all OpenBLAS-backed platforms. riscv64 is exclusively OpenBLAS-backed (MKL is unavailable), so this bug applies directly. Issue has no assignee.
Infrastructure – Bazel Not Supported
Issue #3526 – “[Bazel Migration] RISC-V support with OpenBLAS fallback” (closed as not planned, Feb 23, 2026)
Closed with no comments and no timeline. The Bazel migration for x86 is itself incomplete (toolchain consolidation between ICX and DPC++ is unresolved). riscv64 is explicitly categorized as a post-blocker secondary item in the Bazel migration roadmap.
12. Objections and Upstream Blockers
Objection 1: The riscv64 CI pipeline is QEMU-only and not in GitHub Actions.
Confirmed. The LinuxMakeLLVM_OpenBLAS_rv64 Azure Pipelines job runs on an x86_64 runner with QEMU emulation. No native riscv64 runner is used. This means CI correctness depends on QEMU fidelity. Performance data from CI is meaningless for hardware characterization. The CI validates build and functional correctness only.
Objection 2: The special math NaN bug has no timeline for resolution.
Confirmed. Issue #3510 is open, unassigned, and blocked on a license compatibility question that has not been resolved. Algorithms depending on ErfInv or CdfNormInv produce incorrect results on riscv64 without any diagnostic signal. The issue was opened February 2026 and has no comments.
Objection 3: No riscv64 binary packages exist anywhere.
Confirmed. Building oneDAL for riscv64 requires the complete cross-compilation workflow: install GNU cross-compilers, build a debootstrap sysroot, cross-compile OpenBLAS and oneTBB from source, then cross-compile oneDAL. No distribution packages exist in conda-forge, PyPI, Debian, Ubuntu, or Arch Linux for riscv64.
Objection 4: Performance on riscv64 has no published data.
Confirmed. No benchmark numbers for oneDAL on riscv64 exist in any public source. The RISE 2024 PDF does not include oneDAL performance data. The CI runs functional examples under QEMU but does not measure throughput or latency.
Objection 5: The Bazel migration blockers also block riscv64 integration.
Confirmed. Issue #3526 was closed as not planned because the Bazel migration for x86 is itself incomplete. riscv64 Bazel support cannot be unblocked independently of the x86 migration completing its own prerequisite work (ICX/DPC++ toolchain unification, Windows and ARM platform verification).
13. Investment Analysis
13.1 Functional Enablement
The riscv64 build produces a functionally correct library for most algorithms. The two functional gaps are:
-
ErfInv / CdfNormInv NaN bug (issue #3510): requires identifying an Apache 2.0-compatible implementation of inverse error function and normal distribution inverse CDF, integrating it as a conditional dependency for non-x86 builds, and adding test coverage. Estimated effort: 2-3 person-weeks (implementation 1 week, license review 0.5 week, integration and test 1 week). The blocker is legal review, not engineering complexity.
-
OpenBLAS threading race condition (issue #3329): a latent bug in multi-threaded workloads on any OpenBLAS-backed platform. The fix requires coordinating thread count management between the TBB scheduler and OpenBLAS. Estimated effort: 1-2 person-weeks. This is shared infrastructure for all non-x86 platforms; aarch64 benefits equally.
13.2 Performance Optimization
Three layers of performance work are available with distinct cost/impact profiles:
-
Vectorized forest mean/variance (issue #3431): requires adding
#ifdef TARGET_RISCV64blocks with architecture-specific SIMD lane constants indf_regression_train_dense_default_impl.i. The issue is labeledgood first issuebecause the x86 reference implementation is directly portable. No quantitative speedup estimate is available from the research findings. Estimated effort: 1-2 person-weeks. -
RVV intrinsic math functions: replacing the
#pragma omp simdauto-vectorization inservice_math_ref.h(vExp, vLog, vTanh, etc.) with hand-written RVV intrinsics or a Sleef-based path (mirroring the aarch64 Sleef SVE approach). This is the highest-complexity, highest-impact path. Estimated effort: 4-8 person-weeks per function family. No existing RISC-V Sleef integration exists in the codebase to reference; Sleef does have RVV support upstream [NEEDS VERIFICATION – Sleef RVV status not confirmed in research findings]. -
Runtime ISA probing (TODO stub in
env_detect_features.cpp): implementing therun_cpuid()stub to enable runtime dispatch between RVV-enabled and base riscv64 paths. Prerequisite for any multi-tier dispatch. Estimated effort: 1-2 person-weeks. Low priority until a second dispatch tier (RVV kernel set) exists to dispatch to.
13.3 CI/CD Infrastructure
Current state: Azure Pipelines job on x86_64 + QEMU, no native runner, no GitHub Actions coverage, no performance CI.
Options in increasing investment order:
-
Migrate riscv64 CI to GitHub Actions: create a
.github/workflows/ci-riscv64.ymlmirroring the structure ofci-aarch64.yml, using QEMU. Estimated effort: 1 person-week. No native runner required. Closes the gap vs. aarch64 in CI infrastructure parity. -
Add native riscv64 CI runner: requires either a RISE board-farm runner (riseproject-dev runner infrastructure exists for other projects) or a Qualcomm-hosted riscv64 machine. Estimated effort: 2-4 person-weeks (runner provisioning, CI integration, validation). This is a prerequisite for any meaningful hardware performance benchmarking.
-
Add performance benchmarking to CI: add a benchmark suite (GEMM throughput, algorithm latency for Decision Forest, PCA, covariance) to the riscv64 CI job. Estimated effort: 2-3 person-weeks. Requires native runner to produce useful data; meaningless on QEMU.
13.4 Ecosystem Enablement
-
conda-forge riscv64 packaging: oneDAL is absent from conda-forge entirely. Packaging for riscv64 requires: adding a conda-forge feedstock, configuring cross-compilation in the feedstock, and handling the OpenBLAS dependency. Estimated effort: 2-3 person-weeks. Enables downstream Python users (scikit-learn-intelex, daal4py) on riscv64.
-
Bazel build support: blocked by the upstream Bazel migration state. Not actionable until the x86 Bazel migration completes its prerequisite work. Estimated effort when unblocked: 1 week (issue #3526 estimated internally at 1 week).
-
RISE engagement: oneDAL is listed in the RISE System Libraries WG but has produced no 2024 achievements. Formal engagement with the RISE AI/ML WG (created Q1 2026, led by Leye Wang/BOSC) could provide resources (runner access, co-contributors, blog visibility). No effort estimate; this is relationship and coordination work, not engineering.
13.5 Summary Table
| Area | Work Item | Effort (person-weeks) | Owner Candidate | Priority |
|---|---|---|---|---|
| Functional | Fix ErfInv / CdfNormInv NaN (issue #3510) – pending license resolution | 2-3 | Qualcomm or Rivosinc contributor | Critical |
| Functional | Fix OpenBLAS threading race (issue #3329) | 1-2 | Qualcomm or shared with aarch64 owner | High |
| Performance | Vectorized forest mean/variance for riscv64 (issue #3431) | 1-2 | keeranroth (Rivosinc) tagged; open for contribution | High |
| Performance | RVV intrinsic math (vExp, vLog, vTanh) via Sleef or direct intrinsics | 4-8 | Requires riscv64 SIMD expertise | Medium |
| CI/CD | Migrate riscv64 CI to GitHub Actions (QEMU) | 1 | Qualcomm infra or Rivosinc | High |
| CI/CD | Add native riscv64 CI runner | 2-4 | Qualcomm hardware or RISE board farm | Medium |
| CI/CD | Add performance benchmarking to CI | 2-3 | Requires native runner first | Medium |
| Ecosystem | conda-forge riscv64 packaging | 2-3 | Qualcomm or community | Medium |
| Ecosystem | Bazel riscv64 support (issue #3526) | 1 (when unblocked) | Intel Bazel migration team must unblock | Low |
| Runtime | Implement cpuid / ISA probing stub | 1-2 | Prerequisite for multi-tier dispatch | Low |
14. Updates
No updates yet – initial report dated 2026-06-17.
15. References
- PR #2737 – Add RISC-V clang build
- Issue #2758 – rv64 CI failing
- PR #3304 – Fix incorrect CPU topology initialization
- Issue #3329 – OpenBLAS threading race condition
- Issue #3431 – Vectorized forest mean/variance aarch64/riscv
- Issue #3510 – Non-x86 special functions return NaN
- Issue #3526 – Bazel RISC-V support (closed as not planned)
- Issue #3530 – Bazel master tracking issue
- MAINTAINERS.md
- UXL Foundation
- RISE Project