Plataforma de computación paralela y modelo de programación
En informática , CUDA (originalmente Compute Unified Device Architecture ) es una plataforma de computación paralela y una interfaz de programación de aplicaciones (API) propietaria [1] que permite al software utilizar ciertos tipos de unidades de procesamiento gráfico (GPU) para un procesamiento acelerado de propósito general, un enfoque llamado computación de propósito general en GPU ( GPGPU ). API de CUDA y su tiempo de ejecución: La API de CUDA es una extensión del lenguaje de programación C que agrega la capacidad de especificar paralelismo a nivel de subproceso en C y también especificar operaciones específicas del dispositivo GPU (como mover datos entre la CPU y la GPU). [2] CUDA es una capa de software que brinda acceso directo al conjunto de instrucciones virtuales de la GPU y a los elementos computacionales paralelos para la ejecución de núcleos de cómputo . [3] Además de los controladores y los núcleos de tiempo de ejecución, la plataforma CUDA incluye compiladores, bibliotecas y herramientas para desarrolladores para ayudar a los programadores a acelerar sus aplicaciones.
CUDA está diseñado para funcionar con lenguajes de programación como C , C++ , Fortran y Python . Esta accesibilidad facilita a los especialistas en programación paralela el uso de los recursos de la GPU, a diferencia de las API anteriores como Direct3D y OpenGL , que requerían habilidades avanzadas en programación de gráficos. [4] Las GPU impulsadas por CUDA también admiten marcos de programación como OpenMP , OpenACC y OpenCL . [5] [3]
CUDA fue creado por Nvidia en 2006. [6] Cuando se introdujo por primera vez, el nombre era un acrónimo de Compute Unified Device Architecture, [7] pero luego Nvidia abandonó el uso común del acrónimo y ahora rara vez lo expande. [8]
Ian Buck, mientras estaba en Stanford en 2000, creó una plataforma de juegos 8K usando 32 tarjetas GeForce, luego obtuvo una subvención de DARPA para realizar programación paralela de propósito general en GPU . Luego se unió a Nvidia, donde desde 2004 ha estado supervisando el desarrollo de CUDA. Al impulsar CUDA, Jensen Huang apuntó a que las GPU de Nvidia se convirtieran en un hardware general para la computación científica. CUDA se lanzó en 2006. Alrededor de 2015, el enfoque de CUDA cambió a redes neuronales. [9]
Ontología
La siguiente tabla ofrece una descripción no exacta de la ontología del marco CUDA.
Habilidades de programación
La plataforma CUDA es accesible para los desarrolladores de software a través de bibliotecas aceleradas por CUDA, directivas de compilación 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 en PTX con nvcc , el compilador C/C++ basado en LLVM de Nvidia, o mediante el propio clang. [10] Los programadores de Fortran pueden usar 'CUDA Fortran', compilado con el compilador PGI CUDA Fortran de The Portland Group . [ necesita actualización ] Los programadores de Python pueden usar la biblioteca cuNumeric para acelerar aplicaciones en las GPU de Nvidia.
Además de bibliotecas, directivas de compilador, CUDA C/C++ y CUDA Fortran, la plataforma CUDA admite otras interfaces computacionales, incluyendo OpenCL de Khronos Group , [11] DirectCompute de Microsoft , OpenGL Compute Shader y C++ AMP . [12] También hay disponibles envoltorios de terceros para Python , Perl , Fortran, Java , Ruby , Lua , Common Lisp , Haskell , R , MATLAB , IDL , Julia y soporte nativo en Mathematica .
CUDA proporciona una API de bajo nivel (CUDA Driver API, no de fuente única) y una API de nivel superior (CUDA Runtime API, de fuente única). El SDK inicial de CUDA se hizo público el 15 de febrero de 2007, para Microsoft Windows y Linux . Posteriormente se agregó compatibilidad con Mac OS X en la versión 2.0, [18] que reemplaza a la versión beta lanzada el 14 de febrero de 2008. [19] 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 viene con las siguientes bibliotecas (para compilación y tiempo de ejecución, en orden alfabético):
cuBLAS – Biblioteca de subrutinas de álgebra lineal básica de CUDA
CUDART – Biblioteca de ejecución CUDA
cuFFT – Biblioteca de transformada rápida de Fourier CUDA
cuRAND – Biblioteca de generación de números aleatorios CUDA
cuSOLVER: colección de solucionadores directos densos y dispersos basada 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 viene con estos otros 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 de juegos multiplataforma
CUDA 9.0–9.2 viene con estos otros componentes:
CUTLASS 1.0 – algoritmos de álgebra lineal personalizados,
NVIDIA Video Decoder quedó obsoleto en CUDA 9.2; ahora está disponible en NVIDIA Video Codec SDK
CUDA 10 viene con estos otros componentes:
nvJPEG: procesamiento de JPEG híbrido (CPU y GPU)
CUDA 11.0–11.8 viene con estos otros componentes: [20] [21] [22] [23]
CUB es una de las nuevas bibliotecas de C++ con más soporte
Compatibilidad con GPU de múltiples instancias MIG
nvJPEG2000 – Codificador y decodificador JPEG 2000
Ventajas
CUDA tiene varias ventajas sobre el cálculo tradicional de propósito general en GPU (GPGPU) utilizando API de gráficos:
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 compartirse entre subprocesos. Esta puede usarse como caché administrada por el usuario, lo que permite un mayor ancho de banda que el que se puede lograr con búsquedas de texturas. [24]
Descargas y lecturas más rápidas hacia y desde la GPU
Soporte completo para operaciones de números enteros y bit a bit, incluidas búsquedas de texturas de números enteros
Limitaciones
Ya sea para el ordenador anfitrión o para el dispositivo GPU, todo el código fuente de CUDA se procesa ahora según las reglas de sintaxis de C++. [25] Este no siempre fue el caso. Las versiones anteriores de CUDA se basaban en las reglas de sintaxis de C. [26] Al igual que con el caso más general de compilar código C con un compilador de C++, es posible que el antiguo código fuente de CUDA de estilo C no se compile o no se comporte como se pretendía 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 OpenGL.
La copia entre la memoria del host y del dispositivo puede provocar una pérdida de rendimiento debido al ancho de banda del bus del sistema y la latencia (esto se puede aliviar en parte con transferencias de memoria asincrónicas, manejadas por el motor DMA de la GPU).
Los subprocesos deben ejecutarse en grupos de al menos 32 para obtener el mejor rendimiento, con un número total de subprocesos de miles. Las bifurcaciones en el código del programa no afectan significativamente el rendimiento, siempre que cada uno de los 32 subprocesos tome la misma ruta de ejecución; el modelo de ejecución SIMD se convierte en una limitación significativa para cualquier tarea inherentemente divergente (por ejemplo, atravesar una estructura de datos de partición espacial durante el trazado de rayos ).
No hay ninguna funcionalidad de emulación o respaldo disponible para las revisiones modernas.
A veces, el código C++ válido puede quedar marcado y evitar la compilación debido a la forma en que el compilador aborda la optimización para las limitaciones del dispositivo GPU de destino. [ cita requerida ]
En la matemática de precisión simple de los dispositivos de capacidad de cómputo CUDA 1.x de primera generación, los números desnormalizados no son compatibles y, en su lugar, se ponen a cero, y la precisión de las operaciones de división y raíz cuadrada son ligeramente inferiores a las matemáticas de precisión simple compatibles con IEEE 754. Los dispositivos que admiten 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 matemáticas de grado de juego más rápidas anteriores de los dispositivos con capacidad de cómputo 1.x si lo desean, configurando indicadores del compilador para deshabilitar divisiones precisas y raíces cuadradas precisas, y habilitar el vaciado de números desnormalizados a cero. [27]
A diferencia de OpenCL , las GPU compatibles con CUDA solo están disponibles en Nvidia, ya que es una tecnología propietaria. [28] [1] 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 . [29] [30] [31]
CU2CL: Convierte CUDA 3.2 C++ a OpenCL C. [32]
GPUOpen HIP: una fina capa de abstracción sobre CUDA y ROCm pensada para GPU AMD y Nvidia. Tiene una herramienta de conversión para importar código fuente CUDA C++. Admite CUDA 4.0 más C++11 y float16.
ZLUDA es un reemplazo directo de CUDA en las GPU de AMD y, anteriormente, en las GPU de Intel con un rendimiento casi nativo. [33] El desarrollador, Andrzej Janik, fue contratado por separado tanto por Intel como por AMD para desarrollar el software en 2021 y 2022, respectivamente. Sin embargo, ninguna de las empresas 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 permitía lanzar la nueva versión que solo es compatible con las GPU de AMD. [34]
chipStar puede compilar y ejecutar programas CUDA/HIP en plataformas avanzadas OpenCL 3.0 o Level Zero. [35]
Ejemplo
Este código de ejemplo en C++ carga una textura de una imagen en una matriz en la GPU:
textura < float , 2 , cudaReadModeElementType > tex ;void foo () { cudaArray * cu_array ;// Asignar matriz cudaChannelFormatDesc descripción = cudaCreateChannelDesc < float > (); cudaMallocArray ( & cu_array , & descripción , ancho , alto );// 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 las 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 );// Desvincular la matriz de la textura cudaUnbindTexture ( tex ); } //fin foo()__global__ void kernel ( float * odata , int altura , int ancho ) { entero sin signo x = blockIdx.x * blockDim.x + threadIdx.x ; entero sin signo y = blockIdx.y * blockDim.y + threadIdx.y ; if ( x < ancho && y < alto ) { float c = tex2D ( tex , x , y ) ; odata [ y * ancho + x ] = c ; } }
A continuación se muestra un ejemplo en Python que calcula el producto de dos matrices en la GPU. Los enlaces no oficiales del lenguaje Python se pueden obtener de PyCUDA . [36]
importar pycuda.compiler como comp importar pycuda.driver como drv importar numpy importar pycuda.autoinitmod = comp . MóduloOrigen ( """ __global__ void multiplicarlos(float *dest, float *a, float *b) { const int i = threadIdx.x; dest[i] = a[i] * b[i]; } """ )multiplicarlos = mod . get_function ( "multiplicarlos" )a = numpy . random . randn ( 400 ) . astype ( numpy . float32 ) b = numpy . random . randn ( 400 ) . astype ( numpy . float32 )dest = numpy . ceros_similares ( a ) multiplicarlos ( drv . salida ( dest ), drv . entrada ( a ), drv . entrada ( b ), bloque = ( 400 , 1 , 1 ))imprimir ( dest - a * b )
Se pueden encontrar enlaces de Python adicionales para simplificar las operaciones de multiplicación de matrices en el programa pycublas . [37]
mientras que CuPy reemplaza directamente a NumPy: [38]
Importar cupya = cupy . aleatorio . randn ( 400 ) b = cupy . aleatorio . randn ( 400 )destino = cupy . ceros_como ( a )imprimir ( dest - a * b )
GPU compatibles
Versiones de capacidad de cómputo CUDA compatibles con la versión del SDK de CUDA y la microarquitectura (por nombre de código):
Nota: CUDA SDK 10.2 es la última versión oficial para macOS, ya que el soporte no estará disponible para macOS en versiones más nuevas.
Capacidad de cómputo de CUDA por versión con semiconductores de GPU asociados y modelos de tarjetas GPU (separados por sus diversas áreas de aplicación):
Mientras que CUDA de Nvidia es de código cerrado, OneAPI de Intel y ROCm de AMD son de código abierto.
API de Intel One
oneAPI es una iniciativa basada en estándares abiertos, creada para apoyar el desarrollo de software para múltiples arquitecturas de hardware. [123] Las bibliotecas oneAPI deben implementar especificaciones abiertas que son discutidas públicamente por los Grupos de Interés Especial, ofreciendo la posibilidad a cualquier desarrollador u organización de implementar sus propias versiones de las bibliotecas oneAPI. [124] [125]
Originalmente fabricado por Intel, otros adoptantes de hardware incluyen a Fujitsu y Huawei.
Fundación de Aceleración Unificada (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 detrás de él son Intel, Google, ARM, Qualcomm, Samsung, Imagination y VMware. [126]
SYCL : un estándar abierto de Khronos Group para programar una variedad de plataformas, incluidas las GPU, con C++ moderno de fuente única , similar a la API de tiempo de ejecución CUDA de nivel superior ( fuente única )
BrookGPU : el compilador del grupo de gráficos de la Universidad de Stanford
^ "Página de inicio 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 . 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 .
^ Witt, Stephen (27 de noviembre de 2023). «Cómo la 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.
^ Primera demostración de OpenCL en una GPU en YouTube
^ Demostración de DirectCompute Ocean ejecutándose en una GPU compatible con CUDA de Nvidia 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 . Apuntes de clase en informática. Vol. 5230. págs. 116–134. doi :10.1007/978-3-540-87403-4_7. ISBN978-3-540-87402-7.
^ Schatz, Michael C.; Trapnell, Cole; Delcher, Arthur L.; Varshney, Amitabh (2007). "Alineamiento de secuencias de alto rendimiento utilizando unidades de procesamiento gráfico". BMC Bioinformatics . 8 : 474. doi : 10.1186/1471-2105-8-474 . PMC 2222658 . PMID 18070356.
^ Manavski, Svetlin A.; Giorgio, Valle (2008). "Tarjetas GPU compatibles con CUDA como aceleradores de hardware eficientes para la alineación de secuencias Smith-Waterman". BMC Bioinformatics . 10 (Suppl 2): S10. doi : 10.1186/1471-2105-9-S2-S10 . PMC 2323659 . PMID 18387198.
^ "Pyrit – Código de Google".
^ "Utilice su GPU Nvidia para realizar cálculos científicos". BOINC. 18 de diciembre de 2008. Archivado desde el original el 28 de diciembre de 2008. Consultado el 8 de agosto de 2017 .
^ "Kit de desarrollo de software CUDA de Nvidia (CUDA SDK): notas de la versión 2.0 para MAC OS X". Archivado desde el original el 6 de enero de 2009.
^ "CUDA 1.1 – Ahora en Mac OS X". 14 de febrero de 2008. Archivado desde el original el 22 de noviembre de 2008.
^ "Se revelan las características de CUDA 11". 14 de mayo de 2020.
^ "CUDA Toolkit 11.1 incorpora compatibilidad con GPU GeForce RTX 30 Series y Quadro RTX Series". 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 productos de suma en GPU mediante caché administrada 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. ISBN978-1-60558-158-3.
^ "CUDA C Programming Guide 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 en C++". 29 de noviembre de 2011.
^ Whitehead, Nathan; Fit-Florea, Alex. "Precisión y rendimiento: compatibilidad con punto flotante e IEEE 754 para GPU 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: compilar códigos CUDA en OpenCL y ejecutarlos en cualquier lugar". Phoronix.
^ Perkins, Hugh (2017). "cuda-on-cl" (PDF) . IWOCL . Consultado el 8 de agosto de 2017 .
^ "hughperkins/coriander: Generar código NVIDIA® CUDA™ para dispositivos OpenCL™ 1.2". GitHub. 6 de mayo de 2019.
^ Larabel, Michael (12 de febrero de 2024), "AMD financió silenciosamente una implementación de CUDA basada en ROCm: ahora es de código abierto", Phoronix , consultado el 12 de febrero de 2024
^ "pycublas". Archivado desde el original el 20 de abril de 2009. Consultado el 8 de agosto de 2017 .
^ "CuPy" . Consultado el 8 de enero de 2020 .
^ "Guía de programación de NVIDIA CUDA. Versión 1.0" (PDF) . 23 de junio de 2007.
^ "Guía de programación 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 NVIDIA CUDA. Versión 3.0" (PDF) . 20 de febrero de 2010.
^ "Guía de programación NVIDIA CUDA C. Versión 3.1.1" (PDF) . 21 de julio de 2010.
^ "Guía de programación 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 de CUDA 11.8". NVIDIA Developer .
^ "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 compatibilidad con GPU Tegra X2 en Nouveau". Phoronix . Consultado el 8 de agosto de 2017 .
^ Especificaciones de Nvidia Xavier en TechPowerUp (preliminares)
^ "Bienvenido: documentación de Jetson LinuxDeveloper Guide 34.1".
^ "NVIDIA ofrece compatibilidad con GPU Volta de código abierto para su SoC Xavier".
^ "Arquitectura NVIDIA Ada Lovelace".
^ Análisis de la arquitectura de la GPU Turing mediante microbenchmarking
^ "H.1. Características y especificaciones técnicas: Tabla 13. Compatibilidad de funciones por capacidad de cómputo". docs.nvidia.com . Consultado el 23 de septiembre de 2020 .
^ "Resumen técnico. Serie NVIDIA Jetson AGX Orin" (PDF) . nvidia.com . Consultado el 5 de septiembre de 2023 .
^ "Arquitectura de la 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].
^ "Ficha técnica NVIDIA A40" (PDF) . nvidia.com . Consultado el 27 de abril de 2024 .
^ "ARQUITECTURA DE LA GPU NVIDIA AMPERE GA102" (PDF) . 27 de abril de 2024.
^ "Ficha técnica NVIDIA L40" (PDF) . 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 la cantidad 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 de FP16 por ciclo. Pascal sin Tensor Core solo se muestra para comparación de velocidad, al igual que Volta V100 con tipos de datos que no son FP16.
^ "Informe 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 NVIDIA Hopper en profundidad". 22 de marzo de 2022.
^ forma x tamaño del operando convertido, p. ej. 2 núcleos tensores x 4x4x4xFP16/ciclo = 256 bytes/ciclo
^ = producto de las primeras 3 filas de la tabla
^ = producto de las 2 filas de la tabla anteriores; forma: p. ej. 8x8x4xFP16 = 512 bytes
^ Sun, Wei; Li, Ang; Geng, Tong; Stuijk, Sander; Corporaal, Henk (2023). "Disección 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 . 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 con acelerador de aprendizaje profundo habilitado". arXiv : 1811.08309 [cs.MS].
^ "Arquitectura NVIDIA Ada Lovelace".
^ forma x tamaño del operando convertido, p. ej. 2 núcleos tensores x 4x4x4xFP16/ciclo = 256 bytes/ciclo
^ = producto de las primeras 3 filas de la tabla
^ = producto de las 2 filas de la tabla anteriores; forma: p. ej. 8x8x4xFP16 = 512 bytes
^ 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].
^ Burgess, John (2019). "RTX ON – La GPU NVIDIA TURING". Simposio IEEE Hot Chips 31 de 2019 (HCS) . págs. 1–27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN978-1-7281-2089-8.S2CID204822166 .
^ 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].
^ Burgess, John (2019). "RTX ON – La GPU NVIDIA TURING". Simposio IEEE Hot Chips 31 de 2019 (HCS) . págs. 1–27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN978-1-7281-2089-8.S2CID204822166 .
^ depende del dispositivo
^ "Tegra X1". 9 de enero de 2015.
^ Arquitectura de GPU NVIDIA H100 Tensor Core
^ H.1. Características y especificaciones técnicas – Tabla 14. Especificaciones técnicas por capacidad de cómputo
^ Arquitectura NVIDIA Hopper en profundidad
^ solo puede ejecutar 160 instrucciones enteras según la guía de programación
^ 128 según [1]. 64 de FP32 + 64 unidades separadas?
^ 64 por núcleos FP32 y 64 por núcleos FP32/INT flexibles.
^ "Guía de programación CUDA C++".
^ 32 carriles FP32 se combinan para formar 16 carriles FP64. Puede ser menor según el modelo.
^ solo es compatible con 16 carriles FP32, se combinan para formar 4 carriles FP64
^ abcdef depende del modelo
^ Velocidad efectiva, probablemente sobre puertos FP32. No hay descripción de núcleos FP64 reales.
^ También se puede utilizar para adiciones 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 de 2019 (HCS) . págs. 1–27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8.S2CID204822166 .
^ 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 para desarrolladores de Nvidia .
^ Los programadores y despachadores tienen unidades de ejecución dedicadas, a diferencia de Fermi y Kepler.
^ El envío puede superponerse simultáneamente, si toma más de un ciclo (cuando hay menos unidades de ejecución que 32/Partición SM)
^ ¿ Se pueden emitir simultáneamente tuberías MAD y SFU?
^ No más de un planificador puede emitir 2 instrucciones a la vez. El primer planificador está a cargo de los warps con ID impares. El segundo planificador está a cargo de los warps con ID pares.
^ Solo memoria compartida, sin caché de datos
^ abcdef memoria compartida separada, pero L1 incluye caché de textura
^ "H.6.1. Arquitectura". docs.nvidia.com . Consultado el 13 de mayo de 2019 .
^ "Desmitificando la microarquitectura de la GPU a través de microbenchmarking" (PDF) .
^ 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].
^ "Tegra X1". 9 de enero de 2015.
^ 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].
^ "Disección de la arquitectura de la GPU Ampere a través de microbenchmarking".
^ 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].no está de acuerdo y afirma que hay 2 KiB de caché de instrucciones L0 por partición SM y 16 KiB de caché de instrucciones L1 por SM
^ 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].
^ "I.7. Compute Capability 8.x". docs.nvidia.com . Consultado el 12 de octubre de 2022 .
^ "Apéndice F. Características y especificaciones técnicas" (PDF) .(3,2 MiB) , página 148 de 175 (Versión 5.0 octubre de 2012).
^ "Bioinformática CUDA de nVidia: BarraCUDA". BioCentric . 19 de julio de 2019 . Consultado el 15 de octubre de 2019 .
^ "Parte V: Simulación de 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 .
^ "Exclusiva: Detrás de la trama para romper el control de Nvidia sobre la IA atacando al software". Reuters . Consultado el 5 de abril de 2024 .
^ "Pregunta: ¿Qué significa ROCm? · Problema n.° 1628 · RadeonOpenCompute/ROCm". Github.com . Consultado el 18 de enero de 2022 .
Lectura adicional
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?". Queue . 6 (2): 40–53. doi :10.1145/1365490.1365500. ISSN 1542-7730.