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?
Respuestas:
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
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.
fuente
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.
fuente
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.
fuente
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).
fuente
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
maxregcout
pará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". .
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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.
fuente
libcuda.so
(solo con OpenCL, CUDA funciona) y no hay respuesta de ellos en absoluto.