stringtranslate.com

Computación de propósito general en unidades de procesamiento gráfico

La computación de propósito general en unidades de procesamiento gráfico ( GPGPU , o con menos frecuencia GPGP ) es el uso de una unidad de procesamiento gráfico (GPU), que normalmente maneja el cálculo solo para gráficos de computadora , para realizar cálculos en aplicaciones tradicionalmente manejadas por la unidad central de procesamiento (CPU). [1] [2] [3] [4] El uso de múltiples tarjetas de video en una computadora, o una gran cantidad de chips gráficos, paraleliza aún más la naturaleza ya paralela del procesamiento gráfico. [5]

Básicamente, una canalización GPGPU es un tipo de procesamiento paralelo entre una o más GPU y CPU que analiza los datos como si estuvieran en forma de imagen u otro formato gráfico. Si bien las GPU operan a frecuencias más bajas, normalmente tienen muchas veces más núcleos . Por lo tanto, las GPU pueden procesar muchas más imágenes y datos gráficos por segundo que una CPU tradicional. Migrar los datos a formato gráfico y luego usar la GPU para escanearlos y analizarlos puede generar una gran aceleración .

Los pipelines GPGPU se desarrollaron a principios del siglo XXI para el procesamiento de gráficos (por ejemplo, para mejorar los sombreadores ). Se descubrió que estos pipelines se adaptaban bien a las necesidades de computación científica y, desde entonces, se han desarrollado en esa dirección.

Las GPGPU más conocidas son Nvidia Tesla , que se utilizan para Nvidia DGX , junto con AMD Instinct e Intel Gaudi.

Historia

En principio, cualquier función booleana arbitraria , incluidas la suma, la multiplicación y otras funciones matemáticas, se puede construir a partir de un conjunto funcionalmente completo de operadores lógicos. En 1987, el Juego de la vida de Conway se convirtió en uno de los primeros ejemplos de computación de propósito general que utilizaba un procesador de flujo temprano llamado blitter para invocar una secuencia especial de operaciones lógicas en vectores de bits. [6]

La computación de propósito general en GPU se volvió más práctica y popular después de aproximadamente 2001, con la llegada de los sombreadores programables y el soporte de punto flotante en los procesadores gráficos. En particular, los problemas que involucraban matrices y/o vectores  , especialmente vectores bidimensionales, tridimensionales o cuatridimensionales, eran fáciles de traducir a una GPU, que actúa con velocidad nativa y soporte en esos tipos. Un hito significativo para GPGPU fue el año 2003, cuando dos grupos de investigación descubrieron de forma independiente enfoques basados ​​en GPU para la solución de problemas generales de álgebra lineal en GPU que se ejecutaban más rápido que en CPU. [7] [8] Estos primeros esfuerzos por utilizar GPU como procesadores de propósito general requirieron reformular los problemas computacionales en términos de primitivas gráficas, como lo respaldan las dos principales API para procesadores gráficos, OpenGL y DirectX . Esta engorrosa traducción se evitó con la llegada de lenguajes de programación de propósito general y API como Sh / RapidMind , Brook y Accelerator. [9] [10] [11]

A estos les siguió CUDA de Nvidia , que permitió a los programadores ignorar los conceptos gráficos subyacentes a favor de conceptos de computación de alto rendimiento más comunes. [12] Las ofertas más nuevas, independientes del proveedor de hardware, incluyen DirectCompute de Microsoft y OpenCL de Apple/Khronos Group . [12] Esto significa que las canalizaciones GPGPU modernas pueden aprovechar la velocidad de una GPU sin requerir una conversión completa y explícita de los datos a una forma gráfica.

Mark Harris, el fundador de GPGPU.org, acuñó el término GPGPU .

Implementaciones

Cualquier lenguaje que permita que el código que se ejecuta en la CPU sondee un sombreador de GPU para obtener valores de retorno puede crear un marco GPGPU. Los estándares de programación para computación paralela incluyen OpenCL (independiente del proveedor), OpenACC , OpenMP y OpenHMPP .

A partir de 2016 , OpenCL es el lenguaje de computación GPU de propósito general abierto dominante, y es un estándar abierto definido por el Grupo Khronos . [ cita requerida ] OpenCL proporciona una plataforma GPGPU multiplataforma que además admite el cálculo paralelo de datos en CPU. OpenCL es compatible activamente con las plataformas Intel, AMD, Nvidia y ARM. El Grupo Khronos también ha estandarizado e implementado SYCL , un modelo de programación de nivel superior para OpenCL como un lenguaje integrado específico de dominio de fuente única basado en C++11 puro.

El marco propietario dominante es Nvidia CUDA . [13] Nvidia lanzó CUDA en 2006, un kit de desarrollo de software (SDK) y una interfaz de programación de aplicaciones (API) que permite usar el lenguaje de programación C para codificar algoritmos para su ejecución en las GPU de la serie GeForce 8 y posteriores.

ROCm , lanzado en 2016, es la respuesta de código abierto de AMD a CUDA. A partir de 2022, está a la par de CUDA en cuanto a características, y aún carece de soporte para consumidores.

OpenVIDIA se desarrolló en la Universidad de Toronto entre 2003 y 2005, [14] en colaboración con Nvidia.

Altimesh Hybridizer, creado por Altimesh, compila binarios de Common Intermediate Language en CUDA. [15] [16] Admite funciones genéricas y virtuales. [17] La ​​depuración y la creación de perfiles están integradas con Visual Studio y Nsight. [18] Está disponible como una extensión de Visual Studio en Visual Studio Marketplace.

Microsoft presentó la API de computación de GPU DirectCompute , lanzada con la API DirectX 11 .

Alea GPU ,[19]creada por QuantAlea,[20]presenta capacidades nativas de computación GPU para los lenguajesF#[21]yC#. Alea GPU también proporciona un modelo de programación GPU simplificado basado en GPU en paralelo y en agregado paralelo utilizando delegados y administración automática de memoria.[22]

MATLAB admite la aceleración GPGPU utilizando Parallel Computing Toolbox y MATLAB Distributed Computing Server , [23] y paquetes de terceros como Jacket .

