Confundido acerca de la GPU que tiene cientos de procesadores en su interior.

4

Acabo de empezar a aprender sobre el curso de programación paralelo en Udacity y ya estoy algo confundido. Aquí en este segmento de video: https://youtu.be/gbj0oauFFI8?t=52s

Se nos dice que la GPU promedio tiene miles de ALU y cientos de procesadores. Estoy confundido por la parte de "cientos de procesadores". ¿Por qué hay tantos? ¿No debería ser solo uno ...? GPU es sinónimo de unidad de procesador de gráficos. ¿No es una GPU como una CPU, un procesador con miles de ALU en el interior, PERO, totalmente especializado para ciertas tareas? ¿Cómo entran en juego estos "procesadores"?

Si me equivoco, asumo que cada procesador tiene aproximadamente 10 (porque 10 * cien CPU = 1000s de ALU) ¿ALU está dentro? ¿Hay un diseño que pueda ver para poder verificar esto?

Gracias.

Arrow
fuente

Respuestas:

4

Un procesador gráfico moderno es un dispositivo altamente complejo y puede tener miles de núcleos de procesamiento. los Nvidia GTX 970 por ejemplo tiene 1664 núcleos. Estos núcleos se agrupan en lotes que trabajan juntos.

Para una tarjeta Nvidia, los núcleos se agrupan en lotes de 16 o 32 según la arquitectura subyacente ( Kepler o Fermi) y cada núcleo de ese lote ejecutará la misma tarea.

Sin embargo, la distinción entre un lote y un núcleo es importante porque, si bien cada núcleo de un lote debe ejecutar la misma tarea, su conjunto de datos puede estar separado.

Su unidad de procesador central es grande y solo tiene unos pocos núcleos porque es un procesador altamente generalizado capaz de tomar decisiones a gran escala y controlar el flujo. La tarjeta gráfica evita una gran parte de la lógica de control y conmutación a favor de la capacidad de ejecutar una gran cantidad de tareas en paralelo.

Si insiste en tener una imagen para demostrarlo, la imagen de abajo (de GTX 660Ti Direct CU II TOP reseña ) muestra 5 áreas verdes que son muy similares y contendrían varios cientos de núcleos cada uno para un total de 1344 núcleos activos divididos en lo que me parece que son 15 bloques funcionales:

enter image description here

Mirando de cerca, cada bloque parece tener 4 conjuntos de lógica de control en el lado, lo que sugiere que cada uno de los 15 bloques más grandes que puede ver tiene 4 unidades SMX.

Esto nos da 15 * 4 bloques de procesamiento (60) con 32 núcleos cada uno para un total completo de 1920 núcleos, de los cuales se deshabilitarán los lotes porque funcionaron mal o simplemente para facilitar su separación en diferentes grupos de rendimiento. Esto nos daría el número correcto de núcleos activos.

Una buena fuente de información sobre cómo se mapean los lotes es en Desbordamiento de pila: https://stackoverflow.com/questions/10460742/how-do-cuda-blocks-warps-threads-map-onto-cuda-cores

Mokubai
fuente
32 instrucciones concurrentes todavía son increíblemente rápidas, ¿verdad? Las CPUs normalmente pueden hacer 4 u 8.
Pacerier
@Pacerier te estás perdiendo algunas de las matemáticas. Los 32 cores es por unidad SMX . El extremo superior completamente poblado de esta serie tendría 60 unidades SMX para un total de 1920 núcleos disponibles para realizar la misma tarea en paralelo.
Mokubai
8

Las CPU son SISD , GPUs son SIMD .

SISD es un acrónimo de Instrucción única, Datos únicos. Las CPU son buenas para realizar operaciones secuenciales: toma esto, hazlo, muévelo allí, toma otro, agrégalos juntos, escribe en un dispositivo, lee la respuesta, etc. Ejecutan principalmente operaciones simples que toman uno o dos valores y devuelven un valor.

SIMD es Instrucción única, Datos múltiples: la misma operación se ejecuta en múltiples conjuntos de datos simultáneamente. Por ejemplo toma 128 valores X 1 -X 128 , toma 128 valores Y 1 -Y 128 , multiplica los valores correspondientes en pares y devuelve 128 resultados. Un procesador SISD tendría que ejecutar 128 instrucciones (+ lecturas / escrituras en memoria) porque solo puede multiplicar dos números a la vez. El procesador SIMD hace esto en pocos pasos o tal vez incluso en uno solo si solo 128 números caben en su registro.

Las CPU de SISD funcionan bien para la computación cotidiana porque son en su mayoría secuenciales, pero hay algunas tareas que requieren procesar grandes cantidades de datos de manera similar, por ejemplo, procesamiento de gráficos, renderizado de video, contraseñas de craqueo, bitcoins de minería, etc. Las GPU permiten una paralelización masiva de computación, siempre que todos los datos deben ser procesados ​​de la misma manera.

