Según tengo entendido, la gente comenzó a usar GPU para la informática general porque son una fuente adicional de potencia informática. Y aunque no son tan rápidos como CPU para cada operación, tienen muchos núcleos, por lo que pueden adaptarse mejor para el procesamiento en paralelo que una CPU. Esto tiene sentido si ya posee una computadora que tiene una GPU para el procesamiento de gráficos, pero no necesita los gráficos y le gustaría tener más potencia de cálculo. Pero también entiendo que las personas compran GPU específicamente para agregar potencia informática, sin intención de usarlas para procesar gráficos. Para mí, esto parece similar a la siguiente analogía:
Necesito cortar mi hierba, pero mi cortadora de césped está debilitada. Así que quito la jaula del ventilador de caja que guardo en mi habitación y afilo las aspas. Lo pego con cinta adhesiva a mi cortacésped y descubro que funciona razonablemente bien. Años más tarde, soy el oficial de compras de un gran negocio de cuidado del césped. Tengo un presupuesto considerable para gastar en implementos para cortar césped. En lugar de comprar cortadoras de césped, compro un montón de ventiladores de caja. De nuevo, funcionan bien, pero tengo que pagar por piezas adicionales (como la jaula) que no terminaré usando. (a los fines de esta analogía, debemos suponer que las cortadoras de césped y los ventiladores de caja cuestan aproximadamente lo mismo)
Entonces, ¿por qué no hay un mercado para un chip o un dispositivo que tenga la potencia de procesamiento de una GPU, pero no la sobrecarga de gráficos? Se me ocurren algunas explicaciones posibles. ¿Cuál de ellos, si alguno, es correcto?
- Tal alternativa sería demasiado costosa de desarrollar cuando la GPU ya es una buena opción (las cortadoras de césped no existen, ¿por qué no usar este ventilador de caja perfectamente bueno?).
- El hecho de que 'G' significa gráficos denota solo un uso previsto, y no significa realmente que se haga un esfuerzo para adaptar mejor el chip al procesamiento de gráficos que cualquier otro tipo de trabajo (las cortadoras de césped y los ventiladores de caja son lo mismo cuando te pones a ello; no se necesitan modificaciones para que una funcione como la otra).
- Las GPU modernas llevan el mismo nombre que sus antiguas predecesoras, pero en estos días las de gama alta no están diseñadas para procesar específicamente gráficos (los ventiladores de caja modernos están diseñados para funcionar principalmente como cortacéspedes, incluso si los anteriores no lo fueran).
- Es fácil traducir prácticamente cualquier problema al lenguaje de procesamiento de gráficos (el césped puede cortarse soplando aire sobre él muy rápido).
EDITAR:
Mi pregunta ha sido respondida, pero en base a algunos de los comentarios y respuestas, siento que debo aclarar mi pregunta. No estoy preguntando por qué no todos compran sus propios cálculos. Claramente eso sería demasiado costoso la mayor parte del tiempo.
Simplemente observé que parece haber una demanda de dispositivos que puedan realizar rápidamente cálculos paralelos. Me preguntaba por qué parece que el dispositivo óptimo es la Unidad de procesamiento de gráficos, en lugar de un dispositivo diseñado para este propósito.
Respuestas:
Es realmente una combinación de todas tus explicaciones. Más barato y más fácil, ya existe, y el diseño se ha alejado de los gráficos puros.
Una GPU moderna se puede ver principalmente como procesadores de flujo con algún hardware gráfico adicional (y algunos aceleradores de función fija, por ejemplo, para codificar y decodificar video). La programación GPGPU en estos días utiliza API específicamente diseñadas para este propósito (OpenCL, Nvidia CUDA, AMD APP).
Durante la última década o dos, las GPU han evolucionado de una tubería de función fija (casi solo gráficos) a una tubería programable (los sombreadores le permiten escribir instrucciones personalizadas) a API más modernas como OpenCL que proporcionan acceso directo a los núcleos de sombreadores sin el tubería gráfica que lo acompaña.
Los bits de gráficos restantes son menores. Son una parte tan pequeña del costo de la tarjeta que no es significativamente más barato dejarlas fuera, e incurrir en el costo de un diseño adicional. Por lo tanto, esto generalmente no se hace, no hay un equivalente orientado a la computación de la mayoría de las GPU, excepto en los niveles más altos, y son bastante caros.
Las GPU normales de "juegos" se usan muy comúnmente porque las economías de escala y la relativa simplicidad las hacen baratas y fáciles de comenzar. Es un camino bastante fácil desde la programación de gráficos hasta la aceleración de otros programas con GPGPU. También es fácil actualizar el hardware ya que hay productos más nuevos y más rápidos disponibles, a diferencia de las otras opciones.
Básicamente, las opciones se reducen a:
fuente
Mi analogía favorita:
Lo que use depende de la sensibilidad a los costos, el grado en que una tarea es paralelizable y otros factores. Debido a cómo se ha desarrollado el mercado, las GPU son la mejor opción para la mayoría de las aplicaciones altamente paralelas y las CPU son la mejor opción cuando la energía y el costo unitario son las principales preocupaciones.
Directamente a su pregunta: ¿por qué una GPU sobre un ASIC / FPGA? Generalmente costo. Incluso con los precios inflados de la GPU de hoy, sigue siendo (generalmente) más barato usar una GPU que diseñar un ASIC para satisfacer sus necesidades. Como señala @ user912264, hay tareas específicas que pueden ser útiles para los ASIC / FPGA. Si tiene una tarea única y se beneficiará de la escala, puede valer la pena diseñar un ASIC / FPGA. De hecho, puede diseñar / comprar / licenciar diseños de FPGA específicamente para este propósito. Esto se hace para alimentar los píxeles en televisores de alta definición, por ejemplo.
fuente
Tu analogía es mala. En la analogía, cuando compra equipos para un gran negocio de cuidado del césped, asume que hay buenas cortadoras de césped disponibles. Este no es el caso en el mundo de la informática: las GPU son la mejor herramienta disponible.
Los costos de I + D y las posibles ganancias de rendimiento para un chip especializado probablemente sean demasiado altos para justificar la fabricación de uno.
Dicho esto, soy consciente de que Nvidia lanzó algunas GPU específicamente para computación de propósito general, no tenían salidas de video, un poco como vender ventiladores de caja con las jaulas ya retiradas.
fuente
Por supuesto, puede usar chips especializados, ya sea para la eficiencia energética o la velocidad de cálculo. Déjame contarte la historia de la minería de Bitcoin:
Entonces, no, no hay razones para usar una GPU en lugar de una "calculadora gigante" especializada. Cuanto mayores son los incentivos económicos, más se especializa el hardware. Sin embargo, son bastante difíciles de diseñar e imposibles de fabricar si no está produciendo miles a la vez. Si no es viable diseñar chips, puede comprar uno de esos en el Walmart más cercano.
TL; DR Por supuesto, puedes usar chips más especializados.
fuente
Lo que describe en su analogía es exactamente lo que sucedió. Justo cuando agarró su ventilador y afiló las cuchillas para tratar de usarlo como un cortacésped, un grupo de investigadores se dio cuenta de "¡Oye, tenemos una unidad de procesamiento multi-núcleo bastante agradable aquí, intentemos usarla para cálculos de uso general! ".
El resultado fue bueno y la pelota comenzó a rodar. La GPU pasó de ser un dispositivo de solo gráficos para admitir la computación de propósito general para ayudar en las situaciones más exigentes.
Porque, de todos modos, la operación más exigente desde el punto de vista informático que esperamos de las computadoras son los gráficos. Es suficiente echar un vistazo a los impresionantes avances de cómo se ven los juegos hoy en comparación con cómo lo hicieron hace unos años. Esto significa que se ha invertido mucho esfuerzo y dinero en el desarrollo de las GPU, y el hecho de que también podrían usarse para acelerar una cierta clase de computación de propósito general (es decir, extremadamente paralela) acaba de aumentar su popularidad.
En conclusión, la primera explicación que ofrece es la más precisa:
Las GPU ya estaban allí, están disponibles para todos y funcionaron.
fuente
Específicamente, las GPU no son "núcleos" en el sentido de "paralelismo de tareas". En su mayor parte, es en forma de "paralelismo de datos". SIMD es "instrucción única de datos múltiples". Lo que esto significa es que no harías esto:
for parallel i in range(0,1024): c[i] = a[i] * b[i]
Esto significaría que tiene 1024 punteros de instrucción que realizan tareas separadas que progresan a diferentes velocidades. SIMD, o "computación vectorial" realizará instrucciones en todos los arreglos de una vez, más o menos así:
c = a * b
Los "bucles" están en las instrucciones "*" y "=", en lugar de estar fuera de las instrucciones. Lo anterior haría esto para todos los 1024 elementos al mismo tiempo, en el mismo puntero de instrucción para todos ellos. Es como tener tres grandes registros para a, by c. El código SIMD es extremadamente limitado y solo funciona bien para problemas que no son excesivamente "ramificados".
En casos realistas, estos valores SIMD no son tan grandes como 1024 elementos. Imagine una variable que es una pandilla de int32 unidas. Puede pensar en multiplicar y asignar como una instrucción de máquina real.
int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;
Las GPU reales son más complicadas que SIMD, pero esa es la esencia de ellas. Es por eso que no puedes simplemente lanzar un algoritmo de CPU aleatorio en una GPU y esperar una aceleración. Cuanta más instrucción ramifique el algoritmo, menos apropiado será para una GPU.
fuente
Las otras respuestas aquí son bastante buenas. También arrojaré mis 2 centavos.
Una razón por la que las CPU se han vuelto tan generalizadas es porque son flexibles. Puede reprogramarlos para una variedad infinita de tareas. En estos días, es más barato y más rápido para las compañías que producen productos colocar una pequeña CPU o microcontrolador en algo y programar su funcionalidad que desarrollar circuitos personalizados para hacer la misma tarea.
Al usar el mismo dispositivo que otros, puede aprovechar las soluciones conocidas a los problemas al usar ese mismo dispositivo (o similar). Y a medida que la plataforma madura, sus soluciones evolucionan y se vuelven muy maduras y optimizadas. La gente que codifica en estos dispositivos también adquiere experiencia y se vuelve muy buena en su oficio.
Si creara un nuevo tipo de dispositivo desde cero, una alternativa a una GPU, les tomaría años incluso a los primeros usuarios adoptar un buen conocimiento de cómo usarlo. Si conecta un ASIC a su CPU, ¿cómo optimiza el cálculo de descarga en ese dispositivo?
La comunidad de arquitectura de computadoras ha estado entusiasmada con esta idea durante varios años (obviamente, ha sido popular antes, pero recientemente ha visto un renacimiento). Estos 'aceleradores' (su término) tienen diversos grados de reprogramabilidad. El problema es, ¿cuán estrechamente define el alcance del problema que su acelerador puede abordar? Incluso he hablado con algunas personas que estaban trabajando creando un acelerador usando circuitos analógicos con amplificadores operacionales para calcular ecuaciones diferenciales. Gran idea, pero alcance extremadamente estrecho.
Después de que tenga un acelerador que funcione, las fuerzas económicas decidirán su destino. La inercia del mercado es una fuerza increíble. Incluso si algo es una gran idea, ¿es económicamente factible refactorizar sus soluciones de trabajo para usar este nuevo dispositivo? Tal vez tal vez no.
Las GPU son realmente horribles para ciertos tipos de problemas, por lo que muchas personas / empresas están trabajando en otros tipos de dispositivos. Pero las GPU ya están tan arraigadas, ¿sus dispositivos llegarán a ser económicamente viables? Supongo que ya veremos.
Editar: Ampliando un poco mi respuesta, ahora que estoy fuera del autobús.
Un caso de estudio de precaución es el proyecto Intel Larrabee. Comenzó como un dispositivo de procesamiento paralelo que podía hacer gráficos en software; no tenía hardware gráfico especializado. Hablé con alguien que trabajó en el proyecto, y una de las principales razones por las que dijeron que falló y se canceló (además de la horrible política interna) fue que simplemente no pudieron lograr que el compilador produjera un buen código para él. Por supuesto, produjo código de trabajo, pero si el objetivo de su producto es el máximo rendimiento, es mejor que tenga un compilador que produzca un código bastante óptimo. Esto recuerda mi comentario anterior sobre la falta de una gran experiencia tanto en hardware como en software para que su nuevo dispositivo sea un gran problema.
Algunos elementos del diseño de Larrabee se convirtieron en Xeon Phi / Intel MIC. Este producto realmente llegó al mercado. Estaba completamente enfocado en paralelizar cálculos científicos y otros cálculos de tipo HPC. Parece que ahora es un fracaso comercial. Otra persona con la que hablé en Intel implicaba que simplemente no eran competitivos en precio / rendimiento con las GPU.
La gente ha intentado integrar la síntesis lógica para FPGA en compiladores, para que pueda generar automáticamente código para sus aceleradores FPGA. No funcionan tan bien.
Un lugar que parece ser un suelo realmente fértil para los aceleradores, u otras alternativas a las GPU, es la nube. La economía de escala que existe en estas grandes empresas como Google, Amazon y Microsoft hace que valga la pena invertir en esquemas de computación alternativos. Alguien ya mencionó las unidades de procesamiento de tensor de Google. Microsoft tiene FPGA y otras cosas en toda su infraestructura de Bing y Azure. La misma historia con Amazon. Tiene sentido si la balanza puede compensar su inversión en tiempo, dinero y lágrimas de ingeniería.
En resumen, la especialización está en desacuerdo con muchas otras cosas (economía, madurez de la plataforma, experiencia en ingeniería, etc.). La especialización puede mejorar significativamente su rendimiento, pero reduce el alcance al que se aplica su dispositivo. Mi respuesta se centró en muchos de los aspectos negativos, pero la especialización también tiene muchos beneficios. Absolutamente debe ser perseguido e investigado, y como mencioné, muchos grupos lo están haciendo de manera bastante agresiva.
Lo sentimos, edite nuevamente: creo que su premisa inicial es incorrecta. Creo que fue menos un caso de buscar fuentes adicionales de potencia informática, y más un caso de personas que reconocen una oportunidad. La programación de gráficos es un álgebra muy lineal, y la GPU se diseñó para realizar de manera eficiente operaciones comunes como la matriz de multiplicación, operaciones de vectores, etc. Operaciones que también son muy comunes a la computación científica.
El interés en las GPU comenzó justo cuando la gente llegó a reconocer que las promesas dadas por el proyecto EPIC de Intel / HP fueron exageradas (finales de los 90 y principios de los 2000). No hubo una solución general a la paralelización del compilador. Entonces, en lugar de decir "dónde encontramos más potencia de procesamiento, oh, podríamos probar la GPU", creo que fue más "tenemos algo que es bueno en los cálculos paralelos, ¿podemos hacer que esto sea más generalmente programable". Muchas de las personas involucradas pertenecían a la comunidad informática científica, que ya tenía un código Fortran paralelo que podían ejecutar en máquinas Cray o Tera (Tera MTA tenía 128 hilos de hardware). Quizás hubo movimiento desde ambas direcciones, pero solo he escuchado menciones de los orígenes de GPGPU desde esta dirección.
fuente
Un ASIC (silicio personalizado) es muy rápido, pero es muy costoso de diseñar y fabricar. Los ASIC solían tener un propósito específico, y la CPU era un enfoque que permitía que las computadoras fueran "programadas" para que las tareas informáticas pudieran ser realizadas por software. Los primeros CPU dieron a las personas la capacidad de aprovechar el poder de ASIC sin el costo masivo al programar el chip en el campo. Este enfoque tuvo TAN éxito que dio lugar a la computadora (muy) rápida que está utilizando en este momento.
Entonces, ¿por qué las GPU?
A mediados de los 90, 3DFX se dio cuenta de que las tareas de renderizado 3D eran tan específicas que un ASIC personalizado funcionaría MUCHO mejor que una CPU. Crearon un coprocesador de computadora que descargó las tareas de representación 3D de la CPU a este coprocesador, al que denominaron "GPU". La competencia y la demanda del mercado llevaron la innovación en este espacio a un punto en el que las GPU realizaban cálculos MUCHO más rápido que las CPU, por lo que surgió la pregunta: "¿Por qué no puedo usar la GPU para reducir mis números en lugar de la CPU?" Los fabricantes de GPU vieron una demanda y una forma de ganar más dinero, por lo que comenzaron a alterar sus plataformas para permitir a los desarrolladores usar su hardware. Pero el hardware del hardware era tan específico para el propósito que había, y todavía hay, limitaciones en lo que puede pedirle a la GPU que haga. No voy a entrar en detalles sobre por qué aquí.
Entonces, ¿por qué no había más silicio específico para un propósito? ¿Por qué SOLO gráficos?
Dos razones: 1) Precio. Las GPU tenían un buen mercado y podían justificarlo, pero incluso en aquel entonces, era un gran riesgo. Nadie sabía realmente si 3DFX podía obtener una ganancia (resulta que no podían, y desapareció). Incluso ahora, con el tamaño del mercado de GPU, en realidad solo hay 3 competidores. 2) Las CPU realmente satisfacían la necesidad de "silicio personalizado" con extensiones de instrucciones. Piense en MMX: este fue en realidad el intento de Intel de acelerar los gráficos en la CPU justo cuando 3DFX estaba ganando velocidad. Desde entonces, el conjunto de instrucciones x86 ha crecido hasta ser bastante masivo con todas estas extensiones personalizadas. Muchas de estas extensiones tenían sentido en ese momento (como MMX), pero ahora son en gran medida de peso muerto en el procesador. Sin embargo, no puede eliminarlos, porque luego rompe el software existente. Eso' s en realidad uno de los puntos de venta para ARM: ARM es un conjunto de instrucciones simplificado. No hay tantas extensiones de instrucciones, pero esto hace que el silicio sea más pequeño y más barato de fabricar.
Me parece que podrías ganar mucho dinero si pudieras reducir el costo del silicio personalizado. ¿Nadie está trabajando en esto?
Existe una tecnología llamada FPGA: matriz de compuerta programable de campo, que existe desde los primeros días de la informática. Es esencialmente un microchip que puede diseñar "en el campo" utilizando software. Es una tecnología muy buena, pero toda la estructura necesaria para hacer que el chip sea programable ocupa MUCHO silicio y hace que los chips funcionen a velocidades de reloj mucho más bajas. Los FPGA PUEDEN ser más rápidos que los de la CPU, si tiene suficiente silicio en el chip Y puede paralelizar efectivamente la tarea. Pero están limitados en la cantidad de lógica que puedes poner en ellos. Todos los FPGA, excepto los más caros, fueron más lentos que los GPU para la minería de bitcoins temprana, pero sus homólogos de ASIC efectivamente terminaron la rentabilidad de la minería de GPU. Otras criptomonedas han utilizado algoritmos específicos que no se pueden paralelizar, por lo que FPGA y ASIC '
El limitador principal con FPGA es el tamaño de silicio: ¿cuánta lógica puede caber en el chip? El segundo es la velocidad del reloj, porque es difícil optimizar cosas como puntos calientes, fugas y conversaciones cruzadas en un FPGA. Los métodos de fabricación más nuevos han minimizado estos problemas, e Intel se ha asociado con Altera para proporcionar un FPGA que los ingenieros puedan utilizar para aprovechar los beneficios del "silicio personalizado" como coprocesador en un servidor. Entonces viene, en cierto sentido.
¿Alguna vez los FPGA serán reemplazados por CPU y GPU?
Probablemente no en el corto plazo. Las últimas CPU y GPU son MASIVAS y el silicio está altamente ajustado para un rendimiento térmico y eléctrico. No puede optimizar los FPGA de la misma manera que un ASIC personalizado. Salvo alguna tecnología innovadora, la CPU probablemente seguirá siendo el núcleo de su computadora con coprocesadores FPGA y GPU.
fuente
De hecho, hay una placa especializada para la informática de alta velocidad, por ejemplo, Xilinx tiene una lista de 178 placas PCI-e que utilizan sus FPGA, y aproximadamente un tercio de estas placas son "destructores de números" con uno o varios chips FPGA potentes y muchos placa de memoria DDR. También hay placas DSP de alto rendimiento ( ejemplo ) destinadas a tareas informáticas de alto rendimiento.
Supongo que la popularidad de las placas GPU se debe a su objetivo en un grupo de clientes más amplio. No tienes que invertir en hardware especial para jugar con Nvidia CUDA, por lo que para cuando tengas una tarea que requiera hardware especial, las GPU Nvidia tendrán una ventaja competitiva en que ya sabes cómo programarlas.
fuente
Creo que la respuesta a su pregunta depende de cómo definir el cómputo de alto rendimiento.
En general, el cálculo de alto rendimiento está relacionado con el tiempo de cálculo. En ese caso, me gusta compartir el enlace del clúster informático de alto rendimiento .
El enlace se especifica el motivo del uso de la GPU; El uso de tarjetas gráficas (o más bien sus GPU) para hacer cálculos para la computación grid es mucho más económico que usar CPU, a pesar de ser menos preciso.
fuente
double
una precisión de 64 bits , no solo una precisión de 32 bitsfloat
. (Algunas GPU regulares escatiman en HW paradouble
). Todos los principales proveedores admiten matemáticas IEEE FP (creo que incluso con denormals). Por lo tanto, no hay pérdida de precisión a menos que desee cambiar la precisión por el rendimiento, por ejemplo, con FP de media precisión de 16 bits que tiene un rendimiento aún mejor en algún hardware (y, por supuesto, la mitad del ancho de banda de memoria). El código de alto rendimiento en las CPU a menudo también usa 32 bitsfloat
, para obtener el doble de elementos por vector SIMD y la mitad del ancho de banda de la memoria.