El procesamiento GPGPU también se utiliza para simular la física newtoniana mediante motores de física , [24] y las implementaciones comerciales incluyen Havok Physics, FX y PhysX , ambos utilizados normalmente para juegos de computadora y videojuegos .

C++ Accelerated Massive Parallelism ( C++ AMP ) es una biblioteca que acelera la ejecución de código C++ explotando el hardware de datos paralelos en las GPU.

Computadoras móviles

Debido a la tendencia de aumento de potencia de las GPU móviles, la programación de propósito general estuvo disponible también en los dispositivos móviles que ejecutan los principales sistemas operativos móviles .

Google Android 4.2 habilitó la ejecución de código RenderScript en la GPU del dispositivo móvil. [25] Desde entonces, Renderscript ha quedado obsoleto en favor de los primeros sombreadores de cómputo OpenGL [26] y más tarde Vulkan Compute. [27] OpenCL está disponible en muchos dispositivos Android, pero Android no lo soporta oficialmente [ cita requerida ] . Apple presentó la API patentada Metal para aplicaciones iOS , capaz de ejecutar código arbitrario a través de los sombreadores de cómputo de la GPU de Apple [ cita requerida ] .

Soporte de hardware

Las tarjetas de video para computadoras son producidas por varios proveedores, como Nvidia y AMD . Las tarjetas de estos proveedores difieren en la implementación de compatibilidad con formatos de datos, como formatos enteros y de punto flotante (32 bits y 64 bits). Microsoft introdujo un estándar Shader Model para ayudar a clasificar las diversas características de las tarjetas gráficas en un número de versión de Shader Model simple (1.0, 2.0, 3.0, etc.).

Números enteros

Las tarjetas de video anteriores a DirectX 9 solo admitían tipos de colores con paleta o enteros. A veces se agrega otro valor alfa para usarlo con transparencia. Los formatos comunes son:

Números de punto flotante

Para los primeros gráficos de función fija o de programabilidad limitada (es decir, hasta las GPU compatibles con DirectX 8.1 inclusive), esto era suficiente porque también es la representación utilizada en las pantallas. Esta representación tiene ciertas limitaciones. Si se cuenta con suficiente potencia de procesamiento de gráficos, incluso a los programadores de gráficos les gustaría utilizar mejores formatos, como formatos de datos de punto flotante , para obtener efectos como imágenes de alto rango dinámico . Muchas aplicaciones GPGPU requieren precisión de punto flotante, que venía con las tarjetas de video que cumplen con la especificación DirectX 9.

DirectX 9 Shader Model 2.x sugería la compatibilidad con dos tipos de precisión: precisión completa y parcial. La compatibilidad con precisión completa podía ser FP32 o FP24 (coma flotante de 32 o 24 bits por componente) o superior, mientras que la precisión parcial era FP16. La serie de GPU Radeon R300 de ATI admitía precisión FP24 solo en la línea de fragmentos programables (aunque FP32 era compatible con los procesadores Vertex), mientras que la serie NV30 de Nvidia admitía tanto FP16 como FP32; otros proveedores, como S3 Graphics y XGI, admitían una mezcla de formatos hasta FP24.

Las implementaciones de punto flotante en las GPU de Nvidia son en su mayoría compatibles con IEEE ; sin embargo, esto no es así en todos los proveedores. [28] Esto tiene implicaciones para la corrección que se consideran importantes para algunas aplicaciones científicas. Si bien los valores de punto flotante de 64 bits (float de doble precisión) están comúnmente disponibles en las CPU, estos no son universalmente compatibles en las GPU. Algunas arquitecturas de GPU sacrifican el cumplimiento de IEEE, mientras que otras carecen de doble precisión. Se han realizado esfuerzos para emular valores de punto flotante de doble precisión en GPU; sin embargo, la compensación de velocidad niega cualquier beneficio de descargar la computación en la GPU en primer lugar. [29]

Vectorización

La mayoría de las operaciones en la GPU funcionan de forma vectorizada: una operación puede realizarse con hasta cuatro valores a la vez. Por ejemplo, si un color ⟨R1, G1, B1⟩ debe modularse con otro color ⟨R2, G2, B2⟩ , la GPU puede producir el color resultante ⟨R1*R2, G1*G2, B1*B2⟩ en una sola operación. Esta funcionalidad es útil en gráficos porque casi todos los tipos de datos básicos son vectores (ya sean bidimensionales, tridimensionales o tetradimensionales). [ cita requerida ] Algunos ejemplos son los vértices, los colores, los vectores normales y las coordenadas de textura. Muchas otras aplicaciones pueden hacer un buen uso de esto y, debido a su mayor rendimiento, las instrucciones vectoriales, denominadas instrucción única, datos múltiples ( SIMD ), han estado disponibles desde hace mucho tiempo en las CPU. [ cita requerida ]

GPU frente a CPU

Originalmente, los datos se pasaban simplemente de una unidad central de procesamiento (CPU) a una unidad de procesamiento gráfico (GPU) y luego a un dispositivo de visualización . Sin embargo, a medida que pasó el tiempo, se volvió valioso para las GPU almacenar primero estructuras simples y luego complejas de datos para ser pasadas de vuelta a la CPU que analizaba una imagen o un conjunto de datos científicos representados como un formato 2D o 3D que una tarjeta de video puede entender. Debido a que la GPU tiene acceso a cada operación de dibujo, puede analizar datos en estas formas rápidamente, mientras que una CPU debe sondear cada píxel o elemento de datos mucho más lentamente, ya que la velocidad de acceso entre una CPU y su grupo más grande de memoria de acceso aleatorio (o en un caso aún peor, un disco duro ) es más lenta que las GPU y las tarjetas de video, que generalmente contienen cantidades más pequeñas de memoria más cara a la que se accede mucho más rápido. Transferir la parte del conjunto de datos que se analizará activamente a esa memoria de la GPU en forma de texturas u otras formas de GPU fácilmente legibles da como resultado un aumento de la velocidad. La característica distintiva de un diseño GPGPU es la capacidad de transferir información de forma bidireccional desde la GPU a la CPU; generalmente, el rendimiento de datos en ambas direcciones es idealmente alto, lo que resulta en un efecto multiplicador en la velocidad de un algoritmo específico de alto uso .