Bueno, eso es pura teoría. En el mundo real, las CPU regulares ofrecen algunas instrucciones SIMD ( SSE ), por lo que algunas cosas de datos múltiples se pueden hacer de manera más eficiente en una CPU normal. Al mismo tiempo, no todas las ALU en las GPU tienen que trabajar en la misma cosa porque se agrupan en lotes (ver La respuesta de mokubai ). Así que las CPU no son puramente SISD y las GPU no son puramente SIMD.

¿Cuándo es beneficioso usar GPU para cálculos? Cuando tus cálculos son realmente, realmente masivamente paralelizables. Debe tener en cuenta que la escritura de entrada en la memoria de la GPU lleva tiempo y la lectura de los resultados también lleva algún tiempo. Puede obtener el mayor aumento de rendimiento cuando puede construir una tubería de procesamiento que haga muchos cálculos antes de abandonar la GPU.

gronostaj
fuente
¿Cómo afecta GPGPU la vida útil de la batería en relación con hacerlo en la CPU?
Pacerier
@Pacerier Demasiados factores para dar una sola respuesta. Depende de la tarea, la arquitectura del chip, la idoneidad para una tarea específica, el número de operaciones en paralelo, el rendimiento de los nodos computacionales, la tecnología de fabricación de dispositivos semiconductores, etc. Como regla general, las tareas que pueden paralizarse se beneficiarán de SIMD en términos de eficiencia energética y rendimiento . Aunque hay excepciones. Por ejemplo, mientras que el descifrado de contraseñas suele ser muy acelerado por SIMD, el algoritmo scrypt no lo será porque es un gran problema de memoria y con ese grado de memoria de paralelización es escaso.
gronostaj
2

Los datos gráficos son ideales para el procesamiento en paralelo. Divida una imagen de 1024x1024 píxeles en bloques de 16x16, y deje que cada núcleo procese un bloque tan pequeño. Agrupe los resultados de nuevo y el resultado no será diferente de un procesador que procesa esos bloques uno por uno.

La condición para que esto funcione es que los resultados de un núcleo no influirán en los resultados de los otros núcleos, y viceversa. Algo así podría funcionar también para una hoja de Excel, donde las celdas de la columna C suman los valores de la columna A + B. C1 = A1 + B1, C2 = A2 + B2, y las filas 1 y 2 son independientes entre sí.

El procesamiento de datos gráficos es una tarea muy específica, y puede diseñar un procesador específicamente para este tipo de tareas, que también se puede usar para otras tareas, como la extracción de bitcoins. Y, al parecer, puede hacer que una unidad de procesamiento sea más eficiente utilizando varios núcleos uno al lado del otro en lugar de usar un gran procesador. Más eficiente significa no solo más rápido, sino que también tiene la ventaja de que si solo necesita el 20% de los núcleos de procesamiento, puede apagar el resto, lo que ahorra energía.

Descargo de responsabilidad: el ejemplo anterior puede no ser técnicamente correcto. Es más que mostrar el principio. El procesamiento de datos real será mucho más complejo, supongo.

SPRBRN
fuente
1

La respuesta principal es que son más simples, por lo que se pueden agrupar muchos de ellos, solían hacer una tarea y eso era poner fragmentos en la pantalla. Pero hoy en día son más generales en la naturaleza al igual que las CPU. La razón principal entre cpus y gpus es que la arquitectura de cpu se basa en x86 y la de gpu se basa en AMD GCN o NVIDIA CUDA.

intenta leer http://www.anandtech.com/show/4455/amds-graphics-core-next-preview-amd-architects-for-compute http://www.anandtech.com/show/5699/nvidia-geforce-gtx-680-review/2

nwgat
fuente
1

Las CPU tienen 1,2,4,6,8 núcleos o más. Igual, las GPUs tienen cientos de ellas por miles. Es por eso que una tarjeta de video superior tiene aproximadamente 80 veces más potencia de procesamiento flotante que una CPU de cuatro núcleos.

La diferencia es que son de tipo específico y agrupados (consulte la respuesta anterior). Tipo específico significa que fueron diseñados para realizar cálculos específicos no generales. Es extremadamente difícil hacer que un software estándar utilice núcleos de GPU en lugar de núcleos de CPU. Si un software pudiera ser tan bueno, haría que una CPU fuera inútil. Desafortunadamente, solo unos muy específicos pueden acercarse al verdadero poder de procesamiento de una tarjeta de video. Algunos software de procesamiento de hash pueden hacer eso.

Overmind
fuente
"" "Si un software pudiera ser tan bueno, haría que una CPU fuera" "" inútil, sí, en el futuro lo será.
Pacerier