NVIDIA vs AMD: rendimiento GPGPU

105

Me gustaría escuchar a personas con experiencia en la codificación de ambos. Yo solo tengo experiencia con NVIDIA.

NVIDIA CUDA parece ser mucho más popular que la competencia. (Solo contando las etiquetas de preguntas en este foro, 'cuda' supera a 'opencl' 3: 1 y 'nvidia' supera a 'ati' 15: 1, y no hay ninguna etiqueta para 'ati-stream').

Por otro lado, según Wikipedia, las tarjetas ATI / AMD deberían tener mucho más potencial, especialmente por dólar. La tarjeta NVIDIA más rápida del mercado a día de hoy, GeForce 580 ($ 500), tiene una calificación de 1.6 TFlops de precisión simple. AMD Radeon 6970 se puede conseguir por $ 370 y tiene una potencia de 2,7 TFlops. El 580 tiene 512 unidades de ejecución a 772 MHz. El 6970 tiene 1536 unidades de ejecución a 880 MHz.

¿Qué tan realista es esa ventaja de papel de AMD sobre NVIDIA, y es probable que se materialice en la mayoría de las tareas de GPGPU? ¿Qué sucede con las tareas de números enteros?

Eugene Smith
fuente
1
Pregunta interesante, pero no estoy seguro de que esté realmente relacionada con la programación .
Paul R
25
Esencialmente se trata de una pregunta sobre dos lenguajes de programación y aspectos prácticos de sus implementaciones. Entonces yo diría que sí.
Eugene Smith
2
Me pregunto qué tan relevantes se han vuelto las respuestas a esta pregunta a la luz de C ++ AMP.
Dmitri Nesteruk
2
En un momento, estaba investigando por qué la minería de Bitcoin es tan lenta en el hardware de NVIDIA en comparación con AMD. El hilo resultante, "AMD Radeon 3 veces más rápido en la minería de bitcoins (rendimiento de hash SHA-256)", contiene información que puede resultarle interesante. tu pregunta. foros.nvidia.com/…
Roger Dahl
1
Me parece que esta pregunta dará como resultado una colección de artículos de opinión, según las áreas de aplicación con las que estén familiarizados los encuestados, qué hardware y software utilicen, etc. o una respuesta completa será demasiado amplia para ajustarse al formato SO. Votación para cerrar.
njuffa

Respuestas:

79

Metafóricamente hablando, ati tiene un buen motor en comparación con nvidia. Pero nvidia tiene un coche mejor: D

Esto se debe principalmente a que nvidia ha invertido una buena cantidad de sus recursos (en dinero y personas) para desarrollar bibliotecas importantes necesarias para la informática científica (BLAS, FFT), y luego un buen trabajo nuevamente en su promoción. Esta puede ser la razón por la que CUDA domina las etiquetas aquí en comparación con ati (u OpenCL)

En cuanto a la ventaja que se obtiene en las tareas de GPGPU en general, terminaría dependiendo de otros problemas (dependiendo de la aplicación) como el ancho de banda de transferencia de memoria, un buen compilador y probablemente incluso el controlador. nvidia tiene un compilador más maduro, un controlador más estable en Linux (porque su uso está muy extendido en la informática científica), inclina la balanza a favor de CUDA (al menos por ahora).


EDITAR 12 de enero de 2013

Han pasado dos años desde que hice esta publicación y todavía parece atraer visitas a veces. Por eso he decidido aclarar algunas cosas

  • AMD ha intensificado su juego. Ahora tienen bibliotecas BLAS y FFT. Numerosas bibliotecas de terceros también están surgiendo alrededor de OpenCL.
  • Intel ha introducido Xeon Phi en la naturaleza que admite tanto OpenMP como OpenCL. También tiene la capacidad de usar código x86 existente. como se señaló en los comentarios, x86 limitado sin SSE por ahora
  • NVIDIA y CUDA todavía tienen la ventaja en la gama de bibliotecas disponibles. Sin embargo, es posible que no se estén centrando tanto en OpenCL como antes.

En resumen, OpenCL ha cerrado la brecha en los últimos dos años. Hay nuevos jugadores en el campo. Pero CUDA todavía está un poco por delante del resto.

