stringtranslate.com

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

La computación de propósito general en unidades de procesamiento de gráficos ( GPGPU , o con menos frecuencia GPGP ) es el uso de una unidad de procesamiento de gráficos (GPU), que generalmente maneja el cálculo solo para gráficos de computadora , para realizar cálculos en aplicaciones tradicionalmente manejadas por la unidad central de procesamiento ( UPC). [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 de gráficos. [5]

Básicamente, una canalización GPGPU es un tipo de procesamiento paralelo entre una o más GPU y CPU que analiza datos como si estuvieran en imágenes u otra forma gráfica. Si bien las GPU funcionan a frecuencias más bajas, normalmente tienen muchas veces más núcleos . Por tanto, las GPU pueden procesar muchas más imágenes y datos gráficos por segundo que una CPU tradicional. Migrar datos a forma gráfica 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 mejores sombreadores ). Se descubrió que estos canales se adaptaban bien a las necesidades informáticas científicas y desde entonces se han desarrollado en esta dirección.

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, Game of Life de Conway se convirtió en uno de los primeros ejemplos de computación de propósito general que utilizaba uno de los primeros procesadores de flujo llamado blitter para invocar una secuencia especial de operaciones lógicas en vectores de bits. [6]

La informática de propósito general en GPU se volvió más práctica y popular aproximadamente después de 2001, con la llegada de sombreadores programables y soporte de punto flotante en los procesadores gráficos. En particular, los problemas que involucran matrices y/o vectores  (especialmente vectores de dos, tres o cuatro dimensiones) fueron fáciles de traducir a una GPU, que actúa con velocidad nativa y soporte en esos tipos. Un hito importante 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 corrían 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, según lo respaldado por las dos API principales 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 en favor de conceptos informáticos 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 los canales GPGPU modernos pueden aprovechar la velocidad de una GPU sin requerir una conversión completa y explícita de los datos a un formato gráfico.

Mark Harris, 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 en busca de 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 informático de GPU abierto de uso general dominante y es un estándar abierto definido por Khronos Group . [ cita necesaria ] OpenCL proporciona una plataforma GPGPU multiplataforma que además admite computación paralela de datos en CPU. OpenCL es compatible activamente con las plataformas Intel, AMD, Nvidia y ARM. Khronos Group 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 utilizar el lenguaje de programación C para codificar algoritmos para su ejecución en 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 al consumidor.

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

Altimesh Hybridizer creado por Altimesh compila el lenguaje intermedio común en archivos binarios 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 informática DirectCompute GPU, lanzada con la API DirectX 11 .

Alea GPU ,[19]creada por QuantAlea,[20]presenta capacidades informáticas GPU nativas para los lenguajes Microsoft .NETF#[21]yC#. Alea GPU también proporciona un modelo de programación de GPU simplificado basado en GPU paralelo y agregado paralelo mediante 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 , los cuales se usan típicamente 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 al aumento de la 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] Apple introdujo la API Metal patentada para aplicaciones iOS , capaz de ejecutar código arbitrario a través de los sombreadores de cálculo GPU de Apple.

Soporte de hardware

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

números enteros

Las tarjetas de video anteriores a DirectX 9 solo admitían tipos de colores enteros o con paleta . Hay varios formatos disponibles, cada uno de los cuales contiene un elemento rojo, un elemento verde y un elemento azul. [ cita necesaria ] A veces se agrega otro valor alfa, que se utilizará para mayor transparencia. Los formatos comunes son:

Números de punto flotante

Para los primeros gráficos de función fija o programabilidad limitada (es decir, hasta GPU compatibles con DirectX 8.1 inclusive), esto fue suficiente porque esta es también la representación utilizada en las pantallas. Esta representación tiene ciertas limitaciones. 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 viene con tarjetas de video que cumplen con la especificación DirectX 9.

