Library / SDK
uxlfoundation/oneDAL avatar
uxlfoundation/oneDAL

oneDAL: the C++ engine behind accelerated scikit-learn

oneAPI Data Analytics Library (oneDAL)

652 stars228 forksC++Apache-2.0

At a glance

What is it?
oneAPI Data Analytics Library implements accelerated machine learning routines for tabular data in C++ and DPC++, and it is what the scikit-learn-intelex extension calls behind the scenes. Here is what it does, how to install it, and where it stops being the right tool.
Who is it for?
Adopt oneDAL if you have scikit-learn code you want to accelerate without a rewrite, or if you are writing C++ that needs batched linear models, K-means or random forests on Intel hardware and you are willing to build against the oneAPI interfaces. Do not adopt it if you need online or incremental learning, if your data is not tabular, or if your compute is not Intel.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What oneDAL actually is, and who ends up using it

oneDAL is a C++ and DPC++ library that implements machine learning routines for tabular data: linear regression, K-means clustering, random forests, and others. It targets CPUs, GPUs and multi-node distributed setups. The repository describes it as an implementation of the oneAPI specification for the oneDAL component, governed by the UXL Foundation.

The important thing to understand is that most people who benefit from oneDAL never call it directly. The README states that oneDAL powers the Extension for Scikit-learn in Python, published as scikit-learn-intelex. That extension makes existing scikit-learn code call oneDAL behind the scenes, so a data scientist who changes nothing but the import path is running oneDAL code. The direct audience is narrower: C++ engineers who want the same routines without a Python layer, and who are comfortable picking between the oneAPI interfaces and the older DAAL interfaces.

That split matters when you evaluate the project. If you are a Python user, your real dependency is scikit-learn-intelex, and oneDAL is an implementation detail you inherit. If you are a C++ user, oneDAL is the product, and the scikit-learn extension is irrelevant to you.

Where the acceleration comes from: SIMD, cache, SYCL and oneMKL

The README is explicit about the mechanism on each backend. CPU acceleration is achieved by using SIMD instructions and exploiting the cache structures of modern hardware. GPU acceleration uses the SYCL framework and the oneMKL library. There is no autotuning layer described here, no learned cost model, and no claim that the library rewrites your algorithm. It is a set of implementations that are written to use the vector units and memory hierarchy of the hardware they run on.

That design has a consequence worth stating plainly. The speedup is a property of the kernel, not of your pipeline. If your workload is dominated by data loading, feature engineering in Python, or I/O, replacing the estimator will not move the total much. The routines that benefit are the ones where arithmetic on dense or sparse tabular arrays dominates the runtime.

Distributed execution is a separate mode. The README shows strong and weak scaling results for K-means fit, and points to a paper for details. The samples directory includes an MPI example under samples/daal/cpp/mpi, so multi-node work is done through MPI rather than through a bespoke scheduler. Note the technical details attached to those scaling charts: the hardware is an Intel Xeon E5-2698 v3 generation part and the software versions are from 2019. The charts are illustrative of the mode existing, not a prediction of what you will measure on current hardware.

Installing oneDAL and running a first C++ example

The README tells you to check the System Requirements page before installing, and that is not boilerplate: the library depends on Intel hardware features and, for the GPU path, on SYCL and oneMKL. There are two distribution routes. Binary packages come from Intel oneAPI as a stand-alone download, from conda-forge as dal-devel, and from NuGet as inteldal.devel.linux-x64. Source distribution means cloning the repository or downloading a release and following INSTALL.md.

The conda-forge route is the shortest for a Linux workstation. The package name in the README is dal-devel:

bash
conda install -c conda-forge dal-devel

After that, the repository's own examples are the fastest way to see the API shape. The oneAPI interfaces without SYCL support live under examples/oneapi/cpp, and the DAAL interfaces under examples/daal/cpp. The README links both, along with examples/oneapi/dpc for the SYCL path. A typical first run is to build one of those examples against your installation and confirm it links, before writing any code of your own.

If you are building from source, the top-level layout tells you what you are in for: a makefile and makefile.lst, a cmake/ directory, a MODULE.bazel file for Bazel builds, and a conda-recipe/ directory. INSTALL.md is the document that governs all of this, and the README does not duplicate its contents.

For Python users the entry point is a different repository. The README points to scikit-learn-intelex for installation and notebooks, and the extension's own documentation site covers the patching workflow. Do not expect oneDAL's README to walk you through a pip install; it does not.

The interface split is a real decision, not a detail

oneDAL ships two C++ interface families: the oneAPI interfaces, with or without SYCL, and the DAAL interfaces. The README links a documentation page specifically explaining the difference, which is a signal that the choice is not obvious. The examples directory mirrors the split, with examples/oneapi/dpc, examples/oneapi/cpp and examples/daal/cpp as separate trees.

If you are starting new code, the oneAPI interfaces are the ones the project presents first and the ones tied to the oneAPI specification. The DAAL interfaces exist for continuity. Choosing them means you are opting into the older surface deliberately, and you should have a reason: an existing codebase, or a dependency that has not moved.

The cost of picking wrong is not just API churn. The two families have different example sets and, in practice, different documentation coverage. Reading the comparison page before writing a single line is cheaper than migrating later, and the README gives you the link to do exactly that.

Where oneDAL stops being the right tool

