# OneAPI (aceleración de cómputo)

oneAPI es un estándar abierto, con marca registrada de Intel, para una interfaz de programación de aplicaciones unificada destinada a ser utilizada en diferentes arquitecturas de aceleradores informáticos ( coprocesador ), incluidas GPU, aceleradores de IA y matrices de compuertas programables en campo. Su objetivo es eliminar la necesidad de que los desarrolladores mantengan bases de código separadas, múltiples lenguajes de programación y diferentes herramientas y flujos de trabajo para cada arquitectura.

## La especificación oneAPI

La especificación oneAPI amplía los modelos de programación de desarrolladores existentes para habilitar múltiples arquitecturas de hardware a través de un lenguaje de datos paralelos, un conjunto de API de biblioteca y una interfaz de hardware de bajo nivel para admitir la programación entre arquitecturas. Se basa en los estándares de la industria y proporciona una pila de desarrolladores abierta y multiplataforma.

## Data Parallel C++

DPC++ es un lenguaje abierto de arquitectura cruzada basado en los estándares ISO C++ y Khronos Group SYCL. DPC++ es una implementación de SYCL con extensiones que se proponen para su inclusión en futuras revisiones del estándar SYCL. Un ejemplo de esto es la contribución de la memoria compartida unificada, los algoritmos de grupo y los subgrupos a SYCL 2020.

## Bibliotecas oneAPI

El conjunto de API abarca varios dominios que se benefician de la aceleración, incluidas bibliotecas para álgebra lineal, aprendizaje profundo, aprendizaje automático, procesamiento de video y otros.
| Nombre de la biblioteca | Nombre Corto | Descripción |
| Biblioteca oneAPI DPC++ | oneDPL | Algoritmos y funciones para acelerar la programación del núcleo DPC++ |
| Biblioteca del núcleo matemático oneAPI | oneMKL | Rutinas matemáticas que incluyen álgebra matricial, FFT y matemática vectorial |
| Biblioteca de análisis de datos oneAPI | oneDAL | Funciones de aprendizaje automático y análisis de datos |
| Biblioteca de redes neuronales profundas oneAPI | oneDNN | Funciones de redes neuronales para entrenamiento e inferencia de aprendizaje profundo |
| Biblioteca de comunicaciones colectivas oneAPI | oneCCL | Patrones de comunicación para el aprendizaje profundo distribuido |
| Bloques de creación de subprocesos de oneAPI | oneTBB | Biblioteca de plantillas de gestión de memoria y creación de subprocesos |
| Biblioteca de procesamiento de video oneAPI | oneVPL | Codificación, decodificación, transcodificación y procesamiento de video en tiempo real |
El código fuente de la mayoría de las implementaciones de las bibliotecas anteriores está disponible en GitHub.
La documentación de oneAPI también enumera la API de "Nivel cero" que define las interfaces directas al metal de bajo nivel y un conjunto de componentes de trazado de rayos con sus propias API.

## Capa de abstracción de hardware

oneAPI Level Zero, la interfaz de hardware de bajo nivel, define un conjunto de capacidades y servicios que un acelerador de hardware necesita para interactuar con los tiempos de ejecución del compilador y otras herramientas de desarrollo.

## Implementaciones

Intel ha lanzado kits de herramientas oneAPI de calidad de producción que implementan la especificación y agregan herramientas de migración, análisis y depuración de código CUDA. Estos incluyen Intel oneAPI DPC++/C++ Compiler, Intel Fortran Compiler, Intel VTune Profiler y varias bibliotecas de rendimiento.
Codeplay ha lanzado una capa de código abierto para permitir que oneAPI y SYCL/DPC++ se ejecuten sobre GPU Nvidia a través de CUDA.
La Universidad de Heidelberg ha desarrollado una implementación SYCL/DPC++ para GPU AMD y Nvidia.
Huawei lanzó un compilador DPC++ para su Ascend AI Chipset
Fujitsu ha creado una versión ARM de código abierto de oneAPI Deep Neural Network Library (oneDNN) para su CPU Fugaku.