De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

CUDA ( acrónimo de Compute Unified Device Architecture ) es una plataforma de computación paralela y un modelo de interfaz de programación de aplicaciones (API) creado por Nvidia . [1] Permite a los desarrolladores de software e ingenieros de software utilizar una unidad de procesamiento de gráficos (GPU) habilitada para CUDA para el procesamiento de propósito general, un enfoque denominado GPGPU (computación de propósito general en unidades de procesamiento de gráficos). La plataforma CUDA es una capa de software que da acceso directo al conjunto de instrucciones virtuales de la GPU y elementos computacionales paralelos, para la ejecución decalcular núcleos . [2]

La plataforma CUDA está diseñada para trabajar con lenguajes de programación como C , C ++ y Fortran . Esta accesibilidad facilita que los especialistas en programación paralela usen los recursos de la GPU, en contraste con las API anteriores como Direct3D y OpenGL , que requerían habilidades avanzadas en programación gráfica. [3] Las GPU con tecnología CUDA también admiten marcos de programación como OpenMP , OpenACC y OpenCL ; [4] [2] y HIP compilando dicho código en CUDA. Cuando Nvidia introdujo CUDA por primera vez, el nombre era un acrónimo de Compute Unified Device Architecture, [5] pero posteriormente Nvidia abandonó el uso común del acrónimo.

Antecedentes [ editar ]

La unidad de procesamiento de gráficos (GPU), como procesador de computadora especializado, aborda las demandas de las tareas de computación intensiva de gráficos 3D de alta resolución en tiempo real . En 2012, las GPU se habían convertido en sistemas multinúcleo altamente paralelos que permitían una manipulación muy eficiente de grandes bloques de datos. Este diseño es más efectivo que la unidad central de procesamiento (CPU) de propósito general para algoritmos en situaciones en las que el procesamiento de grandes bloques de datos se realiza en paralelo, como:

  • algoritmo de flujo máximo push-reetiquetado
  • algoritmos de clasificación rápida de listas grandes
  • transformada de wavelet rápida bidimensional
  • simulaciones de dinámica molecular
  • aprendizaje automático

Habilidades de programación [ editar ]

Ejemplo de flujo de procesamiento CUDA
  1. Copie datos de la memoria principal a la memoria de la GPU
  2. La CPU inicia el kernel de cómputo de la GPU
  3. Los núcleos CUDA de la GPU ejecutan el kernel en paralelo
  4. Copie los datos resultantes de la memoria de la GPU a la memoria principal

Los desarrolladores de software pueden acceder a la plataforma CUDA a través de bibliotecas aceleradas por CUDA, directivas de compilación como OpenACC y extensiones de lenguajes de programación estándar de la industria, incluidos C , C ++ y Fortran . Los programadores de C / C ++ pueden usar 'CUDA C / C ++', compilado en PTX con nvcc , el compilador C / C ++ basado en LLVM de Nvidia . [6] Los programadores de Fortran pueden usar 'CUDA Fortran', compilado con el compilador PGI CUDA Fortran de The Portland Group .

Además de las bibliotecas, las directivas del compilador, los soportes de plataforma CUDA otras interfaces computacionales, incluyendo CUDA C / C ++ y Fortran CUDA Khronos Group 's OpenCL , [7] de Microsoft DirectCompute , OpenGL Compute Shader y C ++ AMP . [8] Los contenedores de terceros también están disponibles para Python , Perl , Fortran , Java , Ruby , Lua , Common Lisp , Haskell , R , MATLAB , IDL ,Julia y apoyo nativo en Mathematica .