The scope is tabular data. The README names linear regression, K-means and random forests as examples and describes the library as implementing routines for tabular data. If your problem is sequence modelling, graph learning, or anything where the feature matrix is not the natural representation, this is not the library you are looking for, and no amount of acceleration on the tabular path will help.

The second boundary is hardware. CPU acceleration here is described in terms of SIMD instructions and cache behaviour on modern hardware, and the GPU path is built on SYCL and oneMKL. On non-Intel compute, the assumptions behind those kernels do not hold, and the project makes no portability claim beyond the oneAPI specification it implements. Verify your target against the System Requirements page rather than assuming.

The third is the distributed path. Multi-node execution is presented through MPI, with an example under samples/daal/cpp/mpi. That means you own the MPI setup, the process launch, and the data distribution. If you wanted a cluster manager to handle that for you, oneDAL is not offering one.

Finally, the scaling charts carry 2019 software versions in their technical notes. They document that the distributed mode exists and scales in a specific measured configuration. They are not a benchmark of the current release, and treating them as one would be a mistake.

The scikit-learn extension alternative, and what changes if you take it

The most relevant alternative is not another C++ library. It is the same project's Python front end. The README presents two ways to build data science applications with oneDAL: use the Extension for Scikit-learn to accelerate existing scikit-learn code by making it call oneDAL behind the scenes, or use the oneDAL C++ interfaces directly.

The difference in approach is where the work lands. With the extension, your estimator stays a scikit-learn estimator, your pipeline stays a scikit-learn pipeline, and the substitution happens underneath. You inherit scikit-learn's API stability and its ecosystem, and you give up direct control over the oneDAL call. With the C++ interfaces, you get the routines without the Python runtime, and you take on build configuration, memory ownership and the interface-family decision described above.

There is a maintenance dimension too. The extension lives in its own repository, uxlfoundation/scikit-learn-intelex, with its own documentation site and its own notebooks. If your team is Python-first, choosing the C++ path means maintaining a second stack for no gain. If you are embedding inference in a C++ service, the extension is not an option at all.

For Spark workloads, the README points to OAP MLlib, which uses oneDAL for Spark MLlib acceleration. The README claims a 3-18x increase compared to default Apache Spark MLlib, with the hardware and software configuration listed in the technical notes below the chart. Those notes specify Intel DAAL 2020 Gold and Apache Spark 2.4.4 on emr-5.27.0, so treat the figure as a historical measurement in that configuration, not a guarantee for your cluster.

Maintenance, releases and the Apache-2.0 terms

The repository is not archived, and the last push was on 2026-09-10, which is recent. Releases are frequent and versioned by year and sequence: 2026.1.0 on 2026-06-10, 2026.0.0 on 2026-05-06, and 2025.11.0 on 2026-03-09. That cadence is the upgrade cost you should budget for. A library that ships a major version every few months will occasionally change interfaces, and the release notes are where those changes are documented.

The licence is Apache-2.0, and the repository carries a LICENSE file plus a third-party-programs.txt at the top level. Apache-2.0 is permissive: it allows commercial use and modification, and it includes a patent grant. It also requires that you preserve notices and include a copy of the licence. The third-party-programs.txt exists because the library bundles or depends on other components, and those carry their own terms. If you redistribute oneDAL or a binary that links it, that file is the one your compliance process needs to read. This is a description of the licence text, not legal advice; your own counsel decides what your distribution requires.

There is also governance overhead to be aware of. The project is governed by the UXL Foundation, and the README points to an AI Special Interest Group as one way to get involved. Contributions go through CONTRIBUTING.md. None of this affects day-to-day use, but it does mean the project's direction is set by a foundation rather than a single vendor's roadmap.

Editorial conclusion

Adopt oneDAL if you have scikit-learn code you want to accelerate without a rewrite, or if you are writing C++ that needs batched linear models, K-means or random forests on Intel hardware and you are willing to build against the oneAPI interfaces. Do not adopt it if you need online or incremental learning, if your data is not tabular, or if your compute is not Intel. Before committing, check the System Requirements page against your actual CPU and GPU, confirm which of the algorithms you need appear in the Developer Guide and Reference, and decide whether the C++ interface or the scikit-learn extension is the one you are maintaining, because they are separate repositories with separate release cadences.

Frequently asked questions

How do I install oneDAL?

Binary packages are available from Intel oneAPI as a stand-alone download, from conda-forge as dal-devel, and from NuGet as inteldal.devel.linux-x64. Building from source means cloning the repository or downloading a release and following INSTALL.md. The README says to check the System Requirements page first.

Do I need oneDAL if I only use Python?

Not directly. oneDAL powers the Extension for Scikit-learn in Python, so if you use scikit-learn-intelex you are already running oneDAL behind the scenes. Installation and notebooks for that path are documented in the scikit-learn-intelex repository, not in oneDAL's README.

What algorithms does oneDAL provide?

The README names linear regression, K-means clustering and random forests as examples of the accelerated machine learning routines it implements for tabular data. The full list lives in the Developer Guide and Reference linked from the README.

Does oneDAL support GPUs and multiple nodes?

Yes on both counts. GPU acceleration uses the SYCL framework and the oneMKL library, and distributed computation is supported through an MPI mode, with an example under samples/daal/cpp/mpi. The README shows strong and weak scaling charts for K-means fit.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. uxlfoundation/oneDAL on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/uxlfoundation-onedal.svg)](https://hysenlabs.com/projects/uxlfoundation-onedal)