Las canalizaciones GPGPU pueden mejorar la eficiencia en conjuntos de datos especialmente grandes y/o datos que contienen imágenes 2D o 3D. Se utilizan en canalizaciones de gráficos complejos, así como en computación científica ; más aún en campos con grandes conjuntos de datos como el mapeo genómico , o donde el análisis bidimensional o tridimensional es útil, especialmente en el análisis actual de biomoléculas , el estudio de proteínas y otros estudios complejos de química orgánica . Un ejemplo de tales aplicaciones es la suite de software NVIDIA para análisis genómico .

Estas secuencias de comandos también pueden mejorar enormemente la eficiencia en el procesamiento de imágenes y la visión artificial , entre otros campos, así como el procesamiento paralelo en general. Algunas secuencias de comandos muy optimizadas han producido aumentos de velocidad de varios cientos de veces en comparación con la secuencia de comandos original basada en CPU en una tarea de alto uso.

Un ejemplo sencillo sería un programa de GPU que recopila datos sobre los valores de iluminación promedio mientras reproduce una vista de una cámara o un programa de gráficos de computadora en el programa principal de la CPU, de modo que la CPU pueda realizar ajustes en la vista general de la pantalla. Un ejemplo más avanzado podría utilizar la detección de bordes para devolver tanto información numérica como una imagen procesada que represente contornos a un programa de visión por computadora que controle, por ejemplo, un robot móvil. Debido a que la GPU tiene acceso local y rápido por hardware a cada píxel u otro elemento de la imagen, puede analizarlo y promediarlo (para el primer ejemplo) o aplicar un filtro de bordes Sobel u otro filtro de convolución (para el segundo) con mucha mayor velocidad que una CPU, que normalmente debe acceder a copias de memoria de acceso aleatorio más lentas del gráfico en cuestión.

GPGPU es fundamentalmente un concepto de software, no de hardware; es un tipo de algoritmo , no un equipo. Sin embargo, los diseños de equipos especializados pueden mejorar aún más la eficiencia de las tuberías GPGPU, que tradicionalmente realizan relativamente pocos algoritmos en cantidades muy grandes de datos. Las tareas de nivel de datos gigantescos y masivamente paralelizadas pueden, por lo tanto, paralelizarse aún más mediante configuraciones especializadas como la computación en rack (muchas máquinas similares, altamente personalizadas, integradas en un rack ), que agrega una tercera capa: muchas unidades de computación, cada una de las cuales usa muchas CPU para corresponderse con muchas GPU. Algunos "mineros" de Bitcoin usaban tales configuraciones para el procesamiento de grandes cantidades.

Cachés

Históricamente, las CPU han utilizado cachés administrados por hardware , pero las GPU anteriores solo proporcionaban memorias locales administradas por software. Sin embargo, como las GPU se utilizan cada vez más para aplicaciones de propósito general, las GPU de última generación se están diseñando con cachés multinivel administrados por hardware que han ayudado a las GPU a avanzar hacia la informática convencional. Por ejemplo, las GPU de arquitectura GT200 de la serie GeForce 200 no presentaban un caché L2, la GPU Fermi tiene un caché de último nivel de 768 KiB, la GPU Kepler tiene un caché de último nivel de 1,5 MiB, [30] la GPU Maxwell tiene un caché de último nivel de 2 MiB y la GPU Pascal tiene un caché de último nivel de 4 MiB.

Archivo de registro

Las GPU tienen archivos de registro muy grandes , lo que les permite reducir la latencia de cambio de contexto. El tamaño del archivo de registro también aumenta en las diferentes generaciones de GPU, por ejemplo, el tamaño total del archivo de registro en las GPU Maxwell (GM200), Pascal y Volta son 6 MiB, 14 MiB y 20 MiB, respectivamente. [31] [32] En comparación, el tamaño de un archivo de registro en las CPU es pequeño, normalmente decenas o cientos de kilobytes.

Eficiencia energética

El alto rendimiento de las GPU se produce a costa de un alto consumo de energía, que a plena carga es de hecho tanta energía como el resto del sistema de PC combinado. [33] El consumo máximo de energía de la GPU de la serie Pascal (Tesla P100) se especificó en 250 W. [34]

Procesamiento de flujo

Las GPU están diseñadas específicamente para gráficos y, por lo tanto, son muy restrictivas en cuanto a operaciones y programación. Debido a su diseño, las GPU solo son efectivas para problemas que se pueden resolver mediante el procesamiento de flujo y el hardware solo se puede usar de ciertas maneras.

La siguiente discusión referente a vértices, fragmentos y texturas concierne principalmente al modelo heredado de programación GPGPU, donde las API de gráficos ( OpenGL o DirectX ) se usaban para realizar cálculos de propósito general. Con la introducción de las API de computación de propósito general CUDA (Nvidia, 2007) y OpenCL (vendor-independent, 2008), en los nuevos códigos GPGPU ya no es necesario mapear el cálculo a primitivas gráficas. La naturaleza de procesamiento de flujo de las GPU sigue siendo válida independientemente de las API utilizadas. (Véase, por ejemplo, [35] )

Las GPU solo pueden procesar vértices y fragmentos independientes, pero pueden procesar muchos de ellos en paralelo. Esto es especialmente efectivo cuando el programador desea procesar muchos vértices o fragmentos de la misma manera. En este sentido, las GPU son procesadores de flujo: procesadores que pueden operar en paralelo ejecutando un núcleo en muchos registros de un flujo a la vez.

Un flujo es simplemente un conjunto de registros que requieren un cálculo similar. Los flujos proporcionan paralelismo de datos. Los núcleos son las funciones que se aplican a cada elemento del flujo. En las GPU, los vértices y fragmentos son los elementos de los flujos y los sombreadores de vértices y fragmentos son los núcleos que se ejecutan en ellos. [ dudosodiscutir ] Para cada elemento solo podemos leer desde la entrada, realizar operaciones en él y escribir en la salida. Es permisible tener múltiples entradas y múltiples salidas, pero nunca una pieza de memoria que sea legible y escribible. [ vago ]

La intensidad aritmética se define como la cantidad de operaciones realizadas por palabra de memoria transferida. Es importante que las aplicaciones GPGPU tengan una alta intensidad aritmética, de lo contrario, la latencia de acceso a la memoria limitará la velocidad computacional. [36]