Pavan Yalamanchili
fuente
4
Xeon Phi solo tiene una capacidad limitada de ejecución de código x86. Sin MMX / SSE / SSE *.
osgx
@osgx Gracias. Debería haberlo mencionado.
Pavan Yalamanchili
1
@osgx Pero funciona bien en DP FP
Csaba Toth
4
Xeon Phi tiene registros e instrucciones de 512 bits de ancho, 4 veces más de lo que admite SSE.
zr.
59

No tengo ningún sentimiento fuerte sobre CUDA vs. OpenCL; presumiblemente OpenCL es el futuro a largo plazo, simplemente a fuerza de ser un estándar abierto.

Pero las tarjetas NVIDIA vs ATI actuales para GPGPU (no rendimiento de gráficos, sino GPGPU), sobre las que tengo una fuerte opinión. Y para llegar a eso, señalaré que en la lista actual de los 500 principales grupos grandes , NVIDIA lleva los sistemas AMD 4 a 1, y en gpgpu.org , los resultados de búsqueda (artículos, enlaces a recursos en línea, etc.) para NVIDIA superan en número a los resultados de AMD 6: 1.

Una gran parte de esta diferencia es la cantidad de información en línea disponible. Vea NVIDIA CUDA Zone frente a GPGPU Developer Central de AMD . La cantidad de cosas que hay para los desarrolladores que inician ni siquiera se acerca a la comparación. En el sitio de NVIDIA, encontrará toneladas de documentos, y códigos aportados, de personas que probablemente estén trabajando en problemas como el suyo. Encontrará toneladas de clases en línea, de NVIDIA y de otros lugares, y documentos muy útiles como la guía de mejores prácticas para desarrolladores, etc. La disponibilidad de herramientas de desarrollo gratuitas (el generador de perfiles, cuda-gdb, etc.) inclina abrumadoramente el camino de NVIDIA.

(Editor: la información de este párrafo ya no es precisa). Y parte de la diferencia también es el hardware. Las tarjetas AMD tienen mejores especificaciones en términos de fallos máximos, pero para poder obtener una fracción significativa de eso, no solo debe dividir su problema en muchos procesadores de flujo completamente independientes, sino que cada elemento de trabajo también debe ser vectorizado. Dado que el código de GPGPUing es bastante difícil, esa complejidad arquitectónica adicional es suficiente para hacer o deshacer algunos proyectos.

Y el resultado de todo esto es que la comunidad de usuarios de NVIDIA sigue creciendo. De los tres o cuatro grupos que conozco que están pensando en construir clústeres de GPU, ninguno de ellos está considerando seriamente las tarjetas AMD. Y eso significará aún más grupos escribiendo artículos, contribuyendo con código, etc. en el lado de NVIDIA.

No soy un cómplice de NVIDIA; Ojalá no fuera así, y que hubiera dos (¡o más!) Plataformas GPGPU igualmente convincentes. La competencia es buena. Quizás AMD intensifique su juego muy pronto, y los próximos productos de fusión se ven muy atractivos. Pero al darle un consejo a alguien sobre qué tarjetas comprar hoy y dónde dedicar su tiempo a esforzarse en este momento, no puedo decir en buena conciencia que ambos entornos de desarrollo son igualmente buenos.

Editado para agregar : supongo que lo anterior es un poco elíptico en términos de responder a la pregunta original, así que déjame hacerlo un poco más explícito. El rendimiento que puede obtener de una pieza de hardware, en un mundo ideal con un tiempo infinito disponible, depende únicamente del hardware subyacente y las capacidades del lenguaje de programación; pero en realidad, la cantidad de rendimiento que puede obtener en una cantidad fija de tiempo invertido también depende en gran medida de las herramientas de desarrollo, las bases de código de la comunidad existentes (por ejemplo, bibliotecas disponibles públicamente, etc.). Todas esas consideraciones apuntan fuertemente a NVIDIA.

(Editor: la información de este párrafo ya no es precisa). En términos de hardware, el requisito de vectorización dentro de las unidades SIMD en las tarjetas AMD también dificulta aún más el rendimiento del papel que con el hardware NVIDIA.