En la industria de los juegos de computadora , las GPU se utilizan para la representación de gráficos y para los cálculos de la física del juego (efectos físicos como escombros, humo, fuego, fluidos); los ejemplos incluyen 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. [9] [10] [11] [12] [13]

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 de CUDA inicial se hizo público el 15 de febrero de 2007, para Microsoft Windows y Linux . La compatibilidad con Mac OS X se agregó posteriormente en la versión 2.0, [14] que reemplaza la beta lanzada el 14 de febrero de 2008. [15] CUDA funciona con todas las GPU de Nvidia de 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 CUDA
  • CUDART - biblioteca en tiempo 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 basada en CUDA de solucionadores directos densos y escasos
  • cuSPARSE - Biblioteca de matrices dispersas CUDA
  • NPP: biblioteca de primitivas de rendimiento de NVIDIA
  • nvGRAPH: biblioteca de NVIDIA Graph Analytics
  • 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 administración de escritorio NVIDIA nView
  • NVWMI: kit de herramientas de administració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 personalizados de álgebra lineal,
  • NVCUVID- El decodificador de video NVIDIA quedó obsoleto en CUDA 9.2; ahora está disponible en NVIDIA Video Codec SDK

CUDA 10 viene con estos otros componentes:

  • nvJPEG: procesamiento JPEG híbrido (CPU y GPU)

Cuda 11 a 11.3 viene con estos otros componentes: [16] [17] [18] [19]

  • CUB es una de las bibliotecas de C ++ más compatibles
  • Compatibilidad con GPU de instancias múltiples MIG

Ventajas [ editar ]

CUDA tiene varias ventajas sobre el cálculo tradicional de uso general en GPU (GPGPU) que utiliza 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 se puede compartir entre subprocesos. Esto se puede usar como una caché administrada por el usuario, lo que permite un ancho de banda mayor que el que es posible mediante búsquedas de texturas. [20]
  • Descargas y lecturas más rápidas desde y hacia la GPU
  • Soporte completo para operaciones enteras y bit a bit, incluidas búsquedas de texturas enteras
  • En las tarjetas de las series RTX 20 y 30, los núcleos CUDA se utilizan para una función llamada "RTX IO", que es donde los núcleos CUDA reducen drásticamente los tiempos de carga del juego.