Las aplicaciones GPGPU ideales tienen grandes conjuntos de datos, alto paralelismo y mínima dependencia entre los elementos de datos.

Conceptos de programación de GPU

Recursos computacionales

Hay una variedad de recursos computacionales disponibles en la GPU:

De hecho, un programa puede sustituir una textura de solo escritura para la salida en lugar del búfer de cuadros. Esto se hace mediante Render to Texture (RTT), Render-To-Backbuffer-Copy-To-Texture (RTBCTT) o la salida de flujo más reciente.

Texturas como flujo

La forma más común que puede adoptar un flujo en GPGPU es una cuadrícula 2D, ya que se adapta de manera natural al modelo de renderizado integrado en las GPU. Muchos cálculos se asignan de manera natural a cuadrículas: álgebra matricial, procesamiento de imágenes, simulación basada en la física, etc.

Dado que las texturas se utilizan como memoria, las búsquedas de texturas se utilizan como lecturas de memoria. Gracias a esto, la GPU puede realizar ciertas operaciones automáticamente.

Granos

Los núcleos de cómputo pueden considerarse como el cuerpo de los bucles . Por ejemplo, un programador que opera en una cuadrícula en la CPU podría tener un código que se parece a esto:

// Las cuadrículas de entrada y salida tienen 10000 x 10000 o 100 millones de elementos.void transform_10k_by_10k_grid ( float in [ 10000 ][ 10000 ], float out [ 10000 ][ 10000 ]) { for ( int x = 0 ; x < 10000 ; x ++ ) { for ( int y = 0 ; y < 10000 ; y ++ ) { // La siguiente línea se ejecuta 100 millones de veces out [ x ][ y ] = do_some_hard_work ( in [ x ][ y ]); } } }                              

En la GPU, el programador solo especifica el cuerpo del bucle como núcleo y qué datos recorrer invocando el procesamiento de geometría.

Control de flujo

En el código secuencial es posible controlar el flujo del programa mediante instrucciones if-then-else y diversas formas de bucles. Estas estructuras de control de flujo se han añadido recientemente a las GPU. [37] Las escrituras condicionales se podían realizar mediante una serie de operaciones aritméticas/de bits diseñadas adecuadamente, pero los bucles y las ramificaciones condicionales no eran posibles.

Las GPU recientes [ ¿cuándo? ] permiten la ramificación, pero generalmente con una penalización de rendimiento. En general, se debe evitar la ramificación en bucles internos, ya sea en el código de la CPU o de la GPU, y se pueden usar varios métodos, como la resolución de ramificación estática, el precomputado, la predicción, la división de bucles [38] y la eliminación Z [39] para lograr la ramificación cuando no existe soporte de hardware.

Métodos de GPU

Mapa

La operación de mapeo simplemente aplica la función dada (el núcleo) a cada elemento del flujo. Un ejemplo simple es multiplicar cada valor del flujo por una constante (lo que aumenta el brillo de una imagen). La operación de mapeo es fácil de implementar en la GPU. El programador genera un fragmento para cada píxel en la pantalla y aplica un programa de fragmentos a cada uno. El flujo resultante del mismo tamaño se almacena en el búfer de salida.

Reducir

Algunos cálculos requieren calcular un flujo más pequeño (posiblemente un flujo de un solo elemento) a partir de un flujo más grande. Esto se denomina reducción del flujo. Generalmente, una reducción se puede realizar en varios pasos. Los resultados del paso anterior se utilizan como entrada para el paso actual y el rango sobre el que se aplica la operación se reduce hasta que solo quede un elemento del flujo.

Filtrado de flujo

El filtrado de flujo es básicamente una reducción no uniforme. El filtrado implica eliminar elementos del flujo en función de ciertos criterios.

Escanear

La operación de escaneo, también denominada suma de prefijos en paralelo , toma un vector (flujo) de elementos de datos y una función binaria asociativa (arbitraria) '+' con un elemento de identidad 'i' . Si la entrada es [a0, a1, a2, a3, ...], un escaneo exclusivo produce la salida [i, a0, a0 + a1, a0 + a1 + a2, ...], mientras que un escaneo inclusivo produce la salida [a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, ...] y no requiere que exista una identidad. Si bien a primera vista la operación puede parecer inherentemente serial, son posibles algoritmos de escaneo paralelo eficientes y se han implementado en unidades de procesamiento gráfico. La operación de escaneo tiene usos en, por ejemplo, la ordenación rápida y la multiplicación de matriz-vector dispersa. [35] [40] [41] [42]

Dispersión

La operación de dispersión se define de forma más natural en el procesador de vértices. El procesador de vértices puede ajustar la posición del vértice , lo que permite al programador controlar dónde se deposita la información en la cuadrícula. También son posibles otras extensiones, como controlar el tamaño del área afectada por el vértice.

El procesador de fragmentos no puede realizar una operación de dispersión directa porque la ubicación de cada fragmento en la cuadrícula es fija en el momento de la creación del fragmento y el programador no puede modificarla. Sin embargo, a veces es posible reformular o implementar una operación de dispersión lógica con otro paso de recopilación. Una implementación de dispersión emitiría primero un valor de salida y una dirección de salida. Una operación de recopilación inmediatamente posterior utiliza comparaciones de direcciones para ver si el valor de salida se asigna a la ranura de salida actual.

En núcleos de cómputo dedicados , la dispersión se puede realizar mediante escrituras indexadas.

Recolectar

Gather es lo opuesto a scatter. Después de que scatter reordena los elementos según un mapa, Gather puede restaurar el orden de los elementos según el mapa de dispersión utilizado. En núcleos de cómputo dedicados, Gather puede realizarse mediante lecturas indexadas. En otros sombreadores, se realiza con búsquedas de texturas.

Clasificar

La operación de ordenación transforma un conjunto desordenado de elementos en un conjunto ordenado de elementos. La implementación más común en GPU es el uso de la ordenación por radix para datos enteros y de punto flotante y la ordenación por combinación de grano grueso y redes de ordenación de grano fino para datos comparables generales. [43] [44]