Jonathan Dursi
fuente
2
Estoy aprendiendo OpenCL usando ATI Stream, aprecio la nota sobre la vectorización :) Si bien me doy cuenta de que los beneficios de NVIDIA son ... bastante grandes, simplemente apoyo a AMD / ATI y a la propia empresa, y tengo tiempo para dedicarme a crear bibliotecas: DI creo que el rendimiento de OpenCL lo hará definitivamente aumentará en los próximos años y me gustaría que mi código también estuviera listo para eso.
Garet Claborn
Sería interesante ver lo que piensa de GCN de AMD y OpenCL 1.2, ahora (2013) que los simds son cosa del pasado. ¿Alguna diferencia neta?
Danno
3
@Jonathan Han pasado 3 años desde que escribiste esta gran publicación. Me preguntaba si, en su opinión, la plataforma, la comunidad y el ecosistema de AMD han cerrado la brecha.
basilikode
No tanto por las tarjetas de video o GPGPU, sino por los procesadores en sí, siempre he sido un fanático de Intel sobre AMD, sin embargo, recientemente AMD está a punto de lanzar el nuevo procesador ZEN en el que sus pruebas de marcas de quemado muestran que en la configuración predeterminada es comparable a los mejores procesadores i7 de Intel. Se supone que su nueva tecnología mejora cuanto más funciona, ya que reconoce patrones de instrucciones. Así que creo que la mayor parte de su tiempo y esfuerzo se dedicó a este nuevo procesador en lugar de a su tecnología GPU. Sin embargo, una vez que se lancen sus procesadores Zen, estoy seguro de que Intel tendrá algo mejor.
Francis Cugler
17

La principal diferencia entre las arquitecturas de AMD y NVIDIA es que AMD está optimizado para problemas en los que el comportamiento del algoritmo se puede determinar en tiempo de compilación, mientras que NVIDIA está optimizado para problemas en los que el comportamiento del algoritmo solo se puede determinar en tiempo de ejecución.

AMD tiene una arquitectura relativamente simple que les permite gastar más transistores en ALU. Siempre que el problema pueda definirse completamente en tiempo de compilación y mapearse con éxito en la arquitectura de una manera algo estática o lineal, es muy probable que AMD pueda ejecutar el algoritmo más rápido que NVIDIA.

Por otro lado, el compilador de NVIDIA está haciendo menos análisis en tiempo de compilación. En cambio, NVIDIA tiene una arquitectura más avanzada en la que han gastado más transistores en lógica que puede manejar el comportamiento dinámico del algoritmo que solo emerge en tiempo de ejecución.

Creo que el hecho de que la mayoría de las supercomputadoras que usan GPU van con NVIDIA es que el tipo de problema en el que los científicos están interesados ​​en ejecutar cálculos, en general, se relaciona mejor con la arquitectura de NVIDIA que con la de AMD.

Roger Dahl
fuente
2
Con GCN (Graphics Core Next), AMD se ha alejado de SIMD y VLIW a una arquitectura más similar a la de NVIDIA (SIMT y programación de instrucciones más flexible).
Aleksandr Dubinsky
1
@AleksandrDubinsky: Y con el hardware de Compute Capability 3.0, NVIDIA se ha acercado a AMD al eliminar la programación dinámica. Creo que sus arquitecturas convergerán en algún punto intermedio.
Roger Dahl
1
Escuché esto en el pasado, pero no pude encontrar ninguna información concreta. ¿Dónde puedo encontrar más detalles sobre esto?
Yakov Galka
7

He hecho una codificación iterativa en OpenCL. Y los resultados de ejecutarlo en NVIDIA y ATI son prácticamente los mismos. Cerca de la misma velocidad en las mismas tarjetas de valor ($).

En ambos casos, las velocidades fueron ~ 10x-30x en comparación con una CPU.

No probé CUDA, pero dudo que pueda resolver mágicamente mis problemas de recuperación de memoria aleatoria. Hoy en día, CUDA y OpenCL son más o menos lo mismo, y veo más futuro en OpenCL que en CUDA. La razón principal es que Intel está lanzando controladores con OpenCL para sus procesadores. Este será un gran avance en el futuro (ejecutar 16, 32 o 64 subprocesos de OpenCL en la CPU es REALMENTE rápido y muy fácil de transferir a la GPU).

