CUDA ( Compute Unified Device Architecture ) es una plataforma de computación paralela y una interfaz de programación de aplicaciones (API) propietaria [ 3 ] desarrollada por Nvidia que permite que el software utilice ciertos tipos de unidades de procesamiento gráfico (GPU) para el procesamiento acelerado de propósito general, ampliando significativamente su utilidad en inteligencia artificial , computación científica y de alto rendimiento . CUDA se creó en 2004 y se lanzó oficialmente en 2007. [ 4 ] Cuando se presentó, el nombre era un acrónimo de Compute Unified Device Architecture , [ 5 ] pero Nvidia posteriormente abandonó el significado inicial del acrónimo y ahora rara vez lo amplía. [ 6 ]
CUDA es tanto una capa de software que gestiona datos, proporcionando acceso directo a la GPU y la CPU según sea necesario, como una biblioteca de API que permiten la computación paralela. [ 7 ] [ 8 ] Además de controladores y núcleos de tiempo de ejecución , la plataforma CUDA incluye compiladores, bibliotecas y herramientas para desarrolladores que ayudan a los programadores.
CUDA está escrito en el lenguaje de programación C , pero está diseñado para funcionar con otros lenguajes de programación como C++ , Fortran , Python y Julia . Esta accesibilidad facilita a los especialistas en programación paralela el uso de recursos de GPU, a diferencia de las API anteriores como Direct3D y OpenGL , que requieren conocimientos avanzados de programación gráfica. [ 9 ] Las GPU con tecnología CUDA admiten marcos de programación como OpenMP , OpenACC y OpenCL . [ 10 ] [ 7 ]
unidad de procesamiento gráfico
La unidad de procesamiento gráfico (GPU) es un procesador especializado. Satisface las exigencias de tareas de alta resolución y computación intensiva en tiempo real , como los gráficos 3D . Para 2012, las GPU habían evolucionado hasta convertirse en sistemas multinúcleo altamente paralelos que permitían la manipulación eficiente de grandes bloques de datos . Este diseño es más eficaz que las unidades centrales de procesamiento (CPU) de propósito general para algoritmos en situaciones donde el procesamiento de grandes bloques de datos se realiza en paralelo, como por ejemplo:
Historia
Ian Buck
CUDA tiene sus orígenes a principios de la década de 2000, cuando Ian Buck , estudiante de doctorado en informática en la Universidad de Stanford , comenzó a experimentar con el uso de GPU para fines más allá de la renderización de gráficos. Buck se había interesado en las GPU durante sus estudios de pregrado en la Universidad de Princeton , inicialmente a través de los videojuegos . Tras graduarse, realizó prácticas en Nvidia, donde adquirió un conocimiento más profundo de la arquitectura de las GPU. En Stanford, construyó un equipo de juegos 8K con 32 tarjetas gráficas GeForce , originalmente para llevar al límite el rendimiento gráfico en juegos como Quake y Doom . Sin embargo, sus intereses se orientaron hacia la exploración del potencial de las GPU para la computación paralela de propósito general . [ 11 ]
Con ese fin, Buck desarrolló Brook , un lenguaje de programación diseñado para permitir la computación de propósito general en GPU. Su trabajo atrajo el apoyo de Nvidia y la Agencia de Proyectos de Investigación Avanzada de Defensa (DARPA). En 2004, Nvidia contrató a Buck y lo emparejó con John Nickolls, [ 12 ] entonces director de arquitectura para computación de GPU. Juntos, comenzaron a transformar Brook en CUDA. [ 11 ] CUDA se lanzó oficialmente en 2007.
CUDA se convirtió en un elemento central de la estrategia de la empresa para posicionar las GPU como hardware versátil para aplicaciones científicas. Para 2015, el desarrollo de CUDA se centró cada vez más en acelerar las cargas de trabajo de aprendizaje automático y redes neuronales artificiales . [ 13 ]
Ontología
La siguiente tabla ofrece un resumen aproximado de la ontología CUDA .
Habilidades de programación
- Copiar datos de la memoria principal a la memoria de la GPU.
- La CPU inicia el núcleo de cómputo de la GPU.
- Los núcleos CUDA de la GPU ejecutan el kernel en paralelo.
- Copiar los datos resultantes de la memoria de la GPU a la memoria principal.
La plataforma CUDA es accesible para los desarrolladores de software a través de bibliotecas aceleradas por CUDA, directivas de compilador como OpenACC y extensiones a lenguajes de programación estándar de la industria, incluidos C , C++ , Fortran y Python . Los programadores de C/C++ pueden usar 'CUDA C/C++', compilado a PTX con nvcc ( el compilador de C/C++ basado en LLVM de Nvidia) [ 14 ] o con clang. [ 15 ] Los programadores de Fortran pueden usar 'CUDA Fortran', compilado con el compilador PGI CUDA Fortran de The Portland Group .Los programadores de Python pueden usar la biblioteca cuPyNumeric para acelerar las aplicaciones en las GPU de Nvidia.
Además de las bibliotecas, las directivas del compilador, CUDA C/C++ y CUDA Fortran, la plataforma CUDA admite otras interfaces computacionales, incluidas OpenCL del Grupo Khronos , [ 16 ] DirectCompute de Microsoft , OpenGL Compute Shader y C++ AMP . [ 17 ] También hay disponibles adaptadores de terceros para Python , Perl , Fortran, Java , Ruby , Lua , Common Lisp , Haskell , R , MATLAB , IDL , Julia y soporte nativo en Mathematica .
En la industria de los videojuegos , las GPU se utilizan para la renderización de gráficos y para los cálculos de física del juego (efectos físicos como escombros, humo, fuego y fluidos); ejemplos de ello son PhysX y Bullet . CUDA también se ha utilizado para acelerar aplicaciones no gráficas en biología computacional , criptografía y otros campos en un orden de magnitud o más. [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ]
CUDA proporciona una API de bajo nivel (CUDA Driver API, no de código único) y una API de alto nivel (CUDA Runtime API, de código único). El SDK inicial de CUDA se hizo público el 15 de febrero de 2007 para Microsoft Windows y Linux . Posteriormente se añadió compatibilidad con Mac OS X en la versión 2.0, [ 23 ] que reemplaza a la versión beta publicada el 14 de febrero de 2008. [ 24 ] CUDA funciona con todas las GPU de Nvidia desde la serie G8x en adelante, incluidas GeForce , Quadro y la línea Tesla . CUDA es compatible con la mayoría de los sistemas operativos estándar.
CUDA 8.0 incluye las siguientes bibliotecas (para compilación y tiempo de ejecución, en orden alfabético):
- cuBLAS – Biblioteca de subrutinas básicas de álgebra lineal de CUDA
- CUDART – Biblioteca de tiempo de ejecución de CUDA
- cuFFT – Biblioteca de transformada rápida de Fourier de CUDA
- cuRAND – Biblioteca de generación de números aleatorios de CUDA
- cuSOLVER: colección de solucionadores directos densos y dispersos basados en CUDA.
- cuSPARSE - Biblioteca CUDA Sparse Matrix
- NPP – Biblioteca de primitivas de rendimiento de NVIDIA
- nvGRAPH – Biblioteca de análisis de gráficos de NVIDIA
- NVML – Biblioteca de administración de NVIDIA
- NVRTC – Biblioteca de compilación en tiempo de ejecución de NVIDIA para CUDA C++
CUDA 8.0 incluye los siguientes componentes de software:
- nView – Software de gestión de escritorio NVIDIA nView
- NVWMI – Kit de herramientas de gestión empresarial de NVIDIA
- GameWorks PhysX es un motor de física para juegos multiplataforma.
CUDA 9.0–9.2 incluye estos otros componentes:
- CUTLASS 1.0 – algoritmos de álgebra lineal personalizados,
- El decodificador de vídeo de NVIDIA quedó obsoleto en CUDA 9.2; ahora está disponible en el SDK de códecs de vídeo de NVIDIA.
CUDA 10 viene con estos otros componentes:
- nvJPEG: procesamiento JPEG híbrido (CPU y GPU)
CUDA 11.0–11.8 viene con estos otros componentes: [ 25 ] [ 26 ] [ 27 ] [ 28 ]
- CUB es una de las bibliotecas de C++ más recientes y compatibles.
- Soporte para GPU de instancias múltiples de MIG
- nvJPEG2000 – Codificador y decodificador JPEG 2000
Ventajas
CUDA presenta varias ventajas sobre la computación tradicional de propósito general en GPU (GPGPU) que utiliza API gráficas:
- Lecturas dispersas : el código puede leer desde direcciones arbitrarias en la memoria.
- Memoria virtual unificada (CUDA 4.0 y superior)
- Memoria unificada (CUDA 6.0 y superior)
- Memoria compartida : CUDA expone una región de memoria compartida rápida que puede ser compartida entre hilos. Esto puede utilizarse como una caché administrada por el usuario, lo que permite un mayor ancho de banda que el que se puede lograr con las búsquedas de texturas. [ 29 ]
- Descargas y lecturas más rápidas hacia y desde la GPU
- Compatibilidad total con operaciones enteras y a nivel de bits, incluyendo búsquedas de texturas enteras.
Limitaciones
- Tanto para el ordenador anfitrión como para el dispositivo GPU, todo el código fuente de CUDA se procesa ahora según las reglas de sintaxis de C++. [ 30 ] Esto no siempre fue así. Las versiones anteriores de CUDA se basaban en las reglas de sintaxis de C. [ 31 ] Al igual que en el caso más general de compilar código C con un compilador de C++, es posible que el código fuente antiguo de CUDA de estilo C no se compile o no se comporte como se esperaba originalmente.
- La interoperabilidad con lenguajes de renderizado como OpenGL es unidireccional: OpenGL tiene acceso a la memoria CUDA registrada, pero CUDA no tiene acceso a la memoria de OpenGL.
- La copia de datos entre la memoria del host y la del dispositivo puede provocar una disminución del rendimiento debido al ancho de banda y la latencia del bus del sistema (esto se puede mitigar parcialmente con transferencias de memoria asíncronas, gestionadas por el motor DMA de la GPU).
- Para obtener el mejor rendimiento, los hilos deben ejecutarse en grupos de al menos 32, con un número total de hilos que puede ascender a miles. Las bifurcaciones en el código del programa no afectan significativamente al rendimiento, siempre que cada uno de los 32 hilos siga la misma ruta de ejecución; el modelo de ejecución SIMD se convierte en una limitación importante para cualquier tarea inherentemente divergente (por ejemplo, recorrer una estructura de datos de partición espacial durante el trazado de rayos ).
- No se dispone de funciones de emulación ni de respaldo para las revisiones modernas.
- En ocasiones, el código C++ válido puede ser marcado como no válido e impedir la compilación debido a la forma en que el compilador aborda la optimización para las limitaciones del dispositivo GPU de destino.
- La información de tipo en tiempo de ejecución de C++ (RTTI) y el manejo de excepciones al estilo C++ solo son compatibles con el código del host, no con el código del dispositivo.
- En precisión simple en dispositivos CUDA de primera generación con capacidad de cómputo 1.x, los números desnormalizados no son compatibles y se inicializan a cero, y la precisión de las operaciones de división y raíz cuadrada es ligeramente inferior a la de las operaciones matemáticas de precisión simple compatibles con IEEE 754. Los dispositivos compatibles con capacidad de cómputo 2.0 y superiores admiten números desnormalizados, y las operaciones de división y raíz cuadrada son compatibles con IEEE 754 de forma predeterminada. Sin embargo, los usuarios pueden obtener las operaciones matemáticas más rápidas de nivel de juego de los dispositivos con capacidad de cómputo 1.x si lo desean, configurando las opciones del compilador para deshabilitar las divisiones y raíces cuadradas precisas, y habilitar la inicialización a cero de los números desnormalizados. [ 32 ]
- A diferencia de OpenCL , las GPU compatibles con CUDA solo están disponibles a través de Nvidia, ya que es un software propietario. [ 33 ] [ 3 ] Los intentos de implementar CUDA en otras GPU incluyen:
- Proyecto Coriander: Convierte el código fuente de CUDA C++11 a OpenCL 1.2 C. Una bifurcación de CUDA-on-CL destinada a ejecutar TensorFlow . [ 34 ] [ 35 ] [ 36 ]
- CU2CL: Convierte CUDA 3.2 C++ a OpenCL C. [ 37 ]
- GPUOpen HIP: Una capa de abstracción ligera sobre CUDA y ROCm diseñada para GPU de AMD y Nvidia. Incluye una herramienta de conversión para importar código fuente CUDA C++. Es compatible con CUDA 4.0, C++11 y float16.
- ZLUDA es un reemplazo directo para CUDA en GPU de AMD y anteriormente en GPU de Intel con un rendimiento casi nativo. [ 38 ] El desarrollador, Andrzej Janik, fue contratado por separado por Intel y AMD para desarrollar el software en 2021 y 2022, respectivamente. Sin embargo, ninguna de las compañías decidió lanzarlo oficialmente debido a la falta de un caso de uso comercial. El contrato de AMD incluía una cláusula que permitía a Janik publicar su código para AMD de forma independiente, lo que le permitió lanzar la nueva versión que solo admite GPU de AMD. [ 39 ]
- ChipStar puede compilar y ejecutar programas CUDA/HIP en plataformas OpenCL 3.0 avanzadas o de nivel cero. [ 40 ]
- SCALE es un kit de herramientas de programación compatible con CUDA para la compilación anticipada de código fuente CUDA en GPU AMD, con el objetivo de ampliar la compatibilidad a otras GPU en el futuro. [ 41 ]
Ejemplo
Este código de ejemplo en C++ carga una textura de una imagen en un array en la GPU:
textura < float , 2 , cudaReadModeElementType > tex ;void foo () { cudaArray * cu_array ;// Asignar array cudaChannelFormatDesc description = cudaCreateChannelDesc < float > (); cudaMallocArray ( & cu_array , & description , width , height );// Copiar datos de imagen a la matriz cudaMemcpyToArray ( cu_array , image , width * height * sizeof ( float ), cudaMemcpyHostToDevice );// Establecer parámetros de textura ( predeterminado ) tex.addressMode [ 0 ] = cudaAddressModeClamp ; tex.addressMode [ 1 ] = cudaAddressModeClamp ; tex.filterMode = cudaFilterModePoint ; tex.normalized = false ; // no normalizar coordenadas// Vincula la matriz a la textura cudaBindTextureToArray ( tex , cu_array );// Ejecutar kernel dim3 blockDim ( 16 , 16 , 1 ); dim3 gridDim (( ancho + blockDim . x - 1 ) / blockDim . x , ( alto + blockDim . y - 1 ) / blockDim . y , 1 ); kernel <<< gridDim , blockDim , 0 >>> ( d_data , alto , ancho );// Desvincula el array de la textura cudaUnbindTexture ( tex ); }__global__ void kernel ( float * odata , int height , int width ) { unsigned int x = blockIdx . x * blockDim . x + threadIdx . x ; unsigned int y = blockIdx . y * blockDim . y + threadIdx . y ; if ( x < width && y < height ) { float c = tex2D ( tex , x , y ); odata [ y * width + x ] = c ; } }A continuación se muestra un ejemplo en Python que calcula el producto de dos matrices en la GPU. Las bibliotecas no oficiales para Python se pueden obtener de PyCUDA . [ 42 ]
import numpy import pycuda.autoinitfrom numpy.typing import NDArray , float32 from pycuda.compiler import SourceModule from pycuda.driver import Function , In , Outmod : SourceModule = SourceModule ( """ __global__ void multiply_them(float* dest, float* a, float* b) { const int i = threadIdx.x; dest[i] = a[i] * b[i]; } """ )multiplicar_ellos : Función = mod.obtener_función ( " multiplicar_ellos " )a : NDArray [ float32 ] = numpy . aleatorio . randn ( 400 ) . astype ( numpy . float32 ) b : NDArray [ float32 ] = numpy . aleatorio . randn ( 400 ) . comotipo ( numpy . float32 )dest : NDArray [ float32 ] = numpy.zeros_like ( a ) multiply_them ( Out ( dest ), In ( a ), In ( b ) , block = ( 400 , 1 , 1 ) )imprimir ( destino - a * b )En el programa pycublas se pueden encontrar enlaces adicionales de Python para simplificar las operaciones de multiplicación de matrices . [ 43 ]
importar numpyfrom pycublas import CUBLASMatrixA : CUBLASMatrix = CUBLASMatrix ( numpy.mat ([[ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ], numpy.float32 )) B : CUBLASMatrix = CUBLASMatrix ( numpy.mat ([ [ 2 , 3 ] , [ 4 , 5 ] , [ 6 , 7 ] ] , numpy.float32 ) ) C : CUBLASMatrix = A * B print ( C.np_mat ( ) )mientras que CuPy reemplaza directamente a NumPy: [ 44 ]
importar cupyfrom cupy.typing import NDArray , float64a : NDArray [ float64 ] = cupy . aleatorio . randn ( 400 ) b : NDArray [ float64 ] = cupy . aleatorio . rand ( 400 )destino : NDArray [ float64 ] = cupy . ceros_como ( a )imprimir ( destino - a * b )GPU compatibles
Nota sobre la notación: la capacidad de cómputo XY también se escribe como SMXY o sm_XY (por ejemplo, 10.3 como SM103 o sm_103) en el software profesional de Nvidia y en el código que Nvidia ha aportado a LLVM. [ 45 ]
A continuación se muestra una tabla con las capacidades de cómputo de CUDA compatibles, basadas en la versión del SDK de CUDA y la microarquitectura, listadas por nombre en clave:
Nota: CUDA SDK 10.2 es la última versión oficial para macOS, ya que las versiones posteriores no ofrecerán soporte para macOS.
Capacidad de cómputo de CUDA por versión con semiconductores de GPU y modelos de tarjetas GPU asociados (separados por sus diversas áreas de aplicación):
* – Productos exclusivos para fabricantes de equipos originales (OEM)
- ↑ CUDA Toolkit 13.0 cambió el nombre del SM101 para las GPU Thor a SM110.
Características y especificaciones de la versión
Nota: Una GPU con mayor capacidad de cómputo puede ejecutar código PTX diseñado para una GPU con menor capacidad de cómputo. Sin embargo, es posible compilar código CUDA de forma que solo funcione en una familia (misma "X") de GPU; si el código existente se compila de esta manera, será necesario recompilarlo para que funcione en una GPU más reciente. [ 45 ]
Tipos de datos
Tipos de punto flotante
Compatibilidad con versiones
Nota: Cualquier línea faltante o entrada vacía refleja cierta falta de información sobre ese elemento en particular. [ 67 ]
núcleos tensoriales
Nota: Cualquier línea faltante o entrada vacía refleja cierta falta de información sobre ese elemento en particular. [ 71 ] [ 72 ] [ 73 ] [ 74 ] [ 75 ] [ 76 ]
Especificaciones técnicas
Arquitectura multiprocesador
Para obtener más información, consulte la Guía de programación de Nvidia CUDA C++. [ 122 ]
Usos de la arquitectura CUDA
- Renderizado acelerado de gráficos 3D
- Interconversión acelerada de formatos de archivo de vídeo
- Cifrado , descifrado y compresión acelerados
- Bioinformática , por ejemplo, secuenciación de ADN NGS BarraCUDA [ 123 ]
- Cálculos distribuidos, como la predicción de la conformación nativa de las proteínas.
- Simulaciones de análisis médicos, por ejemplo, realidad virtual basada en imágenes de tomografía computarizada (TC) y resonancia magnética (RM) .
- Simulaciones físicas, [ 124 ] particularmente en dinámica de fluidos
- Entrenamiento de redes neuronales en problemas de aprendizaje automático
- Inferencia de modelos de lenguaje a gran escala
- Reconocimiento facial
- Proyectos informáticos voluntarios , como SETI@home y otros proyectos que utilizan el software BOINC.
- Dinámica molecular
- Minería de criptomonedas
- Software de Estructura a partir del movimiento (SfM)
Comparación con la competencia
CUDA compite con otras plataformas de computación GPU: Intel OneAPI y AMD ROCm .
Mientras que CUDA de Nvidia es de código cerrado, OneAPI de Intel y ROCm de AMD son de código abierto.
Intel OneAPI
oneAPI es una iniciativa basada en estándares abiertos, creada para apoyar el desarrollo de software para múltiples arquitecturas de hardware. [ 125 ] Las bibliotecas oneAPI deben implementar especificaciones abiertas que son discutidas públicamente por los Grupos de Interés Especial, ofreciendo la posibilidad para que cualquier desarrollador u organización implemente sus propias versiones de las bibliotecas oneAPI. [ 126 ] [ 127 ]
Originalmente fabricado por Intel, otros fabricantes de hardware que han adoptado este diseño son Fujitsu y Huawei.
Fundación Unificada para la Aceleración (UXL)
Unified Acceleration Foundation (UXL) es un nuevo consorcio tecnológico que trabaja en la continuación de la iniciativa OneAPI, con el objetivo de crear un nuevo ecosistema de software acelerador de estándares abiertos, estándares abiertos relacionados y proyectos de especificación a través de Grupos de Trabajo y Grupos de Interés Especial (SIG). El objetivo es ofrecer alternativas abiertas a CUDA de Nvidia. Las principales empresas que lo respaldan son Intel, Google, ARM, Qualcomm, Samsung, Imagination y VMware. [ 128 ]
AMD ROCm
ROCm [ 129 ] es una pila de software de código abierto para la programación de unidades de procesamiento gráfico (GPU) de Advanced Micro Devices (AMD).
Véase también
- Programación de matrices
- BrookGPU : el compilador del grupo de gráficos de la Universidad de Stanford.
- Binario CUDA (cubin) – un tipo de binario grueso
- Modelado molecular en GPU
- Colección de bibliotecas numéricas – de NEC para su procesador vectorial
- OptiX : API de trazado de rayos de NVIDIA
- Computación paralela
- rCUDA : una API para realizar cálculos en ordenadores remotos.
- Procesamiento de flujos
- SYCL : un estándar abierto de Khronos Group para programar una variedad de plataformas, incluidas las GPU, con C++ moderno de código único , similar a la API de tiempo de ejecución CUDA de nivel superior ( código único ).
- Vulkan : API de computación y gráficos 3D de bajo nivel y alto rendimiento.
Referencias
- ↑ "NVIDIA® CUDA™ libera el poder de la computación GPU - Comunicado de prensa" . nvidia.com . Archivado del original el 29 de marzo de 2007. Consultado el 26 de enero de 2025 .
- ↑ "Índice de /compute/cuda/redist" . Consultado el 16 de junio de 2026 .
- 1 2 Shah, Agam. "Nvidia no está totalmente en contra de que terceros fabriquen chips CUDA" . www.theregister.com . Consultado el 25 de abril de 2024 .
- ↑ "Página principal de Nvidia CUDA" . 18 de julio de 2017.
- ↑ Shimpi, Anand Lal; Wilson, Derek (8 de noviembre de 2006). "GeForce 8800 (G80) de Nvidia: GPU rediseñadas para DirectX 10" . AnandTech. Archivado del original el 24 de abril de 2010. Consultado el 16 de mayo de 2015 .
- ↑ "Introducción – documentación de nsight-visual-studio-edition 12.6" . docs.nvidia.com . Consultado el 10 de octubre de 2024 .
- 1 2 Abi-Chahla, Fedy (18 de junio de 2008). "CUDA de Nvidia: ¿El fin de la CPU?" . Tom's Hardware . Recuperado el 17 de mayo de 2015 .
- ↑ Jones, Stephen (22 de abril de 2025). ¿Qué es CUDA? (Vídeo). Computerphile . Recuperado el 24 de julio de 2025 a través de YouTube.
- ↑ Zunitch, Peter (24 de enero de 2018). "CUDA vs. OpenCL vs. OpenGL" . Videomaker . Consultado el 16 de septiembre de 2018 .
- ↑ "OpenCL" . NVIDIA Developer . 24-04-2013 . Consultado el 04-11-2019 .
- 1 2 Cosgrove, Emma. "Ian Buck construyó el arma secreta de Nvidia. Puede que pase el resto de su carrera defendiéndola" . Business Insider . Consultado el 24 de julio de 2025 .
- ↑ "Obituario de John Nickolls – Los Altos, CA" . The Mercury News . 29 de septiembre de 2011. Consultado el 23 de noviembre de 2025. John Richard Nickolls falleció en Los Altos, California ,
el 13 de agosto de 2011 tras una valiente lucha contra el cáncer. Nació el 6 de marzo de 1950, hijo de Kenneth y Kathryn Nickolls, y creció en Wilbraham, Massachusetts.
- ↑ Witt, Stephen (27 de noviembre de 2023). "Cómo Nvidia de Jensen Huang está impulsando la revolución de la IA" . The New Yorker . ISSN 0028-792X . Consultado el 10 de diciembre de 2023 .
- ↑ "Compilador CUDA LLVM" . 7 de mayo de 2012.
- ↑ "Compilación de CUDA con clang – Documentación de LLVM 22.0.0git" . llvm.org .
- ↑ Primera demostración de OpenCL en una GPU en YouTube
- ↑ Demostración de DirectCompute Ocean ejecutándose en una GPU compatible con Nvidia CUDA en YouTube
- ↑ Vasiliadis, Giorgos; Antonatos, Spiros; Polychronakis, Michalis; Markatos, Evangelos P.; Ioannidis, Sotiris (septiembre de 2008). "Gnort: Detección de intrusiones en redes de alto rendimiento mediante procesadores gráficos" (PDF) . Avances recientes en detección de intrusiones . Notas de clase en informática. Vol. 5230. págs. 116–134 . doi : 10.1007/978-3-540-87403-4_7 . ISBN 978-3-540-87402-7.
- ↑ Schatz, Michael C.; Trapnell, Cole; Delcher, Arthur L.; Varshney, Amitabh (2007). "Alineación de secuencias de alto rendimiento mediante unidades de procesamiento gráfico" . BMC Bioinformatics . 8 474. doi : 10.1186/1471-2105-8-474 . PMC 2222658. PMID 18070356 .
- ↑ "Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code" . code.google.com .
- ↑ "Utilice su GPU Nvidia para computación científica" . boinc.berkeley.edu . Infraestructura Abierta de Berkeley para Computación en Red (BOINC). 18 de diciembre de 2008. Archivado del original el 28 de diciembre de 2008. Consultado el 8 de agosto de 2017 .
- ↑ "Kit de desarrollo de software Nvidia CUDA (CUDA SDK) – Notas de la versión 2.0 para MAC OS X" . Archivado del original el 6 de enero de 2009.
- ↑ "CUDA 1.1 – Ahora en Mac OS X" . 14 de febrero de 2008. Archivado del original el 22 de noviembre de 2008.
- ↑ "Se revelan las características de CUDA 11" . 14 de mayo de 2020.
- ↑ "CUDA Toolkit 11.1 introduce compatibilidad con las GPU GeForce RTX Serie 30 y Quadro RTX" . 23 de septiembre de 2020.
- ↑ "Mejora de la asignación de memoria con las nuevas funciones de NVIDIA CUDA 11.2" . 16 de diciembre de 2020.
- ↑ "Explorando las nuevas características de CUDA 11.3" . 16 de abril de 2021.
- ↑ Silberstein, Mark; Schuster, Assaf ; Geiger, Dan; Patney, Anjul; Owens, John D. (2008). "Cálculo eficiente de sumas y productos en GPU mediante caché gestionada por software" (PDF) . Actas de la 22.ª conferencia internacional anual sobre supercomputación – ICS '08 (PDF) . Actas de la 22.ª conferencia internacional anual sobre supercomputación – ICS '08. págs. 309–318 . doi : 10.1145/1375527.1375572 . ISBN 978-1-60558-158-3.
- ↑ "Guía de programación CUDA C v8.0" (PDF) . nVidia Developer Zone . Enero de 2017. pág. 19. Consultado el 22 de marzo de 2017 .
- ↑ "NVCC fuerza la compilación de archivos .cu a C++" . 29 de noviembre de 2011.
- ↑ Whitehead, Nathan; Fit-Florea, Alex. "Precisión y rendimiento: punto flotante y cumplimiento de la norma IEEE 754 para las GPU de Nvidia" (PDF) . Nvidia . Consultado el 18 de noviembre de 2014 .
- ↑ "Productos compatibles con CUDA" . Zona CUDA . Nvidia Corporation . Consultado el 3 de noviembre de 2008 .
- ↑ "Proyecto Coriander: compila códigos CUDA a OpenCL y ejecútalos en cualquier lugar" . Phoronix.
- ↑ Perkins, Hugh (2017). "cuda-on-cl" (PDF) . IWOCL . Consultado el 8 de agosto de 2017 .
- ↑ "hughperkins/coriander: Compilar código NVIDIA® CUDA™ para dispositivos OpenCL™ 1.2" . GitHub. 6 de mayo de 2019.
- ↑ "Documentación de CU2CL" . chrec.cs.vt.edu .
- ↑ "GitHub – vosen/ZLUDA" . GitHub .
- ↑ Larabel, Michael (12 de febrero de 2024), "AMD financió discretamente una implementación CUDA fácil de integrar basada en ROCm: ahora es de código abierto" , Phoronix , consultado el 12 de febrero de 2024.
- ↑ "GitHub – chip-spv/chipStar" . GitHub .
- ↑ "La nueva herramienta SCALE permite ejecutar aplicaciones CUDA en GPU AMD" . Tom's Hardware. 17 de julio de 2024.
- ↑ «PyCUDA» . mathema.tician.de .
- ↑ "pycublas" . Archivado del original el 20 de abril de 2009. Consultado el 8 de agosto de 2017 .
- ↑ "CuPy" . cupy.dev . Consultado el 23 de septiembre de 2025 .
- 1 2 "Guía del usuario para el backend NVPTX — Documentación de LLVM 22.0.0git" . llvm.org .
- ↑ "Guía de programación de NVIDIA CUDA. Versión 1.0" (PDF) . 23 de junio de 2007.
- ↑ "Guía de programación de NVIDIA CUDA. Versión 2.1" (PDF) . 8 de diciembre de 2008.
- ↑ "Guía de programación de NVIDIA CUDA. Versión 2.2" (PDF) . 2 de abril de 2009.
- ↑ "Guía de programación de NVIDIA CUDA. Versión 2.2.1" (PDF) . 26 de mayo de 2009.
- ↑ "Guía de programación de NVIDIA CUDA. Versión 2.3.1" (PDF) . 26 de agosto de 2009.
- ↑ "Guía de programación de NVIDIA CUDA. Versión 3.0" (PDF) . 20 de febrero de 2010.
- ↑ "Guía de programación de NVIDIA CUDA C. Versión 3.1.1" (PDF) . 21 de julio de 2010.
- ↑ "Guía de programación de NVIDIA CUDA C. Versión 3.2" (PDF) . 9 de noviembre de 2010.
- ↑ "Notas de la versión de CUDA 11.0" . NVIDIA Developer .
- ↑ "Notas de la versión de CUDA 11.1" . NVIDIA Developer .
- ↑ "Notas de la versión de CUDA 11.5" . NVIDIA Developer .
- ↑ "Notas de la versión CUDA 11.8" . NVIDIA Developer .
- ↑ "Matriz de soporte – Backend NVIDIA cuDNN" . docs.nvidia.com . Consultado el 20 de agosto de 2025 .
- ↑ "Especificaciones de la NVIDIA Quadro NVS 420" . Base de datos de GPU de TechPowerUp . 25 de agosto de 2023.
- ↑ Larabel, Michael (29 de marzo de 2017). "NVIDIA lanza soporte para GPU Tegra X2 en Nouveau" . Phoronix . Consultado el 8 de agosto de 2017 .
- ↑ Especificaciones de Nvidia Xavier en TechPowerUp (preliminares)
- ↑ "Bienvenido — Documentación de la Guía del desarrollador de Jetson Linux 34.1" . docs.nvidia.com .
- ↑ "NVIDIA incorpora soporte para GPU Volta de código abierto en su SoC Xavier" .
- ↑ "Arquitectura de NVIDIA Ada Lovelace" .
- ↑ "Análisis de la arquitectura de la GPU Turing mediante microbenchmarking" (PDF) .
- ↑ "H.1. Características y especificaciones técnicas – Tabla 13. Compatibilidad de características por capacidad de cómputo" . docs.nvidia.com . Consultado el 23 de septiembre de 2020 .
- ↑ "Guía de programación CUDA C++" .
- ↑ Multiplicación-Suma fusionada, ejecutada realmente, Matriz densa
- ↑ como SASS desde la versión 7.5, como PTX desde la versión 8.0
- 1 2 soporte no oficial en SASS
- ↑ «Resumen técnico. Serie NVIDIA Jetson AGX Orin» (PDF) . nvidia.com . Consultado el 5 de septiembre de 2023 .
- ↑ "Arquitectura de GPU NVIDIA Ampere GA102" (PDF) . nvidia.com . Consultado el 5 de septiembre de 2023 .
- ↑ Luo, Weile; Fan, Ruibo; Li, Zeyu; Du, Dayou; Wang, Qiang; Chu, Xiaowen (2024). "Evaluación comparativa y análisis de la arquitectura de GPU Nvidia Hopper". arXiv : 2402.13499v1 [ cs.AR ].
- ↑ "Hoja de datos NVIDIA A40" (PDF) . nvidia.com . Consultado el 27 de abril de 2024 .
- ↑ "ARQUITECTURA DE GPU NVIDIA AMPERE GA102" (PDF) . 27 de abril de 2024.
- ↑ "Hoja de datos NVIDIA L40" (PDF) . nvidia.com . 27 de abril de 2024.
- ↑ En los documentos técnicos, los diagramas cúbicos de Tensor Core representan el ancho de la unidad de producto escalar en la altura (4 FP16 para Volta y Turing, 8 FP16 para A100, 4 FP16 para GA102, 16 FP16 para GH100). Las otras dos dimensiones representan el número de unidades de producto escalar (4x4 = 16 para Volta y Turing, 8x4 = 32 para Ampere y Hopper). Los bloques grises resultantes son las operaciones FMA FP16 por ciclo. Pascal sin Tensor Core se muestra solo para comparación de velocidad, al igual que Volta V100 con tipos de datos que no son FP16.
- ↑ "Documento técnico sobre la arquitectura Turing de NVIDIA" (PDF) . nvidia.com . Consultado el 5 de septiembre de 2023 .
- ↑ "GPU NVIDIA Tensor Core" (PDF) . nvidia.com . Consultado el 5 de septiembre de 2023 .
- ↑ "Arquitectura de NVIDIA Hopper en profundidad" . 22 de marzo de 2022.
- 1 2 forma x tamaño del operando convertido, por ejemplo, 2 núcleos tensoriales x 4x4x4xFP16/ciclo = 256 bytes/ciclo
- 1 2 = producto primeras 3 filas de la tabla
- 1 2 = producto de las 2 filas anteriores de la tabla; forma: por ejemplo, 8x8x4xFP16 = 512 bytes
- ↑ Sun, Wei; Li, Ang; Geng, Tong; Stuijk, Sander; Corporaal, Henk (2023). "Análisis de núcleos tensoriales mediante microbenchmarks: latencia, rendimiento y comportamientos numéricos". IEEE Transactions on Parallel and Distributed Systems . 34 (1): 246– 261. arXiv : 2206.02874 . Bibcode : 2023ITPDS..34..246S . doi : 10.1109/tpds.2022.3217824 . S2CID 249431357 .
- ↑ "Ejecución de subprocesos paralelos ISA versión 7.7" .
- ↑ Raihan, Md Aamir; Goli, Negar; Aamodt, Tor (2018). "Modelado de GPU habilitadas para aceleradores de aprendizaje profundo". arXiv : 1811.08309 [ cs.MS ].
- ↑ "Arquitectura de NVIDIA Ada Lovelace" .
- 1 2 Jia, Zhe; Maggioni, Marco; Smith, Jeffrey; Daniele Paolo Scarpazza (2019). "Disección de la GPU NVidia Turing T4 mediante microbenchmarking". arXiv : 1903.07486 [ cs.DC ].
- 1 2 Burgess, John (2019). "RTX ON – La GPU NVIDIA TURING". Simposio IEEE Hot Chips 31 (HCS) 2019. págs. 1–27 . doi : 10.1109/HOTCHIPS.2019.8875651 . ISBN 978-1-7281-2089-8. S2CID 204822166 .
- ↑ depende del dispositivo
- 1 2 "Tegra X1" . 9 de enero de 2015.
- ↑ "gtc22-whitepaper-hopper.pdf" . nvdam.widen.net .
- ↑ "Guía de programación de CUDA — Guía de programación de CUDA" . docs.nvidia.com .
- ↑ "Análisis en profundidad de la arquitectura Hopper de NVIDIA" . Blog técnico de NVIDIA . 22 de marzo de 2022.
- ↑ Según la guía de programación, solo puede ejecutar 160 instrucciones enteras.
- ↑ 128 según¿64 de FP32 + 64 unidades separadas?
- ↑ 64 núcleos FP32 y 64 núcleos FP32/INT flexibles.
- ↑ "Guía de programación CUDA C++" . docs.nvidia.com .
- ↑ 32 carriles FP32 se combinan para formar 16 carriles FP64. Puede ser menor dependiendo del modelo.
- ↑ solo admite 16 carriles FP32, que se combinan para formar 4 carriles FP64.
- 1 2 3 4 5 6 dependiendo del modelo
- ↑ Velocidad efectiva, probablemente superior a la de los puertos FP32. No se proporciona descripción de los núcleos FP64 reales.
- ↑ También se puede utilizar para sumas y comparaciones de números enteros.
- ↑ 2 ciclos de reloj/instrucción para cada partición SM Burgess, John (2019). "RTX ON – La GPU NVIDIA TURING". Simposio IEEE Hot Chips 31 (HCS) 2019. págs. 1–27 . doi : 10.1109/HOTCHIPS.2019.8875651 . ISBN 978-1-7281-2089-8. S2CID 204822166 .
- ↑ Durant, Luke; Giroux, Olivier; Harris, Mark; Stam, Nick (10 de mayo de 2017). "Dentro de Volta: La GPU para centros de datos más avanzada del mundo" . Blog de desarrolladores de Nvidia .
- ↑ Los planificadores y despachadores tienen unidades de ejecución dedicadas, a diferencia de Fermi y Kepler.
- ↑ El despacho puede superponerse concurrentemente, si requiere más de un ciclo (cuando hay menos unidades de ejecución que 32/SM Partition).
- ↑ Puede emitir tuberías MAD y SFU simultáneamente.
- ↑ No más de un planificador puede emitir 2 instrucciones a la vez. El primer planificador se encarga de los warps con ID impares. El segundo planificador se encarga de los warps con ID pares.
- 1 2 3 4 5 6 memoria compartida separada, pero L1 incluye caché de texturas
- ↑ "H.6.1. Arquitectura" . docs.nvidia.com . Consultado el 13 de mayo de 2019 .
- ↑ Wong, Henry; Papadopoulou, Misel-Myrto; Sadooghi-Alvandi, Maryam; Moshovos, Andreas (marzo de 2010). Desmitificando la microarquitectura de la GPU mediante microbenchmarking (PDF) . Simposio Internacional IEEE de 2010 sobre Análisis de Rendimiento de Sistemas y Software (ISPASS). White Plains, NY, EE. UU.: IEEE Computer Society. doi : 10.1109/ISPASS.2010.5452013 . ISBN 978-1-4244-6023-6.
- 1 2 Jia, Zhe; Maggioni, Marco; Staiger, Benjamín; Scarpazza, Daniele P. (2018). "Disección de la arquitectura de la GPU NVIDIA Volta mediante microbenchmarking". arXiv : 1804.06826 [ cs.DC ].
- ^ Jia, Zhe; Maggioni, Marco; Smith, Jeffrey; Daniele Paolo Scarpazza (2019). "Disección de la GPU NVidia Turing T4 mediante microbenchmarking". arXiv : 1903.07486 [ cs.DC ].
- ↑ Van Sandt, Peter; Jia, Zhe (abril de 2021). "Analizando la arquitectura de la GPU Ampere mediante microbenchmarking" . nvidia.com .
- ^ Tenga en cuenta que Jia, Zhe; Maggioni, Marco; Smith, Jeffrey; Daniele Paolo Scarpazza (2019). "Disección de la GPU NVidia Turing T4 mediante microbenchmarking". arXiv : 1903.07486 [ cs.DC ].discrepa y afirma que hay una caché de instrucciones L0 de 2 KiB por partición SM y una caché de instrucciones L1 de 16 KiB por partición SM.
- ↑ "asfermi Opcode" . GitHub .
- 1 2 solo para acceso con motor de texturas
- ↑ 25% deshabilitado en RTX 4060, RTX 4070, RTX 4070 Ti y RTX 4090
- ↑ 25% deshabilitado en RTX 5070 Ti y RTX 5090
- ↑ "Guía de programación CUDA C++, capacidades de cómputo" . docs.nvidia.com . Consultado el 6 de febrero de 2025 .
- ↑ "Bioinformática de nVidia CUDA: BarraCUDA" . BioCentric . 19 de julio de 2019. Consultado el 15 de octubre de 2019 .
- ↑ "Parte V: Simulación física" . NVIDIA Developer . Consultado el 11 de septiembre de 2020 .
- ↑ "Modelo de programación oneAPI" . oneAPI.io . Consultado el 27 de julio de 2024 .
- ↑ "Especificaciones | oneAPI" . oneAPI.io . Consultado el 27 de julio de 2024 .
- ↑ "Especificación oneAPI – Documentación de la especificación oneAPI 1.3-rev-1" . oneapi-spec.uxlfoundation.org . Consultado el 27 de julio de 2024 .
- ↑ Cherney, Max A.; Cherney, Max A. (26 de marzo de 2024). "Exclusiva: Detrás del complot para romper el dominio de Nvidia sobre la IA mediante un ataque al software" . Reuters . Recuperado el 5 de abril de 2024 .
- ↑ "Pregunta: ¿Qué significan las siglas ROCm? · Problema n.° 1628 · RadeonOpenCompute/ROCm" . Github.com . Consultado el 18 de enero de 2022 .
Lecturas adicionales
- Buck, Ian; Foley, Tim; Horn, Daniel; Sugerman, Jeremy; Fatahalian, Kayvon; Houston, Mike; Hanrahan, Pat (1 de agosto de 2004). "Brook para GPU: computación de flujo en hardware gráfico" . ACM Transactions on Graphics . 23 (3): 777–786 . doi : 10.1145/1015706.1015800 . ISSN 0730-0301 .
- Nickolls, John; Buck, Ian; Garland, Michael; Skadron, Kevin (1 de marzo de 2008). "Programación paralela escalable con CUDA: ¿Es CUDA el modelo de programación paralela que los desarrolladores de aplicaciones han estado esperando?" . ACM Queue . 6 (2): 40– 53. doi : 10.1145/1365490.1365500 . ISSN 1542-7730 .
Enlaces externos
- Motores de física computacional
- GPGPU
- Bibliotecas GPGPU
- Hardware gráfico
- Software de Nvidia
- Computación paralela
- Tarjetas gráficas
- Hardware para videojuegos
- Lenguajes de programación creados en 2007