DirectX 9 Shader Model 2.x sugirió la compatibilidad con dos tipos de precisión: precisión total y parcial. El soporte de precisión total podría ser FP32 o FP24 (coma flotante de 32 o 24 bits por componente) o mayor, mientras que la precisión parcial era FP16. La serie de GPU Radeon R300 de ATI admitía la precisión FP24 solo en la canalización 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 combinación 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 cierto para todos los proveedores. [26] 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 (flotante de doble precisión) están comúnmente disponibles en las CPU, no son universalmente compatibles con 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 coma flotante de doble precisión en GPU; sin embargo, la compensación de velocidad anula cualquier beneficio de descargar la informática en la GPU en primer lugar. [27]

Vectorización

La mayoría de las operaciones en la GPU funcionan de forma vectorizada: una operación se puede realizar con hasta cuatro valores a la vez. Por ejemplo, si un color ⟨R1, G1, B1⟩ va a ser modulado por otro color ⟨R2, G2, B2⟩ , la GPU puede producir el color resultante ⟨R1*R2, G1*G2, B1*B2⟩ en uno operación. Esta funcionalidad es útil en gráficos porque casi todos los tipos de datos básicos son un vector (ya sea de 2, 3 o 4 dimensiones). [ cita necesaria ] Los ejemplos incluyen vértices, colores, vectores normales y 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 durante mucho tiempo en las CPU. [ cita necesaria ]

GPU frente a CPU

