oneAPI (compute acceleration)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
oneAPI
Repositorygithub.com/oneapi-src
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemCross-platform
    PlatformCross-platform
    TypeOpen-source software specification for parallel programming

    oneAPI is an open standard, adopted by Intel,[1] for a unified application programming interface (API) intended to be used across different computing accelerator (coprocessor) architectures, including GPUs, AI accelerators and field-programmable gate arrays. It is intended to eliminate the need for developers to maintain separate code bases, multiple programming languages, tools, and workflows for each architecture.[2][3][4][5]

    oneAPI competes with other GPU computing stacks: CUDA by Nvidia and ROCm by AMD.

    Specification

    [edit | edit source]

    The oneAPI specification extends existing developer programming models to enable multiple hardware architectures through a data-parallel language, a set of library APIs, and a low-level hardware interface to support cross-architecture programming. It builds upon industry standards and provides an open, cross-platform developer stack.[6][7]

    Data Parallel C++

    [edit | edit source]

    DPC++[8][9] is a programming language implementation of oneAPI, built upon the ISO C++ and Khronos Group SYCL standards.[10] DPC++ is an implementation of SYCL with extensions that are proposed for inclusion in future revisions of the SYCL standard, including: unified shared memory, group algorithms, and sub-groups.[11][12][13]

    Libraries

    [edit | edit source]

    The set of APIs[6] spans several domains, including libraries for linear algebra, deep learning, machine learning, video processing, and others.

    Library Name Short

    Name

    Description
    oneAPI DPC++ Library oneDPL Algorithms and functions to speed DPC++ kernel programming
    oneAPI Math Kernel Library oneMKL Math routines including matrix algebra, FFT, and vector math
    oneAPI Data Analytics Library oneDAL Machine learning and data analytics functions
    oneAPI Deep Neural Network Library oneDNN Neural networks functions for deep learning training and inference
    oneAPI Collective Communications Library oneCCL Communication patterns for distributed deep learning
    oneAPI Threading Building Blocks oneTBB Threading and memory management template library
    oneAPI Video Processing Library oneVPL Real-time video encode, decode, transcode, and processing

    The source code of parts of the above libraries is available on GitHub.[14]

    The oneAPI documentation also lists the "Level Zero" API defining the low-level direct-to-metal interfaces and a set of ray tracing components with its own APIs.[6]

    Licensing

    [edit | edit source]

    The licensing of oneAPI components falls into three major categories: open‑source permissive licences, proprietary vendor licences, and hybrid models that combine elements of both. Here an overview of some components:

    Component Typical license / notes Source URL
    oneAPI Threading Building Blocks (oneTBB) “Apache 2.0 – open‑source project under UXL Foundation” https://github.com/uxlfoundation/oneTBB
    oneAPI Data Analytics Library (oneDAL) “Apache 2.0 – open‑source; Intel toolkit binaries may use Intel EULA” https://github.com/uxlfoundation/oneDAL
    oneAPI Deep Neural Network Library (oneDNN) “Apache 2.0 – open‑source under UXL Foundation” https://github.com/uxlfoundation/oneDNN
    oneAPI DPC++ Library (oneDPL) “Apache 2.0 – open‑source data‑parallel algorithms library” https://github.com/oneapi-src/oneDPL
    oneAPI Math Library (oneMath) “Apache 2.0 – unified math interface library” https://github.com/uxlfoundation/oneMath
    oneAPI Math Kernel Library (oneMKL) “Intel Simplified Software License (ISSL) – binary redistribution under Intel terms” https://www.intel.com/content/www/us/en/developer/articles/tool/onemkl-license-faq.html
    oneAPI Collective Communications Library (oneCCL) “Apache 2.0 – open‑source communication layer” https://github.com/uxlfoundation/oneCCL
    oneAPI Video Processing Library (oneVPL) “Apache 2.0 – open‑source media‑processing interface” https://github.com/uxlfoundation/oneVPL
    oneAPI DPC++/C++ Compiler “Open‑source front‑end under Apache 2.0 with LLVM exceptions; Intel binaries under Intel EULA” https://github.com/intel/llvm
    oneAPI Level Zero Loader & Runtime “MIT License – open‑source GPU/accelerator runtime” https://github.com/oneapi-src/level-zero
    Intel Integrated Performance Primitives (IPP) “Intel Simplified Software License (ISSL) – closed‑source library in oneAPI toolkit” https://community.intel.com/t5/Intel-oneAPI‑Math‑Kernel‑Library/Using‑community‑license‑of‑Intel‑MKL‑for‑multiple‑users/m-p/1095247
    Intel oneAPI Base Toolkit (bundle) “Commercial license (Intel EULA) – free download but subject to Intel’s terms” https://alfasoft.com/ab/software/development-tools/high-performance-computing-hpc/intel-oneapi-base-toolkit/
    Intel oneAPI Base & IoT Toolkit (bundle) “Named‑user or seat‑based commercial license under Intel EULA” https://alfasoft.com/ab/software/development-tools/mobile-and-embedded/intel-oneapi-base-iot-toolkit/
    Intel oneAPI HPC Toolkit (bundle) “Commercial binaries under Intel EULA/ISSL; not fully open‑source” https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-linux/2023-0/list-available-toolkits-components-and-runtime.html
    Intel oneAPI IoT Toolkit (bundle) “Commercial license for embedded/IoT workflows (Intel EULA)” https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-linux/2023-0/list-available-toolkits-components-and-runtime.html
    Intel oneAPI Rendering Toolkit (bundle) “Some sub‑components open‑source (e.g., Embree/OSPRay) under Apache 2.0; toolkit packaging commercial” https://oneapi-src.github.io/oneapi-ci/

    Permissive open‑source licences

    [edit | edit source]

    These licences (for example the Apache License 2.0) allow broad rights such as use, modification, distribution (in source or binary form) and carry OSI‑approval. Many oneAPI libraries use such licences, enabling community contribution and redistribution under minimal restriction.

    Proprietary vendor licences

    [edit | edit source]

    Some oneAPI components may be distributed under proprietary or commercial licences (for example Intel’s End‑User Licence Agreement (EULA) or the Intel Simplified Software Licence (ISSL)). Software released under the ISSL license are considered to not fully comply with standard open‑source definitions [15].

    Hardware abstraction layer

    [edit | edit source]

    oneAPI Level Zero,[16][17][18] the low-level hardware interface, defines a set of capabilities and services that a hardware accelerator needs to interface with compiler runtimes and other developer tools.

    Implementations

    [edit | edit source]

    Intel has released oneAPI production toolkits that implement the specification and add CUDA code migration, analysis, and debug tools.[19][20][21] These include the Intel oneAPI DPC++/C++ Compiler,[22] Intel Fortran Compiler, Intel VTune Profiler[23] and multiple performance libraries.

    Codeplay has released an open-source layer[24][25][26] to allow oneAPI and SYCL/DPC++ to run atop Nvidia GPUs via CUDA.

    University of Heidelberg has developed a SYCL/DPC++ implementation for both AMD and Nvidia GPUs.[27]

    Huawei released a DPC++ compiler for their Ascend AI Chipset[28]

    Fujitsu has created an open-source ARM version of the oneAPI Deep Neural Network Library (oneDNN)[29] for their Fugaku CPU.

    Unified Acceleration Foundation (UXL) and the future for oneAPI

    [edit | edit source]

    Unified Acceleration Foundation (UXL) is a new technology consortium that are working on the continuation of the OneAPI initiative, with the goal to create a new open standard accelerator software ecosystem, related open standards and specification projects through Working Groups and Special Interest Groups (SIGs). The goal will compete with Nvidia's CUDA. The main companies behind it are Intel, Google, ARM, Qualcomm, Samsung, Imagination, and VMware.[30]

    References

    [edit | edit source]
    1. ^ Fortenberry & Tomov 2022, p. 22.
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ a b c Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    9. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    11. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    13. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    14. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    15. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    16. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    17. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    18. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    19. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    20. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    21. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    22. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    23. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    24. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    25. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    26. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    27. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    28. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    29. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    30. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).

    Sources

    [edit | edit source]
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). .
    [edit | edit source]