DarkZeros
fuente
7

Habiendo pasado algún tiempo con OpenCL para tarjetas GCN después de algunos años de CUDA para Fermi y Kepler, todavía prefiero CUDA como lenguaje de programación y elegiría hardware AMD con CUDA si tuviera una opción.

Principales diferencias de NVIDIA y AMD (OpenCL):

Para AMD:

  • Incluso con Maxwell, NVidia todavía tiene latencias de comando más largas y es probable que los algoritmos complejos sean 10 más rápidos en AMD (asumiendo los mismos Tflops teóricos) después de optimizaciones fáciles para ambos. La brecha fue de hasta el 60% para Kepler VS GCN. Es más difícil optimizar núcleos complejos para NVidia en este sentido.

  • Tarjetas baratas.

  • OpenCL es un estándar abierto con otros proveedores disponibles.

Para Nvidia:

  • Tiene la línea de hardware Tesla que es adecuada para altas cargas de servidor confiables.

  • El nuevo Maxwell es mucho más eficiente energéticamente.

  • El compilador y las herramientas son mucho más avanzados. AMD todavía no puede implementar el maxregcoutparámetro, por lo que puede controlar fácilmente la ocupación en varios hardware y su compilador tiene muchas ideas aleatorias de lo que es un código óptimo que cambia con cada versión, por lo que es posible que deba volver a visitar el código antiguo cada mitad un año porque de repente se volvió un 40% más lento.

En este punto, si GPGPU es su objetivo, CUDA es la única opción, ya que opencL con AMD no está listo para la granja de servidores y es significativamente más difícil escribir código eficiente para AMD debido al hecho de que el compilador siempre parece estar "en beta". .

Vladimir Tankovich
fuente
Gracias por la nueva respuesta. ¿Puede aclarar en qué unidades se encuentra "probablemente 10 más rápido"? ¿Por ciento?
Aleksandr Dubinsky
Opinión personal: En un momento, las tarjetas ATI eran, en cierto sentido, mejores que Nvidia, pero carecían de compatibilidad con la actualización de controladores y, con el tiempo, AMD compró ATI por completo, donde Nvidia sigue siendo la misma empresa. Además, Nvidia todavía tiene una mejor compatibilidad con los controladores de actualización. Esto se encuentra más dentro del extremo del usuario de las tarjetas para el rendimiento con las aplicaciones. No me malinterpretes, ambas tecnologías son excelentes a su manera y ambas tienen tarjetas económicas de gama baja y tarjetas de gama alta más caras. Con el tiempo, cambié de ATI a Nvidia. En cuanto al desarrollo, Nvidia tiene un conjunto de funciones mucho mejor y una API o biblioteca programable.
Francis Cugler
6

Soy nuevo en GPGPU pero tengo algo de experiencia en informática científica (Doctorado en Física). Estoy formando un equipo de investigación y quiero utilizar GPGPU para mis cálculos. Tuve que elegir entre las plataformas disponibles. Me decidí por Nvidia, por un par de razones: aunque ATI podría ser más rápido en papel, Nvidia tiene una plataforma más madura y más documentación, por lo que será posible acercarse al máximo rendimiento en esta plataforma.

Nvidia también tiene un programa de apoyo a la investigación académica, uno puede solicitar apoyo, acabo de recibir una tarjeta TESLA 2075 por la que estoy muy feliz. No sé si ATI o Intel apoyan la investigación de esta manera.

Lo que escuché sobre OpenCL es que está tratando de ser todo a la vez, es cierto que su código OpenCL será más portátil, pero también es probable que no explote todas las capacidades de ninguna de las plataformas. Prefiero aprender un poco más y escribir programas que utilicen mejor los recursos. Con el TESLA K10 que acaba de salir este año, Nvidia está en el rango de 4.5 TeraFlops, por lo que no está claro que Nvidia esté detrás ... sin embargo, los MIC de Intel podrían ser un competidor real, especialmente si logran mover la unidad GPGPU a la placa base. Pero por ahora, elegí Nvidia.