La operación de búsqueda permite al programador encontrar un elemento determinado dentro de la secuencia o, posiblemente, encontrar vecinos de un elemento específico. El método de búsqueda que se utiliza generalmente es la búsqueda binaria en elementos ordenados.

Estructuras de datos

Se pueden representar diversas estructuras de datos en la GPU:

Aplicaciones

Las siguientes son algunas de las áreas en las que se han utilizado GPU para informática de propósito general:

Bioinformática

Uso de GPGPU en bioinformática: [59] [83]

Dinámica molecular

† Las aceleraciones esperadas dependen en gran medida de la configuración del sistema. Rendimiento de la GPU comparado con el socket de CPU x86 de múltiples núcleos. Rendimiento de la GPU evaluado en función de las características admitidas por la GPU y puede ser una comparación de rendimiento de kernel a kernel. Para obtener detalles sobre la configuración utilizada, consulte el sitio web de la aplicación. Aceleraciones según las pruebas internas de Nvidia o la documentación del ISV.

‡ Q = GPU Quadro , T = GPU Tesla . GPU recomendadas por Nvidia para esta aplicación. Consulte con el desarrollador o ISV para obtener información sobre la certificación.

Véase también

Referencias

  1. ^ Fung, James; Tang, Felix; Mann, Steve (7–10 de octubre de 2002). Mediated Reality Using Computer Graphics Hardware for Computer Vision (PDF) . Actas del Simposio Internacional sobre Informática Vestible 2002 (ISWC2002). Seattle, Washington, EE. UU., págs. 83–89. Archivado desde el original (PDF) el 2 de abril de 2012.
  2. ^ Aimone, Chris; Fung, James; Mann, Steve (2003). "Una estimación de movimiento proyectivo sin características basada en video Eye Tap asistida por seguimiento giroscópico para realidad mediada por computadora portátil". Computación personal y ubicua . 7 (5): 236–248. doi :10.1007/s00779-003-0239-6. S2CID  25168728.
  3. ^ "Procesamiento de señales de visión artificial en unidades de procesamiento gráfico", Actas de la Conferencia internacional IEEE sobre acústica, habla y procesamiento de señales (ICASSP 2004) Archivado el 19 de agosto de 2011 en Wayback Machine : Montreal, Quebec, Canadá, 17-21 de mayo de 2004, pp. V-93 – V-96
  4. ^ Chitty, DM (2007, julio). Un enfoque paralelo de datos para la programación genética utilizando hardware de gráficos programables Archivado el 8 de agosto de 2017 en Wayback Machine . En Actas de la 9.ª conferencia anual sobre computación genética y evolutiva (pp. 1566-1573). ACM.
  5. ^ "Uso de múltiples tarjetas gráficas como una computadora paralela de propósito general: aplicaciones para visión artificial", Actas de la 17.ª Conferencia internacional sobre reconocimiento de patrones (ICPR2004), archivada el 18 de julio de 2011 en Wayback Machine , Cambridge, Reino Unido, 23-26 de agosto de 2004, volumen 1, páginas 805-808.
  6. ^ Hull, Gerald (diciembre de 1987). "LIFE". Amazing Computing . 2 (12): 81–84.
  7. ^ Krüger, Jens; Westermann, Rüdiger (julio de 2003). "Operadores de álgebra lineal para la implementación de algoritmos numéricos en GPU". ACM Transactions on Graphics . 22 (3): 908–916. doi :10.1145/882262.882363. ISSN  0730-0301.
  8. ^ Bolz, Jeff; Farmer, Ian; Grinspun, Eitan; Schröder, Peter (julio de 2003). "Solucionadores de matrices dispersas en la GPU: gradientes conjugados y multimalla". ACM Transactions on Graphics . 22 (3): 917–924. doi :10.1145/882262.882364. ISSN  0730-0301.
  9. ^ Tarditi, David; Puri, Sidd; Oglesby, Jose (2006). "Acelerador: uso del paralelismo de datos para programar GPU para usos de propósito general" (PDF) . ACM SIGARCH Computer Architecture News . 34 (5). doi :10.1145/1168919.1168898.
  10. ^ Che, Shuai; Boyer, Michael; Meng, Jiayuan; Tarjan, D.; Sheaffer, Jeremy W.; Skadron, Kevin (2008). "Un estudio de rendimiento de aplicaciones de propósito general en procesadores gráficos utilizando CUDA". J. Parallel and Distributed Computing . 68 (10): 1370–1380. CiteSeerX 10.1.1.143.4849 . doi :10.1016/j.jpdc.2008.05.014. 
  11. ^ Glaser, J.; Nguyen, TD; Anderson, JA; Lui, P.; Spiga, F.; Millan, JA; Morse, DC; Glotzer, SC (2015). "Escalamiento fuerte de simulaciones de dinámica molecular de propósito general en GPU". Computer Physics Communications . 192 : 97–107. arXiv : 1412.3387 . Bibcode :2015CoPhC.192...97G. doi : 10.1016/j.cpc.2015.02.028 .
  12. ^ ab Du, Peng; Weber, Rick; Luszczek, Piotr; Tomov, Stanimire; Peterson, Gregory; Dongarra, Jack (2012). "De CUDA a OpenCL: hacia una solución portátil de alto rendimiento para programación de GPU multiplataforma". Computación paralela . 38 (8): 391–407. CiteSeerX 10.1.1.193.7712 . doi :10.1016/j.parco.2011.10.002. 
  13. ^ "OpenCL gana terreno frente a CUDA". 28 de febrero de 2012. Archivado desde el original el 23 de abril de 2012 . Consultado el 10 de abril de 2012 ."Como los dos principales marcos de programación para la computación GPU, OpenCL y CUDA han estado compitiendo por la atención de la comunidad de desarrolladores durante los últimos años".
  14. ^ James Fung, Steve Mann, Chris Aimone, "OpenVIDIA: Parallel GPU Computer Vision Archivado el 23 de diciembre de 2019 en Wayback Machine ", Actas de ACM Multimedia 2005, Singapur, 6-11 de noviembre de 2005, páginas 849-852
  15. ^ "Hybridizer". Hybridizer . Archivado desde el original el 17 de octubre de 2017.
  16. ^ "Página de inicio". Altimesh . Archivado desde el original el 17 de octubre de 2017.
  17. ^ "Genéricos hibridadores y herencia". 27 de julio de 2017. Archivado desde el original el 17 de octubre de 2017.
  18. ^ "Depuración y creación de perfiles con Hybridizer". 5 de junio de 2017. Archivado desde el original el 17 de octubre de 2017.
  19. ^ "Introducción". Alea GPU . Archivado desde el original el 25 de diciembre de 2016 . Consultado el 15 de diciembre de 2016 .
  20. ^ "Página de inicio". Quant Alea . Archivado desde el original el 12 de diciembre de 2016 . Consultado el 15 de diciembre de 2016 .
  21. ^ "Usar F# para programación de GPU". F# Software Foundation. Archivado desde el original el 18 de diciembre de 2016 . Consultado el 15 de diciembre de 2016 .
  22. ^ "Características de la GPU Alea". Quant Alea . Archivado desde el original el 21 de diciembre de 2016 . Consultado el 15 de diciembre de 2016 .
  23. ^ "MATLAB añade compatibilidad con GPGPU". 20 de septiembre de 2010. Archivado desde el original el 27 de septiembre de 2010.
  24. ^ ab Joselli, Mark, et al. "Un nuevo motor de física con distribución automática de procesos entre CPU y GPU [ vínculo muerto ] ". Actas del simposio ACM SIGGRAPH de 2008 sobre videojuegos. ACM, 2008.
  25. ^ "API de Android 4.2: desarrolladores de Android". developer.android.com . Archivado desde el original el 26 de agosto de 2013.
  26. ^ "Migrar scripts a OpenGL ES 3.1".
  27. ^ "Migrar scripts a Vulkan".
  28. ^ Harris, Mark (2005). "Asignación de conceptos computacionales a GPU". Cursos de ACM SIGGRAPH 2005 sobre - SIGGRAPH '05 . pp. 50–es. doi :10.1145/1198555.1198768. ISBN 9781450378338.S2CID8212423  .​
  29. ^ Doble precisión en GPU (Actas de ASIM 2005) Archivado el 21 de agosto de 2014 en Wayback Machine : Dominik Goddeke, Robert Strzodka y Stefan Turek. Aceleración de simulaciones de doble precisión (FEM) con (GPU). Actas de ASIM 2005 – 18.º Simposio sobre técnicas de simulación, 2005.
  30. ^ "Informe técnico sobre la arquitectura Nvidia Kepler GK110" (PDF) . Archivado (PDF) del original el 21 de febrero de 2015.
  31. ^ "Dentro de Pascal: la plataforma informática más nueva de Nvidia Archivado el 7 de mayo de 2017 en Wayback Machine "
  32. ^ "Dentro de Volta: la GPU para centros de datos más avanzada del mundo Archivado el 1 de enero de 2020 en Wayback Machine "
  33. ^ "https://www.tomshardware.com/reviews/geforce-radeon-power,2122.html ¿Cuánta energía necesita su tarjeta gráfica?"
  34. ^ "https://images.nvidia.com/content/tesla/pdf/nvidia-tesla-p100-PCIe-datasheet.pdf Acelerador de GPU Nvidia Tesla P100 Archivado el 24 de julio de 2018 en Wayback Machine "
  35. ^ ab "D. Göddeke, 2010. Solucionadores de redes múltiples de elementos finitos rápidos y precisos para simulaciones de PDE en clústeres de GPU. Tesis doctoral, Technischen Universität Dortmund". Archivado desde el original el 16 de diciembre de 2014.
  36. ^ Asanovic, K.; Bodik, R.; Demmel, J.; Keaveny, T.; Keutzer, K.; Kubiatowicz, J.; Morgan, N.; Patterson, D.; Sen, K.; Wawrzynek, J.; Wessel, D.; Yelick, K. (2009). "Una visión del panorama de la computación paralela". Commun. ACM . 52 (10): 56–67. doi : 10.1145/1562764.1562783 .
  37. ^ "GPU Gems – Capítulo 34, Modismos de control de flujo de GPU".
  38. ^ Future Chips. "Tutorial sobre eliminación de ramas", 2011
  39. ^ Documento de estudio de GPGPU Archivado el 4 de enero de 2007 en Wayback Machine : John D. Owens, David Luebke, Naga Govindaraju, Mark Harris, Jens Krüger, Aaron E. Lefohn y Tim Purcell. "Un estudio de computación de propósito general en hardware gráfico". Computer Graphics Forum, volumen 26, número 1, 2007, págs. 80-113.
  40. ^ "S. Sengupta, M. Harris, Y. Zhang, JD Owens, 2007. Scan primitives for GPU computing. In T. Aila and M. Segal (eds.): Graphics Hardware (2007)". Archivado desde el original el 5 de junio de 2015 . Consultado el 16 de diciembre de 2014 .
  41. ^ Blelloch, GE (1989). "Scans as primitive parallel operations" (PDF) . IEEE Transactions on Computers . 38 (11): 1526–1538. doi :10.1109/12.42122. Archivado desde el original (PDF) el 23 de septiembre de 2015 . Consultado el 16 de diciembre de 2014 .
  42. ^ "M. Harris, S. Sengupta, JD Owens. Suma de prefijos paralelos (escaneo) con CUDA. En Nvidia: GPU Gems 3, Capítulo 39".[ enlace muerto permanente ]
  43. ^ Merrill, Duane. Diseño de algoritmos orientados a la asignación con aplicación a la computación en GPU. Tesis doctoral, Departamento de Ciencias de la Computación, Universidad de Virginia. Diciembre de 2011.
  44. ^ Sean Baxter. GPU moderna Archivado el 7 de octubre de 2016 en Wayback Machine , 2013.
  45. ^ Leung, Alan, Ondřej Lhoták y Ghulam Lashari. "Paralelización automática para unidades de procesamiento gráfico". Actas de la 7.ª Conferencia internacional sobre principios y práctica de programación en Java. ACM, 2009.
  46. ^ Henriksen, Troels, Martin Elsman y Cosmin E. Oancea. "Rebanada de tamaño: un enfoque híbrido para la inferencia de tamaño en futhark". Actas del tercer taller SIGPLAN de la ACM sobre computación funcional de alto rendimiento. ACM, 2014.
  47. ^ Baskaran, Muthu Manikandan; Bondhugula, Uday; Krishnamoorthy, Sriram; Ramanujam, J.; Rountev, Atanas; Sadayappan, P. (2008). "Un marco de compilación para la optimización de anidaciones de bucles afines para gpgpus". Actas de la 22.ª conferencia internacional anual sobre supercomputación - ICS '08 . pág. 225. doi :10.1145/1375527.1375562. ISBN 9781605581583.S2CID6137960  .​
  48. ^ "K. Crane, I. Llamas, S. Tariq, 2008. Simulación y renderización en tiempo real de fluidos 3D. En Nvidia: GPU Gems 3, Capítulo 30".[ enlace muerto permanente ]
  49. ^ "M. Harris, 2004. Simulación rápida de dinámica de fluidos en la GPU. En Nvidia: GPU Gems, capítulo 38". Archivado desde el original el 7 de octubre de 2017.
  50. ^ Block, Benjamin; Virnau, Peter; Preis, Tobias (2010). "Simulaciones de Monte Carlo de múltiples espines aceleradas con múltiples GPU del modelo de Ising 2D". Computer Physics Communications . 181 (9): 1549–1556. arXiv : 1007.3726 . Código Bibliográfico :2010CoPhC.181.1549B. doi :10.1016/j.cpc.2010.05.005. S2CID  14828005.
  51. ^ Sun, S.; Bauer, C.; Beichel, R. (2011). "Segmentación automatizada en 3D de pulmones con cáncer de pulmón en datos de TC utilizando un nuevo enfoque de modelo de forma activa y robusta". IEEE Transactions on Medical Imaging . 31 (2): 449–460. doi :10.1109/TMI.2011.2171357. PMC 3657761 . PMID  21997248. 
  52. ^ Jiménez, Edward S. y Laurel J. Orr. "Replanteamiento de la unión de la reconstrucción por tomografía computarizada y la computación GPGPU". Sistemas y aplicaciones de radiación penetrante XIV. Vol. 8854. Sociedad Internacional de Óptica y Fotónica, 2013.
  53. ^ Sorensen, TS; Schaeffter, T.; Noe, KO; Hansen, MS (2008). "Aceleración de la transformada rápida de Fourier no equiespaciada en hardware gráfico de consumo". IEEE Transactions on Medical Imaging . 27 (4): 538–547. doi :10.1109/TMI.2007.909834. PMID  18390350. S2CID  206747049.
  54. ^ Garcia, Vincent; Debreuve, Eric; Barlaud, Michel (2008). "Búsqueda rápida de k vecinos más cercanos usando GPU". arXiv : 0804.1448 [cs.CV].
  55. ^ Cococcioni, Marco; Grasso, Raffaele; Rixen, Michel (2011). "Prototipado rápido de aplicaciones de computación difusa de alto rendimiento utilizando programación de GPU de alto nivel para soporte de operaciones marítimas". Simposio IEEE de 2011 sobre inteligencia computacional para aplicaciones de seguridad y defensa (CISDA) . pp. 17–23. doi :10.1109/CISDA.2011.5945947. ISBN . 978-1-4244-9939-7.S2CID2089441  .​
  56. ^ Whalen, Sean (10 de marzo de 2005). Audio y la unidad de procesamiento gráfico . CiteSeerX 10.1.1.114.365 . 
  57. ^ Wilson, Ron (3 de septiembre de 2009). "DSP te trae un paseo lunar de alta definición". EDN . Archivado desde el original el 22 de enero de 2013. Consultado el 3 de septiembre de 2009. Según se informa , Lowry está utilizando GPU (unidades de procesamiento gráfico) Tesla de Nvidia programadas en la CUDA (Compute Unified Device Architecture) de la empresa para implementar los algoritmos. Nvidia afirma que las GPU son aproximadamente dos órdenes de magnitud más rápidas que los cálculos de la CPU, lo que reduce el tiempo de procesamiento a menos de un minuto por cuadro.
  58. ^ Alerstam, E.; Svensson, T.; Andersson-Engels, S. (2008). "Computación paralela con unidades de procesamiento gráfico para simulación Monte Carlo de alta velocidad de migración de fotones" (PDF) . Journal of Biomedical Optics . 13 (6): 060504. Bibcode :2008JBO....13f0504A. doi : 10.1117/1.3041496 . PMID  19123645. Archivado (PDF) desde el original el 9 de agosto de 2011.
  59. ^ abc Hasan, Khondker S.; Chatterjee, Amlan; Radhakrishnan, Sridhar; Antonio, John K. (2014). "Modelo de predicción del rendimiento y análisis para tareas de computación intensiva en GPU" (PDF) . Ingeniería de sistemas de información avanzada (PDF) . Apuntes de clase en informática. Vol. 7908. págs. 612–617. doi :10.1007/978-3-662-44917-2_65. ISBN 978-3-642-38708-1.
  60. ^ "Física computacional con GPU: Observatorio de Lund". www.astro.lu.se . Archivado desde el original el 12 de julio de 2010.
  61. ^ 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. 
  62. ^ Svetlin A. Manavski; Giorgio Valle (2008). "Tarjetas GPU compatibles con CUDA como aceleradores de hardware eficientes para la alineación de secuencias Smith-Waterman". BMC Bioinformatics . 9 (Supl. 2): S10. doi : 10.1186/1471-2105-9-s2-s10 . PMC 2323659 . PMID  18387198. 
  63. ^ Olejnik, M; Steuwer, M; Gorlatch, S; Heider, D (15 de noviembre de 2014). "gCUP: predicción rápida del uso del correceptor del VIH-1 basada en GPU para la secuenciación de próxima generación". Bioinformática . 30 (22): 3272–3. doi : 10.1093/bioinformatics/btu535 . PMID  25123901.
  64. ^ Wang, Guohui, et al. "Aceleración de algoritmos de visión artificial mediante el marco OpenCL en la GPU móvil: un estudio de caso". Conferencia internacional IEEE de 2013 sobre acústica, habla y procesamiento de señales. IEEE, 2013.
  65. ^ Boyer, Vincent; El Baz, Didier (2013). "Avances recientes en computación GPU en investigación de operaciones". Simposio internacional IEEE 2013 sobre procesamiento paralelo y distribuido, talleres y foro de doctorado (PDF) . págs. 1778–1787. doi :10.1109/IPDPSW.2013.45. ISBN . 978-0-7695-4979-8. Número de identificación del sujeto  2774188.
  66. ^ Bukata, Libor; Sucha, Premysl; Hanzalek, Zdenek (2014). "Resolución del problema de programación de proyectos con recursos limitados utilizando la búsqueda tabú paralela diseñada para la plataforma CUDA". Journal of Parallel and Distributed Computing . 77 : 58–68. arXiv : 1711.04556 . doi :10.1016/j.jpdc.2014.11.005. S2CID  206391585.
  67. ^ Bäumelt, Zdeněk; Dvořák, Jan; Šůcha, Přemysl; Hanzálek, Zdeněk (2016). "Un enfoque novedoso para la reorganización de enfermeras basado en un algoritmo paralelo". Revista europea de investigación operativa . 251 (2): 624–639. doi :10.1016/j.ejor.2015.11.022.
  68. ^ CTU-IIG Archivado el 9 de enero de 2016 en Wayback Machine. Universidad Técnica Checa de Praga, Grupo de Informática Industrial (2015).
  69. ^ NRRPGpu Archivado el 9 de enero de 2016 en Wayback Machine. Universidad Técnica Checa de Praga, Grupo de Informática Industrial (2015).
  70. ^ Naju Mancheril. «Ordenamiento basado en GPU en PostgreSQL» (PDF) . Facultad de Ciencias de la Computación – Universidad Carnegie Mellon . Archivado (PDF) del original el 2 de agosto de 2011.
  71. ^ Manavski, Svetlin A. "La GPU compatible con CUDA como un acelerador de hardware eficiente para la criptografía AES Archivado el 7 de mayo de 2019 en Wayback Machine ." Conferencia internacional IEEE de 2007 sobre procesamiento de señales y comunicaciones. IEEE, 2007.
  72. ^ Harrison, Owen; Waldron, John (2007). "Implementación y análisis de cifrado AES en unidades de procesamiento gráfico de consumo". Hardware criptográfico y sistemas integrados - CHES 2007. Apuntes de clase en informática. Vol. 4727. pág. 209. CiteSeerX 10.1.1.149.7643 . doi :10.1007/978-3-540-74735-2_15. ISBN .  978-3-540-74734-5.
  73. ^ AES y modos de operaciones en GPU compatibles con SM4.0. Archivado el 21 de agosto de 2010 en Wayback Machine. Owen Harrison, John Waldron, Practical Symmetric Key Cryptography on Modern Graphics Hardware. En actas de USENIX Security 2008.
  74. ^ Harrison, Owen; Waldron, John (2009). "Aceleración eficiente de la criptografía asimétrica en hardware gráfico". Progreso en criptología – AFRICACRYPT 2009. Apuntes de clase en informática. Vol. 5580. pág. 350. CiteSeerX 10.1.1.155.5448 . doi :10.1007/978-3-642-02384-2_22. ISBN .  978-3-642-02383-5.
  75. ^ "Problemas de teraflop: la potencia de las unidades de procesamiento gráfico puede amenazar el sistema de seguridad de contraseñas del mundo". Instituto de Investigación Tecnológica de Georgia . Archivado desde el original el 30 de diciembre de 2010. Consultado el 7 de noviembre de 2010 .
  76. ^ "¿Quieres disuadir a los hackers? Haz que tu contraseña sea más larga". NBC News . 19 de agosto de 2010. Archivado desde el original el 11 de julio de 2013. Consultado el 7 de noviembre de 2010 .
  77. ^ Lerner, Larry (9 de abril de 2009). "Punto de vista: GPU masivas, no CPU para simulaciones EDA". EE Times . Consultado el 14 de septiembre de 2023 .
  78. ^ "W2500 ADS Transient Convolution GT" acelera las simulaciones de integridad de señal en estaciones de trabajo que tienen unidades de procesamiento gráfico (GPU) basadas en la arquitectura de dispositivo unificado de computación de Nvidia (CUDA)
  79. ^ GrAVity: un motor antivirus masivamente paralelo Archivado el 27 de julio de 2010 en Wayback Machine . Giorgos Vasiliadis y Sotiris Ioannidis, GrAVity: un motor antivirus masivamente paralelo. En actas de RAID 2010.
  80. ^ "Kaspersky Lab utiliza tecnologías de Nvidia para mejorar la protección". Kaspersky Lab . 14 de diciembre de 2009. Archivado desde el original el 19 de junio de 2010. Durante las pruebas internas, el Tesla S1070 demostró un aumento de 360 ​​veces en la velocidad del algoritmo de definición de similitud en comparación con el popular procesador central Intel Core 2 Duo que funciona a una velocidad de reloj de 2,6 GHz.
  81. ^ Gnort: Detección de intrusiones en redes de alto rendimiento mediante procesadores gráficos Archivado el 9 de abril de 2011 en Wayback Machine . Giorgos Vasiliadis et al., Gnort: Detección de intrusiones en redes de alto rendimiento mediante procesadores gráficos. En actas de RAID 2008.
  82. ^ Coincidencia de expresiones regulares en hardware gráfico para detección de intrusiones Archivado el 27 de julio de 2010 en Wayback Machine . Giorgos Vasiliadis et al., Coincidencia de expresiones regulares en hardware gráfico para detección de intrusiones. En actas de RAID 2009.
  83. ^ "Aplicaciones aceleradas por GPU" (PDF) . Archivado (PDF) del original el 25 de marzo de 2013 . Consultado el 12 de septiembre de 2013 .
  84. ^ Langdon, William B; Lam, Brian Yee Hong; Petke, Justyna; Harman, Mark (2015). "Mejora del software de análisis de ADN CUDA con programación genética". Actas de la Conferencia sobre computación genética y evolutiva de 2015 - GECCO '15 . págs. 1063–1070. doi :10.1145/2739480.2754652. ISBN 9781450334723.S2CID8992769  .​

Lectura adicional