cuda - tipos - ¿Qué tan bien las tareas de programación comunes se traducen en GPU?
tipos de gpu (6)
Recientemente comencé a trabajar en un proyecto para establecer la mejor manera de aprovechar la potencia de procesamiento disponible en las tarjetas gráficas modernas para la programación general. Parece que la programación GPU de propósito general de campo tiene un gran sesgo hacia aplicaciones científicas con mucha matemática pesada, ya que encaja bien con el modelo computacional de la GPU. Todo esto está bien y bien, pero la mayoría de las personas no dedican todo su tiempo a ejecutar software de simulación y similares, así que pensamos que sería posible crear una base común para construir fácilmente software habilitado para GPU para las masas.
Esto lleva a la pregunta que me gustaría plantear; ¿Cuáles son los tipos de trabajo más comunes realizados por los programas? No es un requisito que el trabajo se traduzca muy bien a la programación de GPU, ya que estamos dispuestos a aceptar mejoras modestas en el rendimiento (mejor que nada, ¿no?).
Hay un par de temas que tenemos en mente ya:
- Gestión de datos: manipulación de grandes cantidades de datos de bases de datos y de otro tipo.
- Programas de tipo de hoja de cálculo (de alguna manera está relacionado con el anterior).
- Programación de GUI (aunque podría ser imposible obtener acceso al código relevante).
- Algoritmos comunes como clasificación y búsqueda.
- Colecciones comunes (e integrándolas con algoritmos de manipulación de datos)
¿Qué otras tareas de codificación son muy comunes? Sospecho que gran parte del código que se está escribiendo pertenece a la categoría de gestión de inventario y de otro modo al seguimiento de ''objetos'' reales.
Como no tengo experiencia en la industria, pensé que podría haber una cantidad de tipos básicos de código que se realiza con más frecuencia de lo que creo, pero que simplemente no se materializa como productos externos.
Se apreciarán tanto las tareas de programación de alto nivel como las operaciones específicas de bajo nivel.
La programación general se traduce terriblemente en GPU. Las GPU están dedicadas a realizar tareas bastante simples en flujos de datos a un ritmo masivo, con un paralelismo masivo. No manejan bien los ricos datos y las estructuras de control de la programación general, y no tiene sentido tratar de calzar eso en ellos.
Esto no está muy lejos de mi impresión de la situación, pero en este momento no nos preocupamos demasiado por eso. Estamos empezando por obtener una visión general de las opciones en las que debemos enfocarnos. Una vez hecho esto, los analizaremos un poco más y descubriremos cuáles opciones, si las hay, son plausibles. Si terminamos determinando que es imposible hacer algo dentro del campo, y solo estamos aumentando la factura de electricidad de todos, ese también es un resultado válido.
Hago un montón de simplificación de configuración. Es decir, envuelvo la generación / gestión de valores de configuración dentro de una UI. El principal beneficio es que puedo controlar el flujo de trabajo y la presentación para simplificar la configuración de aplicaciones / sitios / servicios para usuarios no expertos en tecnología.
La programación general se traduce terriblemente en GPU. Las GPU están dedicadas a realizar tareas bastante simples en flujos de datos a un ritmo masivo, con un paralelismo masivo. No manejan bien los ricos datos y las estructuras de control de la programación general, y no tiene sentido tratar de calzar eso en ellos.
¿Cosas que las computadoras modernas hacen mucho, donde un pequeño beneficio podría llegar muy lejos? Veamos...
- Gestión de datos: la gestión de bases de datos relacionales podría beneficiarse de uniones relacionales más rápidas (especialmente uniones que implican un gran número de relaciones). Implica conjuntos de datos homogéneos masivos.
- Tokenising, lexing, análisis de texto.
- Compilación, generación de código.
- Optimización (de consultas, gráficos, etc.).
- Cifrado, descifrado, generación de claves.
- Diseño de página, composición tipográfica.
- Indización de texto completo.
- Recolección de basura.
La otra cosa a tener en cuenta cuando se usa una GPU es la velocidad del bus, la mayoría de las tarjetas gráficas están diseñadas para tener un ancho de banda mayor cuando se transfieren datos de la CPU a la GPU, ya que es lo que hacen la mayoría del tiempo. El ancho de banda desde la GPU hasta la CPU, que es necesario para devolver los resultados, etc., no es tan rápido. Entonces funcionan mejor en un modo segmentado.
Es posible que desee consultar el número de marzo / abril de la revista Queue de ACM, que contiene varios artículos sobre GPU y la mejor manera de usarlos (además de hacer gráficos, por supuesto).