Andras
fuente
Eche un vistazo a la respuesta de @ AndrewCooke para obtener una opinión sobre la (falta de) soporte de NVidia.
Aleksandr Dubinsky
5

Mi experiencia en la evaluación del rendimiento de punto flotante OpenCL tiende a favorecer las tarjetas NVIDIA. He trabajado con un par de puntos de referencia de punto flotante en tarjetas NVIDIA que van desde la 8600M GT hasta la GTX 460. Las tarjetas NVIDIA logran consistentemente aproximadamente la mitad del pico teórico de precisión simple en estos puntos de referencia.
Las tarjetas ATI con las que he trabajado rara vez alcanzan más de un tercio del pico de precisión simple. Tenga en cuenta que mi experiencia con ATI está sesgada; Solo he podido trabajar con una tarjeta de la serie 5000. Mi experiencia es principalmente con tarjetas de la serie HD 4000, que nunca fueron bien compatibles. El soporte para las tarjetas de la serie HD 5000 es mucho mejor.

virtuallinux
fuente
1

Me gustaría añadir algo al debate. Para nosotros en el negocio del software, podemos comprometer el rendimiento de precisión simple en bruto con la productividad, pero incluso eso no tengo que comprometerme ya que, como ya se señaló, no se puede lograr tanto rendimiento en el hardware de ATI utilizando OpenCL como se puede lograr. si escribe en CUDA en el hardware de NVIDIA.

Y sí, con el anuncio de PGI del compilador x86 para CUDA, no habrá ninguna buena razón para dedicar más tiempo y recursos a escribir en OpenCL :)

PD: Mi argumento podría estar sesgado ya que casi todo nuestro trabajo de GPGPU se realiza en CUDA. Tenemos una biblioteca de procesamiento de imágenes / visión por computadora CUVI (CUDA para visión e imágenes) que acelera algunas funciones básicas de IP / CV en CUDA.

Salman Ul Haq
fuente
0

Cuda es ciertamente popular que OpenCL a partir de hoy, ya que fue lanzado 3 o 4 años antes que OpenCL. Desde que se lanzó OpenCL, Nvidia no ha contribuido mucho para el lenguaje, ya que se concentran mucho en CUDA. Ni siquiera han lanzado la versión openCL 1.2 para ningún controlador.

En lo que respecta a la computación heterogénea, así como a los dispositivos portátiles, OpenCl seguramente ganará más popularidad en un futuro próximo. A partir de ahora, el mayor contribuyente a OpenCL es AMD, es visible en su sitio.

shunya
fuente
-2

en mi experiencia:

  • Si desea el mejor rendimiento absoluto, debe ver quién está en la última iteración de hardware y usar su pila (incluidas las últimas versiones / beta).

  • si desea el mejor rendimiento por el dinero, apuntará a tarjetas de jugador en lugar de tarjetas "profesionales" y la flexibilidad de apuntar a diferentes plataformas favorece a opencl.

  • Si está comenzando, en particular, cuda tiende a ser más pulido y tener más herramientas y bibliotecas.

finalmente, mi opinión personal, después de un pésimo "apoyo" de nvidia (obtuvimos un tesla muerto y no se cambió durante meses, mientras un cliente esperaba): la flexibilidad para saltar del barco con opencl vale el riesgo de un rendimiento ligeramente menor cuando nvidia está por delante en el ciclo de lanzamiento.

Andrew Cooke
fuente
Experiencia similar con "soporte" de nvidia: falla libcuda.so(solo con OpenCL, CUDA funciona) y no hay respuesta de ellos en absoluto.
eudoxos
1
Con nuestro distribuidor no tenemos ningún problema en reemplazar el tesla muerto, normalmente recibimos el nuevo hardware antes de enviar el defectuoso, así que supongo que no es un problema de NVidia sino de su distribuidor.
Gaetano Mendola
Pensé que Tesla era súper confiable. Qué fud de marketing.
Aleksandr Dubinsky
OpenCL no es portátil para el rendimiento, por lo que no es posible saltar cada vez que una empresa lanza un nuevo buque insignia (sin mantener dos ramas de código optimizadas). Además, el soporte OpenCL de NVIDIA está varias versiones atrás y, sospecho, mal mantenido.
Aleksandr Dubinsky