Open-source library of optimized deep learning operations (matmul, convolution, attention) for CPUs (x64, AArch64, RISC-V) and Intel GPUs. Used by PyTorch, TensorFlow, OpenVINO, and ONNX Runtime.
See the codeHighlights | Used By | Quick Start | Installation | Documentation | System Requirements
Support | Governance | Contributing | License | Security
oneDNN is an open-source, cross-platform library of optimized deep learning operations for CPUs and GPUs. It provides highly optimized implementations of matrix multiplication, convolution, attention, normalization, and other operations, and is the acceleration layer behind PyTorch, TensorFlow, OpenVINO, and many other AI frameworks.
The library is optimized for Intel 64/AMD64 architecture based processors, Arm(R) 64-bit Architecture (AArch64)-based processors, and Intel Graphics. oneDNN has experimental support for the following architectures: NVIDIA* GPU, AMD* GPU, OpenPOWER* Power ISA (PPC64), IBMz* (s390x), and RISC-V.
oneDNN project is part of the UXL Foundation.
f32, bf16, f16, fp8, fp4, u8/s8, and
u4/s4 data types with various quantization schemes including OCP microscaling formats.oneDNN is intended for deep learning applications and framework developers interested in improving application performance on CPUs and GPUs. Deep learning practitioners should use one of the applications enabled with oneDNN:
Install pre-built oneDNN from conda-forge:
conda install -c conda-forge onednn
Build and run the matrix multiplication performance example, which
measures matmul throughput for f32, f16, bf16, and s8/u8 data types:
wget https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/matmul_perf.cpp \
https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/example_utils.hpp
g++ matmul_perf.cpp -I$CONDA_PREFIX/include -L$CONDA_PREFIX/lib \
-ldnnl -o matmul_perf
LD_LIBRARY_PATH=$CONDA_PREFIX/lib ./matmul_perf cpu
Next steps:
If oneDNN is useful in your work, consider giving the project a star on GitHub. It helps others discover it.
You can download and install the oneDNN library using one of the following options:
oneDNN supports platforms based on the following architectures:
WARNING
Power ISA (PPC64), IBMz (s390x), and RISC-V (RV64) support is experimental with limited testing validation.
The library is optimized for the following CPUs:
On a CPU based on Intel 64 or on AMD64 architecture, oneDNN detects the instruction set architecture (ISA) at runtime and uses just-in-time (JIT) code generation to deploy the code optimized for the latest supported ISA. Future ISAs may have initial support in the library disabled by default and require the use of run-time controls to enable them. See CPU dispatcher control for more details.
WARNING
On macOS, applications that use oneDNN may need to request special entitlements if they use the hardened runtime. See the Linking Guide for more details.
The library is optimized for the following GPUs:
oneDNN supports systems meeting the following requirements:
The following tools are required to build oneDNN documentation:
Configurations of CPU and GPU engines may introduce additional build time dependencies.
oneDNN CPU engine is used to execute primitives on Intel 64/AMD64 based processors, 64-bit Arm Architecture (AArch64) processors, 64-bit Power ISA (PPC64) processors, IBMz (s390x), and compatible devices.
The CPU engine is built by default but can be disabled at build time by setting
ONEDNN_CPU_RUNTIME to NONE. In this case, GPU engine must be enabled.
The CPU engine can be configured to use the OpenMP, TBB or SYCL runtime.
The following additional requirements apply:
Some implementations rely on OpenMP 4.0 SIMD extensions. For the best performance results on Intel Architecture Processors we recommend using the Intel C++ Compiler.
On a CPU based on Arm AArch64 architecture, oneDNN CPU engine can be built with Arm Compute Library (ACL) integration. ACL is an open-source library for machine learning applications and provides AArch64 optimized implementations of core functions. This functionality currently requires that ACL is downloaded and built separately. See Build from Source section of the Developer Guide for details. The minimum supported version of ACL is 53.1.0.
oneDNN GPU engine is used to execute primitives on various accelerators
including Intel integrated and discrete GPUs, NVIDIA GPUs, AMD GPUs, and
other devices supporting SYCL programming language. The GPU engine is disabled
in the default build configuration and can be enabled by setting
ONEDNN_GPU_RUNTIME build option to value other than NONE. Target accelerator
vendor must be selected at build time using ONEDNN_GPU_VENDOR build option.
WARNING
Linux will reset GPU when kernel runtime exceeds several seconds. The user can prevent this behavior by disabling hangcheck for Intel GPU driver. Windows has built-in timeout detection and recovery mechanism that results in similar behavior. The user can prevent this behavior by increasing the TdrDelay value.
The following additional requirements apply for Intel integrated and discrete GPUs:
The following additional requirements apply for NVIDIA GPUs:
WARNING
NVIDIA GPU support is experimental. General information, build instructions, and implementation limitations are available in the NVIDIA backend readme.
The following additional requirements apply for AMD GPUs:
WARNING
AMD GPU support is experimental. General information, build instructions, and implementation limitations are available in the AMD backend readme.
Other devices supporting SYCL programming model require oneAPI DPC++/C++ Compiler that supports the target GPU. Refer to generic GPU vendor documentation for additional details.
When oneDNN is built from source, the library runtime dependencies and specific versions are defined by the build environment.
Common dependencies:
libc.so)libstdc++.so)libdl.so)libm.so)libpthread.so)Runtime-specific dependencies:
| Runtime configuration | Compiler | Dependency |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP | GCC | GNU OpenMP runtime (libgomp.so) |
ONEDNN_CPU_RUNTIME=OMP | Intel C/C++ Compiler | Intel OpenMP runtime (libiomp5.so) |
ONEDNN_CPU_RUNTIME=OMP | Clang | Intel OpenMP runtime (libiomp5.so) |
ONEDNN_CPU_RUNTIME=TBB | any | TBB (libtbb.so) |
ONEDNN_CPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (libsycl.so), TBB (libtbb.so), OpenCL loader (libOpenCL.so) |
ONEDNN_GPU_RUNTIME=OCL | any | OpenCL loader (libOpenCL.so) |
ONEDNN_GPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (libsycl.so), OpenCL loader (libOpenCL.so), oneAPI Level Zero loader (libze_loader.so) |
ONEDNN_GPU_RUNTIME=ZE | any | oneAPI Level Zero loader (libze_loader.so) |
Common dependencies:
msvcrt.dll)Runtime-specific dependencies:
| Runtime configuration | Compiler | Dependency |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP | Microsoft Visual C++ Compiler | No additional requirements |
ONEDNN_CPU_RUNTIME=OMP | Intel C/C++ Compiler | Intel OpenMP runtime (iomp5.dll) |
ONEDNN_CPU_RUNTIME=TBB | any | TBB (tbb.dll) |
ONEDNN_CPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (sycl.dll), TBB (tbb.dll), OpenCL loader (OpenCL.dll) |
ONEDNN_GPU_RUNTIME=OCL | any | OpenCL loader (OpenCL.dll) |
ONEDNN_GPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (sycl.dll), OpenCL loader (OpenCL.dll), oneAPI Level Zero loader (ze_loader.dll) |
ONEDNN_GPU_RUNTIME=ZE | any | oneAPI Level Zero loader (ze_loader.dll) |
Common dependencies:
libc++.dylib, libSystem.dylib)Runtime-specific dependencies:
| Runtime configuration | Compiler | Dependency |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP | Intel C/C++ Compiler | Intel OpenMP runtime (libiomp5.dylib) |
ONEDNN_CPU_RUNTIME=TBB | any | TBB (libtbb.dylib) |
Ask questions and share your projects in GitHub Discussions. Submit feature requests and bug reports on the GitHub issues page.
You can also contact oneDNN developers via UXL Foundation Slack using #onednn channel.
oneDNN project is governed by the UXL Foundation and you can get involved in this project in multiple ways. It is possible to join the AI Special Interest Group (SIG) meetings where the groups discuss and demonstrate work using this project. Members can also join the Open Source and Specification Working Group meetings.
You can also join the mailing lists for the UXL Foundation to be informed of when meetings are happening and receive the latest information and discussions.
We welcome community contributions to oneDNN. You can find the oneDNN release schedule and work already in progress towards future milestones in Github's Milestones section. If you are looking for a specific task to start, consider selecting from issues that are marked with the help wanted label.
See contribution guidelines to start contributing to oneDNN. You can also contact oneDNN developers and maintainers via UXL Foundation Slack using #onednn channel.
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
oneDNN is licensed under Apache License Version 2.0. Refer to the "LICENSE" file for the full license text and copyright notice.
This distribution includes third party software governed by separate license terms.
3-clause BSD license:
2-clause BSD license:
Apache License Version 2.0:
Boost Software License, Version 1.0:
MIT License:
This third-party software, even if included with the distribution of other software, may be governed by separate license terms, including without limitation, third party license terms, other software license terms, and open source software license terms. These separate license terms govern your use of the third party programs as set forth in the "THIRD-PARTY-PROGRAMS" file.
Security Policy outlines our guidelines and procedures for ensuring the highest level of security and trust for our users who consume oneDNN.
(top 24 of 34)
650 followers · starred Mar 2022
295 followers · starred Oct 2017
553 followers · starred Jun 2022
54 followers · starred Aug 2024
Open-source library of optimized deep learning operations (matmul, convolution, attention) for CPUs (x64, AArch64, RISC-V) and Intel GPUs. Used by PyTorch, TensorFlow, OpenVINO, and ONNX Runtime.
See the codeHighlights | Used By | Quick Start | Installation | Documentation | System Requirements
Support | Governance | Contributing | License | Security
oneDNN is an open-source, cross-platform library of optimized deep learning operations for CPUs and GPUs. It provides highly optimized implementations of matrix multiplication, convolution, attention, normalization, and other operations, and is the acceleration layer behind PyTorch, TensorFlow, OpenVINO, and many other AI frameworks.
The library is optimized for Intel 64/AMD64 architecture based processors, Arm(R) 64-bit Architecture (AArch64)-based processors, and Intel Graphics. oneDNN has experimental support for the following architectures: NVIDIA* GPU, AMD* GPU, OpenPOWER* Power ISA (PPC64), IBMz* (s390x), and RISC-V.
oneDNN project is part of the UXL Foundation.
f32, bf16, f16, fp8, fp4, u8/s8, and
u4/s4 data types with various quantization schemes including OCP microscaling formats.oneDNN is intended for deep learning applications and framework developers interested in improving application performance on CPUs and GPUs. Deep learning practitioners should use one of the applications enabled with oneDNN:
Install pre-built oneDNN from conda-forge:
conda install -c conda-forge onednn
Build and run the matrix multiplication performance example, which
measures matmul throughput for f32, f16, bf16, and s8/u8 data types:
wget https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/matmul_perf.cpp \
https://raw.githubusercontent.com/uxlfoundation/oneDNN/main/examples/example_utils.hpp
g++ matmul_perf.cpp -I$CONDA_PREFIX/include -L$CONDA_PREFIX/lib \
-ldnnl -o matmul_perf
LD_LIBRARY_PATH=$CONDA_PREFIX/lib ./matmul_perf cpu
Next steps:
If oneDNN is useful in your work, consider giving the project a star on GitHub. It helps others discover it.
You can download and install the oneDNN library using one of the following options:
oneDNN supports platforms based on the following architectures:
WARNING
Power ISA (PPC64), IBMz (s390x), and RISC-V (RV64) support is experimental with limited testing validation.
The library is optimized for the following CPUs:
On a CPU based on Intel 64 or on AMD64 architecture, oneDNN detects the instruction set architecture (ISA) at runtime and uses just-in-time (JIT) code generation to deploy the code optimized for the latest supported ISA. Future ISAs may have initial support in the library disabled by default and require the use of run-time controls to enable them. See CPU dispatcher control for more details.
WARNING
On macOS, applications that use oneDNN may need to request special entitlements if they use the hardened runtime. See the Linking Guide for more details.
The library is optimized for the following GPUs:
oneDNN supports systems meeting the following requirements:
The following tools are required to build oneDNN documentation:
Configurations of CPU and GPU engines may introduce additional build time dependencies.
oneDNN CPU engine is used to execute primitives on Intel 64/AMD64 based processors, 64-bit Arm Architecture (AArch64) processors, 64-bit Power ISA (PPC64) processors, IBMz (s390x), and compatible devices.
The CPU engine is built by default but can be disabled at build time by setting
ONEDNN_CPU_RUNTIME to NONE. In this case, GPU engine must be enabled.
The CPU engine can be configured to use the OpenMP, TBB or SYCL runtime.
The following additional requirements apply:
Some implementations rely on OpenMP 4.0 SIMD extensions. For the best performance results on Intel Architecture Processors we recommend using the Intel C++ Compiler.
On a CPU based on Arm AArch64 architecture, oneDNN CPU engine can be built with Arm Compute Library (ACL) integration. ACL is an open-source library for machine learning applications and provides AArch64 optimized implementations of core functions. This functionality currently requires that ACL is downloaded and built separately. See Build from Source section of the Developer Guide for details. The minimum supported version of ACL is 53.1.0.
oneDNN GPU engine is used to execute primitives on various accelerators
including Intel integrated and discrete GPUs, NVIDIA GPUs, AMD GPUs, and
other devices supporting SYCL programming language. The GPU engine is disabled
in the default build configuration and can be enabled by setting
ONEDNN_GPU_RUNTIME build option to value other than NONE. Target accelerator
vendor must be selected at build time using ONEDNN_GPU_VENDOR build option.
WARNING
Linux will reset GPU when kernel runtime exceeds several seconds. The user can prevent this behavior by disabling hangcheck for Intel GPU driver. Windows has built-in timeout detection and recovery mechanism that results in similar behavior. The user can prevent this behavior by increasing the TdrDelay value.
The following additional requirements apply for Intel integrated and discrete GPUs:
The following additional requirements apply for NVIDIA GPUs:
WARNING
NVIDIA GPU support is experimental. General information, build instructions, and implementation limitations are available in the NVIDIA backend readme.
The following additional requirements apply for AMD GPUs:
WARNING
AMD GPU support is experimental. General information, build instructions, and implementation limitations are available in the AMD backend readme.
Other devices supporting SYCL programming model require oneAPI DPC++/C++ Compiler that supports the target GPU. Refer to generic GPU vendor documentation for additional details.
When oneDNN is built from source, the library runtime dependencies and specific versions are defined by the build environment.
Common dependencies:
libc.so)libstdc++.so)libdl.so)libm.so)libpthread.so)Runtime-specific dependencies:
| Runtime configuration | Compiler | Dependency |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP | GCC | GNU OpenMP runtime (libgomp.so) |
ONEDNN_CPU_RUNTIME=OMP | Intel C/C++ Compiler | Intel OpenMP runtime (libiomp5.so) |
ONEDNN_CPU_RUNTIME=OMP | Clang | Intel OpenMP runtime (libiomp5.so) |
ONEDNN_CPU_RUNTIME=TBB | any | TBB (libtbb.so) |
ONEDNN_CPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (libsycl.so), TBB (libtbb.so), OpenCL loader (libOpenCL.so) |
ONEDNN_GPU_RUNTIME=OCL | any | OpenCL loader (libOpenCL.so) |
ONEDNN_GPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (libsycl.so), OpenCL loader (libOpenCL.so), oneAPI Level Zero loader (libze_loader.so) |
ONEDNN_GPU_RUNTIME=ZE | any | oneAPI Level Zero loader (libze_loader.so) |
Common dependencies:
msvcrt.dll)Runtime-specific dependencies:
| Runtime configuration | Compiler | Dependency |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP | Microsoft Visual C++ Compiler | No additional requirements |
ONEDNN_CPU_RUNTIME=OMP | Intel C/C++ Compiler | Intel OpenMP runtime (iomp5.dll) |
ONEDNN_CPU_RUNTIME=TBB | any | TBB (tbb.dll) |
ONEDNN_CPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (sycl.dll), TBB (tbb.dll), OpenCL loader (OpenCL.dll) |
ONEDNN_GPU_RUNTIME=OCL | any | OpenCL loader (OpenCL.dll) |
ONEDNN_GPU_RUNTIME=SYCL | Intel oneAPI DPC++ Compiler | Intel oneAPI DPC++ Compiler runtime (sycl.dll), OpenCL loader (OpenCL.dll), oneAPI Level Zero loader (ze_loader.dll) |
ONEDNN_GPU_RUNTIME=ZE | any | oneAPI Level Zero loader (ze_loader.dll) |
Common dependencies:
libc++.dylib, libSystem.dylib)Runtime-specific dependencies:
| Runtime configuration | Compiler | Dependency |
|---|---|---|
ONEDNN_CPU_RUNTIME=OMP | Intel C/C++ Compiler | Intel OpenMP runtime (libiomp5.dylib) |
ONEDNN_CPU_RUNTIME=TBB | any | TBB (libtbb.dylib) |
Ask questions and share your projects in GitHub Discussions. Submit feature requests and bug reports on the GitHub issues page.
You can also contact oneDNN developers via UXL Foundation Slack using #onednn channel.
oneDNN project is governed by the UXL Foundation and you can get involved in this project in multiple ways. It is possible to join the AI Special Interest Group (SIG) meetings where the groups discuss and demonstrate work using this project. Members can also join the Open Source and Specification Working Group meetings.
You can also join the mailing lists for the UXL Foundation to be informed of when meetings are happening and receive the latest information and discussions.
We welcome community contributions to oneDNN. You can find the oneDNN release schedule and work already in progress towards future milestones in Github's Milestones section. If you are looking for a specific task to start, consider selecting from issues that are marked with the help wanted label.
See contribution guidelines to start contributing to oneDNN. You can also contact oneDNN developers and maintainers via UXL Foundation Slack using #onednn channel.
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
oneDNN is licensed under Apache License Version 2.0. Refer to the "LICENSE" file for the full license text and copyright notice.
This distribution includes third party software governed by separate license terms.
3-clause BSD license:
2-clause BSD license:
Apache License Version 2.0:
Boost Software License, Version 1.0:
MIT License:
This third-party software, even if included with the distribution of other software, may be governed by separate license terms, including without limitation, third party license terms, other software license terms, and open source software license terms. These separate license terms govern your use of the third party programs as set forth in the "THIRD-PARTY-PROGRAMS" file.
Security Policy outlines our guidelines and procedures for ensuring the highest level of security and trust for our users who consume oneDNN.
(top 24 of 34)
650 followers · starred Mar 2022
295 followers · starred Oct 2017
553 followers · starred Jun 2022
54 followers · starred Aug 2024