Limitaciones [ editar ]

  • Ya sea para la computadora host o el dispositivo GPU, todo el código fuente CUDA ahora se procesa de acuerdo con las reglas de sintaxis de C ++. [21] Este no fue siempre el caso. Las versiones anteriores de CUDA se basaban en reglas de sintaxis C. [22] Al igual que en el caso más general de compilar código C con un compilador C ++, es posible que el código fuente CUDA antiguo 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, con OpenGL teniendo acceso a la memoria CUDA registrada pero CUDA sin acceso a la memoria OpenGL.
  • La copia entre la memoria del host y del dispositivo puede sufrir un impacto en el rendimiento debido al ancho de banda y la latencia del bus del sistema (esto se puede aliviar en parte con transferencias de memoria asíncronas, 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 ramificaciones en el código del programa no afectan el rendimiento de manera significativa, 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 intrínsecamente divergente (por ejemplo, atravesar una estructura de datos de partición de espacio durante el trazado de rayos ).
  • No hay ninguna funcionalidad de emulador o de respaldo disponible para las revisiones modernas.
  • C ++ válido a veces puede marcarse y evitar la compilación debido a la forma en que el compilador se acerca a la optimización para las limitaciones del dispositivo GPU de destino. [ cita requerida ]
  • La información de tipo de tiempo de ejecución de C ++ (RTTI) y el manejo de excepciones de estilo C ++ solo se admiten en el código de host, no en el código de dispositivo.
  • En dispositivos de precisión simple en dispositivos 1.x con capacidad de cómputo CUDA de primera generación, los números desnormales no son compatibles y, en cambio, se vacían a cero, y la precisión de las operaciones de división y raíz cuadrada es ligeramente menor que la matemática de precisión simple que cumple con IEEE 754. Los dispositivos que admiten la capacidad informática 2.0 y superior admiten números desnormales, 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 anteriores de grado de juego más rápidas de los dispositivos de 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 desnormales a cero. [23]
  • A diferencia de OpenCL , las GPU habilitadas para CUDA solo están disponibles en Nvidia. [24] Los intentos de implementar CUDA en otras GPU incluyen:
    • Project Coriander: convierte el código fuente CUDA C ++ 11 en OpenCL 1.2 C.Una bifurcación de CUDA-on-CL destinada a ejecutar TensorFlow . [25] [26] [27]
    • CU2CL: Convierta CUDA 3.2 C ++ a OpenCL C. [28]
    • GPUOpen HIP: una fina capa de abstracción sobre CUDA y ROCm destinada a las GPU AMD y Nvidia. Tiene una herramienta de conversión para importar fuente CUDA C ++. Soporta CUDA 4.0 más C ++ 11 y float16.

GPU compatibles [ editar ]

Nivel CUDA compatible de GPU y tarjeta. Véase también en Nvidia :

  • Compatibilidad con CUDA SDK 1.0 para capacidad de cómputo 1.0 - 1.1 (Tesla) [29]
  • Compatibilidad con CUDA SDK 1.1 para capacidad de cómputo 1.0 - 1.1 + x (Tesla)
  • Compatibilidad con CUDA SDK 2.0 para capacidad de cómputo 1.0 - 1.1 + x (Tesla)
  • Compatibilidad con CUDA SDK 2.1 - 2.3.1 para la capacidad de cómputo 1.0 - 1.3 (Tesla) [30] [31] [32] [33]
  • Compatibilidad con CUDA SDK 3.0 - 3.1 para capacidad de cómputo 1.0 - 2.0 (Tesla, Fermi) [34] [35]
  • Compatibilidad con CUDA SDK 3.2 para capacidad informática 1.0 - 2.1 (Tesla, Fermi) [36]
  • Compatibilidad con CUDA SDK 4.0 - 4.2 para capacidad de cómputo 1.0 - 2.1 + x (Tesla, Fermi, ¿más?).
  • Compatibilidad con CUDA SDK 5.0 - 5.5 para capacidad de cómputo 1.0 - 3.5 (Tesla, Fermi, Kepler).
  • Compatibilidad con CUDA SDK 6.0 para capacidad de cómputo 1.0 - 3.5 (Tesla, Fermi, Kepler).
  • Compatibilidad con CUDA SDK 6.5 para capacidad de cómputo 1.1 - 5.x (Tesla, Fermi, Kepler, Maxwell). Última versión con soporte para capacidad informática 1.x (Tesla).
  • Compatibilidad con CUDA SDK 7.0 - 7.5 para capacidad de cómputo 2.0 - 5.x (Fermi, Kepler, Maxwell).
  • Compatibilidad con CUDA SDK 8.0 para capacidad informática 2.0 - 6.x (Fermi, Kepler, Maxwell, Pascal). Última versión compatible con capacidad informática 2.x (Fermi) (Pascal GTX 1070Ti no compatible).
  • Compatibilidad con CUDA SDK 9.0 - 9.2 para capacidad de cómputo 3.0 - 7.2 (Kepler, Maxwell, Pascal, Volta) (Pascal GTX 1070Ti no compatible. CUDA SDK 9.0 y compatible con CUDA SDK 9.2).
  • Compatibilidad con CUDA SDK 10.0 - 10.2 para capacidad informática 3.0 - 7.5 (Kepler, Maxwell, Pascal, Volta, Turing). Última versión con soporte para capacidad informática 3.x (Kepler). 10.2 es la última versión oficial para macOS, ya que la compatibilidad no estará disponible para macOS en las versiones más recientes.
  • Compatibilidad con CUDA SDK 11.0 para capacidad de cálculo 3.5 - 8.0 (Kepler (en parte), Maxwell, Pascal, Volta, Turing, Ampere (en parte)). [37] Nuevos tipos de datos: Bfloat16 y TF32 en núcleos tensores de tercera generación. [38]
  • Compatibilidad con CUDA SDK 11.1 - 11.3 para capacidad de cálculo 3.5 - 8.6 (Kepler (en parte), Maxwell, Pascal, Volta, Turing, Ampere). [39]

'*' - Productos solo OEM

Características y especificaciones de la versión [ editar ]

[43]

Nota: Las líneas que faltan o las entradas vacías reflejan cierta falta de información sobre ese elemento exacto.
[44]

[45]

[50]

Para obtener más información, consulte el artículo: "Tabla comparativa de capacidad de cómputo de NVIDIA CUDA"y lea la guía de programación de Nvidia CUDA. [51]

Ejemplo [ editar ]

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  description  =  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 (por defecto)  tex . addressMode [ 0 ]  =  cudaAddressModeClamp ;  tex . addressMode [ 1 ]  =  cudaAddressModeClamp ;  tex . filterMode  =  cudaFilterModePoint ;  tex . normalizado  =  falso ;  // no normalizar coordenadas // Vincula la matriz a la textura  cudaBindTextureToArray ( tex ,  cu_array ); // Ejecuta kernel  dim3  blockDim ( 16 ,  16 ,  1 );  dim3  gridDim (( ancho  +  blockDim . x  -  1 ) /  blockDim . x ,  ( altura  +  blockDim . y  -  1 )  /  blockDim . y ,  1 );  kernel <<<  gridDim ,  blockDim ,  0  >>> ( d_data , alto ,  ancho ); // Desvincula la matriz de la textura  cudaUnbindTexture ( tex ); }  // fin foo ()__global__  void  kernel ( float *  odata ,  int  altura ,  int  ancho ) {  unsigned  int  x  =  blockIdx . x * blockDim . x  +  threadIdx . x ;  unsigned  int  y  =  blockIdx . y * blockDim . y  +  threadIdx . y ;  si  ( x  <  ancho  && y  <  altura )  {  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 . [52]

importar  pycuda.compiler  como  comp importar  pycuda.driver  como  drv importar  numpy importar  pycuda.autoinitmod  =  comp . SourceModule (  "" " __global__ void multiply_them (float * dest, float * a, float * b) {  const int i = threadIdx.x;  dest [i] = a [i] * b [i]; } " "" )multiplicarlos  =  mod . get_function ( "multiplicarlos" )a  =  numpy . al azar . randn ( 400 ) . astype ( numpy . float32 ) b  =  numpy . al azar . randn ( 400 ) . astype ( numpy . float32 )dest  =  numpy . ceros_como ( a ) multiplicarlos ( drv . Out ( dest ),  drv . In ( a ),  drv . In ( b ),  block = ( 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 . [53]

 importar  numpy de  pycublas  importar  CUBLASMatrixA  =  CUBLASMatrix ( numpy . Mat ([[ 1 ,  2 ,  3 ],  [ 4 ,  5 ,  6 ]],  numpy . Float32 )) B  =  CUBLASMatrix ( numpy . Mat ([[ 2 ,  3 ],  [ 4 ,  5 ],  [ 6 ,  7 ]],  numpy . Float32 )) C  =  A  *  Bimprimir ( C . np_mat ())

mientras que CuPy reemplaza directamente a NumPy: [54]

Importar  cupya  =  cupy . al azar . randn ( 400 ) b  =  cupy . al azar . randn ( 400 )dest  =  cupy . ceros_como ( a )imprimir ( dest  -  a  *  b )

Usos actuales y futuros de la arquitectura CUDA [ editar ]

  • Representación acelerada de gráficos 3D
  • Interconversión acelerada de formatos de archivos de video
  • Cifrado , descifrado y compresión acelerados
  • Bioinformática , por ejemplo, secuenciación de ADN NGS BarraCUDA [55]
  • Cálculos distribuidos, como predecir la conformación nativa de proteínas
  • Simulaciones de análisis médicos, por ejemplo, realidad virtual basada en imágenes de tomografía computarizada y resonancia magnética
  • Simulaciones físicas, [56] en particular en dinámica de fluidos
  • Entrenamiento de redes neuronales en problemas de aprendizaje automático
  • Reconocimiento facial
  • Computación distribuída
  • Dinámica molecular
  • Minería de criptomonedas
  • BOINC SETI @ hogar
  • Software de estructura a partir de movimiento (SfM)

Ver también [ editar ]

  • OpenCL : un estándar abierto de Khronos Group para programar una variedad de plataformas, incluidas las GPU, similar a la API del controlador CUDA de nivel inferior ( no de fuente única )
  • 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
  • CADERA
  • Programación de matrices
  • Computación paralela
  • Procesamiento de flujo
  • rCUDA : una API para computación en computadoras remotas
  • Modelado molecular en GPU
  • Vulkan : API informática y de gráficos 3D de bajo nivel y alto rendimiento
  • OptiX : API de trazado de rayos de NVIDIA

Referencias [ editar ]

  1. ^ "Página de inicio de Nvidia CUDA" .
  2. ↑ a b Abi-Chahla, Fedy (18 de junio de 2008). "CUDA de Nvidia: ¿El fin de la CPU?" . Hardware de Tom . Consultado el 17 de mayo de 2015 .
  3. Zunitch, Peter (24 de enero de 2018). "CUDA frente a OpenCL frente a OpenGL" . Videomaker . Consultado el 16 de septiembre de 2018 .
  4. ^ "OpenCL" . Desarrollador NVIDIA . 2013-04-24 . Consultado el 4 de noviembre de 2019 .
  5. ^ 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 .
  6. ^ "Compilador CUDA LLVM" .
  7. ^ Primera demostración de OpenCL en una GPU en YouTube
  8. ^ Demostración de DirectCompute Ocean que se ejecuta en una GPU habilitada para Nvidia CUDA en YouTube
  9. ^ Vasiliadis, Giorgos; Antonatos, Spiros; Polychronakis, Michalis; Markatos, Evangelos P .; Ioannidis, Sotiris (septiembre de 2008). "Gnort: detección de intrusiones en la red de alto rendimiento mediante procesadores gráficos" (PDF) . Actas del XI Simposio Internacional sobre Avances Recientes en Detección de Intrusiones (RAID) .
  10. ^ Schatz, Michael C .; Trapnell, Cole; Delcher, Arthur L .; Varshney, Amitabh (2007). "Alineación de secuencias de alto rendimiento utilizando unidades de procesamiento de gráficos" . BMC Bioinformática . 8 : 474. doi : 10.1186 / 1471-2105-8-474 . PMC 2222658 . PMID 18070356 .  
  11. ^ 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 Bioinformática . 10 : S10. doi : 10.1186 / 1471-2105-9-S2-S10 . PMC 2323659 . PMID 18387198 .  
  12. ^ "Pyrit - Código de Google" .
  13. ^ "Utilice su GPU Nvidia para la informática científica" . BOINC. 2008-12-18. Archivado desde el original el 28 de diciembre de 2008 . Consultado el 8 de agosto de 2017 .
  14. ^ "Kit de desarrollo de software Nvidia CUDA (CUDA SDK) - Notas de la versión versión 2.0 para MAC OS X" . Archivado desde el original el 6 de enero de 2009.
  15. ^ "CUDA 1.1 - Ahora en Mac OS X" . 14 de febrero de 2008. Archivado desde el original el 22 de noviembre de 2008.
  16. ^ https://developer.nvidia.com/blog/cuda-11-features-revealed/
  17. ^ https://developer.nvidia.com/blog/cuda-11-1-introduces-support-rtx-30-series/
  18. ^ https://developer.nvidia.com/blog/enhancing-memory-allocation-with-new-cuda-11-2-features/
  19. ^ https://developer.nvidia.com/blog/exploring-the-new-features-of-cuda-11-3/
  20. ^ Silberstein, Mark; Schuster, Assaf ; Geiger, Dan; Patney, Anjul; Owens, John D. (2008). Cálculo eficiente de productos de suma en GPU a través de caché administrada por software (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.
  21. ^ "Guía de programación CUDA C v8.0" (PDF) . Zona de desarrolladores de nVidia . Sección 3.1.5. Enero de 2017. p. 19 . Consultado el 22 de marzo de 2017 . CS1 maint: location (link)
  22. ^ "NVCC fuerza la compilación en c ++ de archivos .cu" .
  23. ^ Whitehead, Nathan; Fit-Florea, Alex. "Precisión y rendimiento: punto flotante y cumplimiento de IEEE 754 para GPU de Nvidia" (PDF) . Nvidia . Consultado el 18 de noviembre de 2014 .
  24. ^ "Productos habilitados para CUDA" . Zona CUDA . Nvidia Corporation . Consultado el 3 de noviembre de 2008 .
  25. ^ "Proyecto de cilantro: compilar códigos CUDA para OpenCL, ejecutar en todas partes" . Phoronix.
  26. ^ Perkins, Hugh (2017). "cuda-on-cl" (PDF) . IWOCL . Consultado el 8 de agosto de 2017 .
  27. ^ "hughperkins / coriander: compile el código NVIDIA® CUDA ™ para dispositivos OpenCL ™ 1.2" . GitHub. 6 de mayo de 2019.
  28. ^ "Documentación de CU2CL" . chrec.cs.vt.edu .
  29. ^ "Guía de programación de NVIDIA CUDA. Versión 1.0" (PDF) . 23 de junio de 2007.
  30. ^ "Guía de programación de NVIDIA CUDA. Versión 2.1" (PDF) . 8 de diciembre de 2008.
  31. ^ "Guía de programación de NVIDIA CUDA. Versión 2.2" (PDF) . 2 de abril de 2009.
  32. ^ "Guía de programación de NVIDIA CUDA. Versión 2.2.1" (PDF) . 26 de mayo de 2009.
  33. ^ "Guía de programación de NVIDIA CUDA. Versión 2.3.1" (PDF) . 26 de agosto de 2009.
  34. ^ "Guía de programación de NVIDIA CUDA. Versión 3.0" (PDF) . 20 de febrero de 2010.
  35. ^ "Guía de programación de NVIDIA CUDA C. Versión 3.1.1" (PDF) . 21 de julio de 2010.
  36. ^ "Guía de programación de NVIDIA CUDA C. Versión 3.2" (PDF) . 9 de noviembre de 2010.
  37. ^ "Notas de la versión CUDA 11.0" . Desarrollador NVIDIA .
  38. ^ "Características de CUDA 11 reveladas" . Blog para desarrolladores de NVIDIA . 2020-05-14 . Consultado el 5 de octubre de 2020 .
  39. ^ "Notas de la versión CUDA 11.1" . Desarrollador NVIDIA .
  40. ^ "Especificaciones de NVIDIA Quadro NVS 420" . Base de datos de GPU TechPowerUp .
  41. ^ Larabel, Michael (29 de marzo de 2017). "NVIDIA lanza soporte para GPU Tegra X2 en Nouveau" . Phoronix . Consultado el 8 de agosto de 2017 .
  42. ^ Especificaciones de Nvidia Xavier en TechPowerUp (preliminar)
  43. ^ "H.1. Características y especificaciones técnicas - Tabla 13. Soporte de características por capacidad de cómputo" . docs.nvidia.com . Consultado el 23 de septiembre de 2020 .
  44. ^ https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications
  45. ^ H.1. Características y especificaciones técnicas - Tabla 14. Especificaciones técnicas por capacidad de cómputo
  46. ^ Las ALU solo realizan aritmética de punto flotante de precisión simple. Hay 1 unidad de coma flotante de doble precisión.
  47. ^ a b Durant, Luke; Giroux, Olivier; Harris, Mark; Stam, Nick (10 de mayo de 2017). "Inside Volta: la GPU de centro de datos más avanzada del mundo" . Blog de desarrolladores de Nvidia .
  48. ^ No más de un programador puede emitir 2 instrucciones a la vez. El primer programador está a cargo de los warps con ID impares. El segundo programador está a cargo de las deformaciones con ID pares.
  49. ^ "H.6.1. Arquitectura" . docs.nvidia.com . Consultado el 13 de mayo de 2019 .
  50. ^ "I.7. Capacidad de cálculo 8.x" . docs.nvidia.com . Consultado el 23 de septiembre de 2020 .
  51. ^ "Apéndice F. Características y especificaciones técnicas" (PDF) .  (3.2 MiB) , página 148 de 175 (Versión 5.0 de octubre de 2012).
  52. ^ "PyCUDA" .
  53. ^ "pycublas" . Archivado desde el original el 20 de abril de 2009 . Consultado el 8 de agosto de 2017 .
  54. ^ "CuPy" . Consultado el 8 de enero de 2020 .
  55. ^ "Bioinformática de nVidia CUDA: BarraCUDA" . BioCentric . 2019-07-19 . Consultado el 15 de octubre de 2019 .
  56. ^ "Parte V: simulación física" . Desarrollador NVIDIA . Consultado el 11 de septiembre de 2020 .

Enlaces externos [ editar ]

  • Página web oficial