Originalmente, los datos simplemente se pasaban en un sentido desde una unidad central de procesamiento (CPU) a una unidad de procesamiento de gráficos (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 de datos simples y luego complejas para pasarlas de vuelta a la CPU que analizaba una imagen, o un conjunto de datos científicos representados en formato 2D o 3D que un La tarjeta de video puede entender. Debido a que la GPU tiene acceso a cada operación de extracción, 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, a medida que aumenta la velocidad de acceso entre una CPU y su conjunto más grande de memoria de acceso aleatorio. (o en el peor de los casos, un disco duro ) es más lento que las GPU y las tarjetas de vídeo, que normalmente contienen cantidades más pequeñas de memoria más cara y de acceso mucho más rápido. Transferir la parte del conjunto de datos que se analizará activamente a la 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 bidireccionalmente desde la GPU a la CPU; generalmente, el rendimiento de datos en ambas direcciones es idealmente alto, lo que genera un efecto multiplicador en la velocidad de un algoritmo específico de alto uso . Los canales GPGPU pueden mejorar la eficiencia en conjuntos de datos especialmente grandes y/o datos que contienen imágenes 2D o 3D. Se utiliza en procesos de gráficos complejos, así como en informática científica ; más aún en campos con grandes conjuntos de datos como el mapeo del genoma , o donde el análisis bidimensional o tridimensional es útil, especialmente en la actualidad el análisis de biomoléculas , el estudio de proteínas y otros tipos de química orgánica compleja . Estos canales también pueden mejorar enormemente la eficiencia en el procesamiento de imágenes y la visión por computadora , entre otros campos; así como el procesamiento paralelo en general. Algunas canalizaciones muy optimizadas han producido aumentos de velocidad de varios cientos de veces la canalización original basada en CPU en una tarea de alto uso.

Un ejemplo simple sería un programa de GPU que recopila datos sobre los valores de iluminación promedio a medida que presenta alguna vista desde una cámara o un programa de gráficos de computadora al programa principal de la CPU, de modo que la CPU luego pueda realizar ajustes en la pantalla general. vista. Un ejemplo más avanzado podría utilizar la detección de bordes para devolver información numérica y 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 de hardware rápido y local a cada píxel u otro elemento de imagen en una imagen, puede analizarlo y promediarlo (para el primer ejemplo) o aplicar un filtro de borde Sobel u otro filtro de convolución (para el segundo) con mucho 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 un concepto de hardware; es un tipo de algoritmo , no una pieza de equipo. Sin embargo, los diseños de equipos especializados pueden mejorar aún más la eficiencia de los canales GPGPU, que tradicionalmente realizan relativamente pocos algoritmos en cantidades muy grandes de datos. Por lo tanto, las tareas masivamente paralelizadas y con niveles de datos gigantescos pueden paralelizarse aún más a través de configuraciones especializadas como la computación en rack (muchas máquinas similares, altamente adaptadas, integradas en un rack ), que agrega una tercera capa: muchas unidades informáticas, cada una de las cuales utiliza muchas CPU para corresponder. a muchas GPU. Algunos "mineros" de Bitcoin utilizaron este tipo de configuraciones para el procesamiento de grandes cantidades.

cachés

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

Registrar archivo

Las GPU tienen archivos de registro muy grandes , lo que les permite reducir la latencia del cambio de contexto. El tamaño del archivo de registro también está aumentando en las diferentes generaciones de GPU; por ejemplo, el tamaño total del archivo de registro en las GPU Maxwell (GM200), Pascal y Volta es de 6 MiB, 14 MiB y 20 MiB, respectivamente. [29] [30] 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 tiene el costo de un alto consumo de energía, que bajo carga completa es, de hecho, tanta energía como el resto del sistema de PC combinado. [31] Se especificó que el consumo máximo de energía de la GPU de la serie Pascal (Tesla P100) era de 250 W. [32]

Procesamiento de flujo

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

La siguiente discusión que se refiere a vértices, fragmentos y texturas se refiere principalmente al modelo heredado de programación GPGPU, donde se usaban API de gráficos ( OpenGL o DirectX ) para realizar cálculos de propósito general. Con la introducción de las API informáticas de propósito general CUDA (Nvidia, 2007) y OpenCL (independiente del proveedor, 2008), en los nuevos códigos GPGPU ya no es necesario asignar el cálculo a primitivas gráficas. La naturaleza del procesamiento de flujo de las GPU sigue siendo válida independientemente de las API utilizadas. (Ver, por ejemplo, [33] )

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 quiere procesar muchos vértices o fragmentos de la misma forma. En este sentido, las GPU son procesadores de flujo: procesadores que pueden funcionar en paralelo ejecutando un núcleo en muchos registros en un flujo a la vez.

Una secuencia es simplemente un conjunto de registros que requieren un cálculo similar. Las transmisiones proporcionan paralelismo de datos. Los núcleos son las funciones que se aplican a cada elemento de la secuencia. En las GPU, los vértices y fragmentos son los elementos de las secuencias y los sombreadores de vértices y fragmentos son los núcleos que se ejecutarán en ellos. [ dudoso ] Para cada elemento solo podemos leer desde la entrada, realizar operaciones en ella y escribir en la salida. Está permitido tener múltiples entradas y múltiples salidas, pero nunca una parte de la memoria que sea a la vez legible y escribible. [ impreciso ]

La intensidad aritmética se define como el número 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. [34]

Las aplicaciones GPGPU ideales tienen grandes conjuntos de datos, alto paralelismo y dependencia mínima entre 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 la salida por una textura de sólo escritura en lugar del framebuffer. Esto se hace a través de Render to Texture (RTT), Render-To-Backbuffer-Copy-To-Texture (RTBCTT) o la transmisión más reciente.

Texturas como corriente

La forma más común para una transmisión en GPGPU es una cuadrícula 2D porque encaja naturalmente con el modelo de renderizado integrado en las GPU. Muchos cálculos se asignan naturalmente a cuadrículas: álgebra matricial, procesamiento de imágenes, simulación basada físicamente, etc.

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

granos

Los núcleos informáticos pueden considerarse como el cuerpo de bucles . Por ejemplo, un programador que opera en una grilla en la CPU podría tener un código similar a este:

// Las cuadrículas de entrada y salida tienen 10000 x 10000 o 100 millones de elementos.void transform_10k_by_10k_grid ( flotar en [ 10000 ][ 10000 ], flotar fuera [ 10000 ][ 10000 ]) { para ( int x = 0 ; x < 10000 ; x ++ ) { para ( int y = 0 ; y < 10000 ; y ++ ) { // La siguiente línea se ejecuta 100 millones de veces [ 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 geométrico.

Control de flujo

En código secuencial es posible controlar el flujo del programa utilizando declaraciones if-then-else y varias formas de bucles. Estas estructuras de control de flujo se han agregado recientemente a las GPU. [35] Las escrituras condicionales se podían realizar utilizando una serie de operaciones aritméticas/bits correctamente diseñadas, pero no era posible realizar bucles ni bifurcaciones condicionales.

Las GPU recientes permiten la ramificación, pero normalmente con una penalización en el rendimiento. Por lo general, se debe evitar la bifurcación en bucles internos, ya sea en código de CPU o GPU, y se pueden utilizar varios métodos, como resolución de bifurcación estática, cálculo previo, predicción, división de bucles [36] y Z-cull [37] para lograrlo. bifurcación cuando no existe soporte de hardware.

métodos de GPU

Mapa

La operación de mapa simplemente aplica la función dada (el núcleo) a cada elemento de la secuencia. Un ejemplo sencillo es multiplicar cada valor del flujo por una constante (aumentando el brillo de una imagen). La operación del mapa es sencilla 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 de resultados del mismo tamaño se almacena en el búfer de salida.

Reducir

Algunos cálculos requieren calcular una secuencia más pequeña (posiblemente una secuencia de un solo elemento) a partir de una secuencia más grande. A esto se le llama reducción de la corriente. 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 en el que se aplica la operación se reduce hasta que solo queda un elemento de corriente.

Filtrado de flujo

El filtrado de corrientes es esencialmente una reducción no uniforme. El filtrado implica eliminar elementos de la secuencia según algunos criterios.

Escanear

La operación de escaneo, también denominada suma de prefijo 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 una identidad para existir. Si bien a primera vista la operación puede parecer intrínsecamente serial, son posibles algoritmos de escaneo paralelo eficientes y se han implementado en unidades de procesamiento de gráficos. La operación de escaneo tiene usos, por ejemplo, en clasificación rápida y multiplicación de vectores de matriz dispersa. [33] [38] [39] [40]

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 está fija en el momento de la creación del fragmento y el programador no puede modificarla. Sin embargo, a veces una operación de dispersión lógica puede reformularse o implementarse con otro paso de recopilación. Una implementación de dispersión primero emitiría tanto un valor de salida como 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 los núcleos informáticos dedicados , la dispersión se puede realizar mediante escrituras indexadas.

Recolectar

Reunir es lo contrario de dispersar. Después de que la dispersión reordena los elementos según un mapa, la recopilación puede restaurar el orden de los elementos según la dispersión del mapa utilizada. En los núcleos informáticos dedicados, la recopilación se puede realizar mediante lecturas indexadas. En otros sombreadores, se realiza con búsquedas de texturas.

Clasificar

La operación de clasificación transforma un conjunto desordenado de elementos en un conjunto ordenado de elementos. La implementación más común en las GPU es el uso de clasificación por base para datos enteros y de punto flotante y clasificación de fusión de grano grueso y redes de clasificación de grano fino para datos generales comparables. [41] [42]

Buscar

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. La GPU no se utiliza para acelerar la búsqueda de un elemento individual, sino que se utiliza para ejecutar múltiples búsquedas en paralelo. [ cita necesaria ] Principalmente el método de búsqueda utilizado es la búsqueda binaria en elementos ordenados.

Estructuras de datos

Se pueden representar una variedad de estructuras de datos en la GPU:

Aplicaciones

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

Bioinformática

Uso de GPGPU en bioinformática: [57] [81]

Dinámica molecular

† Las aceleraciones esperadas dependen en gran medida de la configuración del sistema. Rendimiento de la GPU comparado con el zócalo de CPU x86 de múltiples núcleos . El rendimiento de la GPU se compara con las funciones compatibles con la GPU y puede ser una comparación del 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 de certificación.

Ver también

Referencias

  1. ^ Fungo, James; Tang, Félix; Mann, Steve (7 a 10 de octubre de 2002). Realidad mediada mediante hardware de gráficos por computadora para visión por computadora (PDF) . Actas del Simposio internacional sobre informática portátil 2002 (ISWC2002). Seattle, Washington, Estados Unidos. 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 rasgos distintivos 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 por computadora en unidades de procesamiento de gráficos", Actas de la Conferencia internacional IEEE sobre acústica, habla y procesamiento de señales (ICASSP 2004) Archivadas el 19 de agosto de 2011 en Wayback Machine : Montreal, Quebec, Canadá, 17 a 21 de mayo de 2004. , págs. 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 novena conferencia anual sobre computación genética y evolutiva (págs. 1566-1573). ACM.
  5. ^ "Uso de varias tarjetas gráficas como computadora paralela de uso general: aplicaciones a la visión por computadora", 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 a 26 de agosto de 2004. , volumen 1, páginas 805–808.
  6. ^ Hull, Gerald (diciembre de 1987). "VIDA". Computación asombrosa . 2 (12): 81–84.
  7. ^ Kruger, Jens; Westermann, Rüdiger (julio de 2003). "Operadores de álgebra lineal para la implementación de algoritmos numéricos en GPU". Transacciones ACM sobre gráficos . 22 (3): 908–916. doi :10.1145/882262.882363. ISSN  0730-0301.
  8. ^ Bolz, Jeff; Granjero, Ian; Grinspun, Eitan; Schröder, Peter (julio de 2003). "Solucionadores de matrices dispersas en la GPU: gradientes conjugados y multicuadrícula". Transacciones ACM sobre gráficos . 22 (3): 917–924. doi :10.1145/882262.882364. ISSN  0730-0301.
  9. ^ Tarditi, David; Puri, Sidd; Oglesby, José (2006). "Acelerador: uso del paralelismo de datos para programar GPU para usos generales" (PDF) . Noticias de arquitectura informática de ACM SIGARCH . 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 uso general en procesadores gráficos que utilizan CUDA". J. Computación Paralela y Distribuida . 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; Luis, P.; Spiga, F.; Millán, JA; Morse, CC; Glotzer, Carolina del Sur (2015). "Fuerte escalamiento de simulaciones de dinámica molecular de uso general en GPU". Comunicaciones de Física Informática . 192 : 97-107. arXiv : 1412.3387 . Código Bib : 2015CoPhC.192...97G. doi : 10.1016/j.cpc.2015.02.028 .
  12. ^ ab Du, Peng; Weber, Rick; Luszczek, Piotr; Tomov, Stanimire; Peterson, Gregorio; Dongarra, Jack (2012). "De CUDA a OpenCL: hacia una solución portátil de rendimiento para la 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 en 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 computación GPU, OpenCL y CUDA han estado compitiendo por la participación en 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 a 11 de noviembre de 2005, páginas 849–852
  15. ^ "Hibridador". Hibridizador . 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. ^ "Herencia y genéricos de hibridadores". 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. ^ "Utilice F# para la programación de GPU". Fundación de software F#. 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 agrega 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-GPU [ enlace muerto ] ". Actas del simposio ACM SIGGRAPH de 2008 sobre videojuegos. ACM, 2008.
  25. ^ "API de Android 4.2: desarrolladores de Android". desarrollador.android.com . Archivado desde el original el 26 de agosto de 2013.
  26. ^ Harris, Marcos (2005). "Asignación de conceptos computacionales a GPU". ACM SIGGRAPH 2005 Cursos sobre - SIGGRAPH '05 . págs.50–es. doi :10.1145/1198555.1198768. ISBN 9781450378338. S2CID  8212423.
  27. ^ 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.
  28. ^ "Nvidia-Kepler-GK110-Architecture-Whitepaper" (PDF) . Archivado (PDF) desde el original el 21 de febrero de 2015.
  29. ^ "Inside Pascal: la plataforma informática más nueva de Nvidia Archivado el 7 de mayo de 2017 en Wayback Machine "
  30. ^ "Inside Volta: la GPU para centros de datos más avanzada del mundo Archivado el 1 de enero de 2020 en Wayback Machine "
  31. ^ "https://www.tomshardware.com/reviews/geforce-radeon-power,2122.html ¿Cuánta energía necesita su tarjeta gráfica?"
  32. ^ "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 "
  33. ^ 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.
  34. ^ 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 vista del panorama de la informática paralela". Comunitario. ACM . 52 (10): 56–67. doi : 10.1145/1562764.1562783 .
  35. ^ "GPU Gems - Capítulo 34, Modismos de control de flujo de GPU".
  36. ^ Fichas del futuro. "Tutorial sobre eliminación de ramas", 2011
  37. ^ Documento de encuesta 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 sobre informática de uso general en hardware de gráficos". Foro de gráficos por computadora, volumen 26, número 1, 2007, págs. 80-113.
  38. ^ "S. Sengupta, M. Harris, Y. Zhang, JD Owens, 2007. Primitivas de escaneo para computación GPU. En T. Aila y M. Segal (eds.): Hardware de gráficos (2007)". Archivado desde el original el 5 de junio de 2015 . Consultado el 16 de diciembre de 2014 .
  39. ^ Blelloch, GE (1989). "Escaneos como operaciones paralelas primitivas" (PDF) . Transacciones IEEE en computadoras . 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 .
  40. ^ "M. Harris, S. Sengupta, JD Owens. Suma de prefijos paralelos (escaneo) con CUDA. En Nvidia: GPU Gems 3, capítulo 39".[ enlace muerto permanente ]
  41. ^ Merril, Duane. Diseño de algoritmos orientados a la asignación con aplicación a la computación GPU. Doctor. disertación, Departamento de Ciencias de la Computación, Universidad de Virginia. Diciembre de 2011.
  42. ^ Sean Baxter. GPU moderna Archivado el 7 de octubre de 2016 en Wayback Machine , 2013.
  43. ^ Leung, Alan, Ondřej Lhoták y Ghulam Lashari. "Paralelización automática para unidades de procesamiento de gráficos". Actas de la Séptima Conferencia Internacional sobre Principios y Práctica de la Programación en Java. ACM, 2009.
  44. ^ Henriksen, Troels, Martin Elsman y Cosmin E. Oancea. "Corte de tamaño: un enfoque híbrido para la inferencia de tamaño en futhark". Actas del 3er taller ACM SIGPLAN sobre informática funcional de alto rendimiento. ACM, 2014.
  45. ^ Baskaran, Muthu Manikandan; Bondhugula, Uday; Krishnamoorthy, Sriram; Ramanujam, J.; Rountev, Atanas; Sadayappan, P. (2008). "Un marco de compilación para la optimización de nidos de bucles afines para gpgpus". Actas de la 22ª conferencia internacional anual sobre supercomputación - ICS '08 . pag. 225. doi : 10.1145/1375527.1375562. ISBN 9781605581583. S2CID  6137960.
  46. ^ "K. Crane, I. Llamas, S. Tariq, 2008. Simulación y renderizado en tiempo real de fluidos 3D. En Nvidia: GPU Gems 3, capítulo 30".[ enlace muerto permanente ]
  47. ^ "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.
  48. ^ Bloquear, Benjamín; Virnau, Peter; Preis, Tobías (2010). "Simulaciones Monte Carlo de múltiples giros aceleradas por GPU múltiple del modelo 2D de Ising". Comunicaciones de Física Informática . 181 (9): 1549-1556. arXiv : 1007.3726 . Código Bib : 2010CoPhC.181.1549B. doi :10.1016/j.cpc.2010.05.005. S2CID  14828005.
  49. ^ Sol, S.; Bauer, C.; Beichel, R. (2011). "Segmentación tridimensional automatizada de pulmones con cáncer de pulmón en datos de TC utilizando un enfoque novedoso y robusto de modelo de forma activa". Transacciones IEEE sobre imágenes médicas . 31 (2): 449–460. doi :10.1109/TMI.2011.2171357. PMC 3657761 . PMID  21997248. 
  50. ^ Jiménez, Edward S. y Laurel J. Orr. "Repensar la unión de la reconstrucción por tomografía computarizada y la computación GPGPU". Sistemas y aplicaciones de radiaciones penetrantes XIV. vol. 8854. Sociedad Internacional de Óptica y Fotónica, 2013.
  51. ^ Sorensen, TS; Schaeffter, T.; Noé, KO; Hansen, MS (2008). "Aceleración de la transformada rápida de Fourier no equiespaciada en hardware de gráficos básicos". Transacciones IEEE sobre imágenes médicas . 27 (4): 538–547. doi :10.1109/TMI.2007.909834. PMID  18390350. S2CID  206747049.
  52. ^ García, Vicente; Debreuve, Eric; Barlaud, Michel (2008). "Búsqueda rápida de k vecino más cercano mediante GPU". arXiv : 0804.1448 [cs.CV].
  53. ^ Cococcioni, Marco; Grasso, Raffaele; Rixen, Michel (2011). "Creación rápida de prototipos 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 2011 sobre inteligencia computacional para aplicaciones de seguridad y defensa (CISDA) . págs. 17-23. doi :10.1109/CISDA.2011.5945947. ISBN 978-1-4244-9939-7. S2CID  2089441.
  54. ^ Whalen, Sean (10 de marzo de 2005). Unidad de procesamiento de audio y gráficos . CiteSeerX 10.1.1.114.365 . 
  55. ^ Wilson, Ron (3 de septiembre de 2009). "DSP te ofrece un paseo lunar en alta definición". EDN . Archivado desde el original el 22 de enero de 2013 . Consultado el 3 de septiembre de 2009 . Se informa que Lowry está utilizando GPU (unidades de procesamiento de gráficos) Nvidia Tesla programadas en CUDA (Arquitectura de dispositivo unificado de cómputo) de la compañía 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.
  56. ^ Alerstam, E.; Svensson, T.; Andersson-Engels, S. (2008). "Computación paralela con unidades de procesamiento de gráficos para simulación Monte Carlo de alta velocidad de migración de fotones" (PDF) . Revista de Óptica Biomédica . 13 (6): 060504. Código bibliográfico : 2008JBO....13f0504A. doi : 10.1117/1.3041496 . PMID  19123645. Archivado (PDF) desde el original el 9 de agosto de 2011.
  57. ^ abc Hasan, Khondker S.; Chatterjee, Amlan; Radhakrishnan, Sridhar; Antonio, John K. (2014). "Análisis y modelo de predicción del rendimiento para tareas informáticas intensivas en GPU" (PDF) . Ingeniería Avanzada de Sistemas de Información (PDF) . Apuntes de conferencias sobre informática. vol. 7908. págs. 612–617. doi :10.1007/978-3-662-44917-2_65. ISBN 978-3-642-38708-1.
  58. ^ "Física computacional con GPU: Observatorio de Lund". www.astro.lu.se . Archivado desde el original el 12 de julio de 2010.
  59. ^ Schatz, Michael C; Trapnell, Cole; Delcher, Arthur L; Varshney, Amitabh (2007). "Alineación de secuencias de alto rendimiento mediante unidades de procesamiento de gráficos". Bioinformática BMC . 8 : 474. doi : 10.1186/1471-2105-8-474 . PMC 2222658 . PMID  18070356. 
  60. ^ Svetlin A. Manavski; Giorgio Valle (2008). "Tarjetas GPU compatibles con CUDA como aceleradores de hardware eficientes para la alineación de secuencias de Smith-Waterman". Bioinformática BMC . 9 (Suplemento 2): S10. doi : 10.1186/1471-2105-9-s2-s10 . PMC 2323659 . PMID  18387198. 
  61. ^ 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 secuenciación de próxima generación". Bioinformática . 30 (22): 3272–3. doi : 10.1093/bioinformática/btu535 . PMID  25123901.
  62. ^ Wang, Guohui y col. "Acelerar algoritmos de visión por computadora utilizando el marco OpenCL en la GPU móvil: un estudio de caso". Conferencia internacional IEEE 2013 sobre acústica, habla y procesamiento de señales. IEEE, 2013.
  63. ^ Boyer, Vicente; El Baz, Didier (2013). "Avances recientes en la informática GPU en la 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. S2CID  2774188.
  64. ^ Bukata, Libor; Sucha, Premysl; Hanzalek, Zdenek (2014). "Resolver el problema de programación de proyectos con recursos limitados utilizando la búsqueda tabú paralela diseñada para la plataforma CUDA". Revista de Computación Paralela y Distribuida . 77 : 58–68. arXiv : 1711.04556 . doi :10.1016/j.jpdc.2014.11.005. S2CID  206391585.
  65. ^ 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.
  66. ^ CTU-IIG Archivado el 9 de enero de 2016 en la Universidad Técnica Checa Wayback Machine de Praga, Grupo de Informática Industrial (2015).
  67. ^ NRRPGpu Archivado el 9 de enero de 2016 en la Universidad Técnica Checa Wayback Machine de Praga, Grupo de Informática Industrial (2015).
  68. ^ Naju Mancheril. "Clasificación basada en GPU en PostgreSQL" (PDF) . Facultad de Ciencias de la Computación - Universidad Carnegie Mellon . Archivado (PDF) desde el original el 2 de agosto de 2011.
  69. ^ Manavski, Svetlin A. "GPU compatible con CUDA como acelerador de hardware eficiente para criptografía AES Archivado el 7 de mayo de 2019 en Wayback Machine ". Conferencia internacional IEEE 2007 sobre comunicaciones y procesamiento de señales. IEEE, 2007.
  70. ^ Harrison, Owen; Waldron, John (2007). "Implementación y análisis del cifrado AES en unidades de procesamiento de gráficos de productos básicos". Hardware criptográfico y sistemas integrados - CHES 2007 . Apuntes de conferencias sobre 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.
  71. ^ AES y modos de operación en GPU compatibles con SM4.0. Archivado el 21 de agosto de 2010 en Wayback Machine Owen Harrison, John Waldron, Criptografía práctica de clave simétrica en hardware de gráficos moderno. En actas de USENIX Security 2008.
  72. ^ Harrison, Owen; Waldron, John (2009). "Aceleración eficiente de la criptografía asimétrica en hardware de gráficos". Progresos en criptología - AFRICACRYPT 2009 . Apuntes de conferencias sobre 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.
  73. ^ "Problemas de Teraflop: el poder de las unidades de procesamiento de gráficos 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 .
  74. ^ "¿Quiere disuadir a los piratas informáticos? Haga su contraseña más larga". Noticias NBC . 19 de agosto de 2010 . Consultado el 7 de noviembre de 2010 .
  75. ^ Lerner, Larry (9 de abril de 2009). "Punto de vista: GPU masivas, no CPU para simulaciones EDA". Tiempos EE.UU. Consultado el 14 de septiembre de 2023 .
  76. ^ "W2500 ADS GT de convolución transitoria". acelera las simulaciones de integridad de la señal en estaciones de trabajo que tienen unidades de procesamiento de gráficos (GPU) basadas en Nvidia Compute Unified Device Architecture (CUDA)
  77. ^ 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.
  78. ^ "Kaspersky Lab utiliza tecnologías de Nvidia para mejorar la protección". Laboratorio Kaspersky . 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 que define similitud en comparación con el popular procesador central Intel Core 2 Duo que funciona con un reloj. velocidad de 2,6 GHz.
  79. ^ Gnort: Detección de intrusiones en la red 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 la red de alto rendimiento mediante procesadores de gráficos. En actas de RAID 2008.
  80. ^ Coincidencia de expresiones regulares en hardware de gráficos 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 de gráficos para la detección de intrusiones. En actuaciones de RAID 2009.
  81. ^ "Aplicaciones aceleradas por GPU" (PDF) . Archivado (PDF) desde el original el 25 de marzo de 2013 . Consultado el 12 de septiembre de 2013 .
  82. ^ 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 de Computación Genética y Evolutiva de 2015 - GECCO '15 . págs. 1063-1070. doi :10.1145/2739480.2754652. ISBN 9781450334723. S2CID  8992769.

Otras lecturas