ultima tutorial 8gb 6gb cuda opencl gpgpu nvidia ati

tutorial - cuda wikipedia



NVIDIA vs AMD: rendimiento de GPGPU (10)

Cuda es ciertamente popular que OpenCL a partir de hoy, ya que fue lanzado 3 o 4 años antes de 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 de openCL 1.2 para ningún controlador.

En cuanto a la computación heterogénea, así como a los dispositivos portátiles como OpenCl seguro, 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.

Me gustaría saber de 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 pregunta en este foro, ''cuda'' supera ''opencl'' 3: 1, y ''nvidia'' supera a ''ati'' 15: 1, y no hay etiqueta para ''ati-stream'' en absoluto).

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 adquirir por $ 370 y tiene una calificación 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.

¿Cuán realista es esa ventaja de papel de AMD sobre NVIDIA, y es probable que se realice en la mayoría de las tareas de GPGPU? ¿Qué sucede con las tareas enteras?


Después de haber pasado algún tiempo con OpenCL para tarjetas GCN después de unos 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 (suponiendo que los mismos Tflops teóricos) después de optimizaciones fáciles para ambos. La brecha fue de hasta 60% para Kepler VS GCN. En este sentido, es más difícil optimizar kernels complejos para NVidia.

  • 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 cargas de servidor elevadas y confiables.

  • New Maxwell es mucho más eficiente de energía.

  • El compilador y las herramientas son mucho más avanzados. AMD aún no puede implementar el parámetro maxregcout , por lo que puede controlar fácilmente la ocupación en varios hardware y su compilador tiene muchas ideas aleatorias de qué es un código óptimo que cambia con cada versión, por lo que es posible que tenga que revisar el código anterior cada medio 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 mucho más difícil escribir código eficiente para AMD debido al hecho de que el compilador siempre parece estar "en beta". .


He hecho algunas codificaciones iterativas en OpenCL. Y los resultados de ejecutarlo en NVIDIA y ATI son prácticamente los mismos. Casi 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 mis problemas de búsqueda aleatoria de memoria mágicamente. 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. Esto será un gran avance en el futuro (ejecutar 16, 32 o 64 hilos de OpenCL en la CPU es REALMENTE rápido, y realmente fácil de transportar a la GPU).


Me gustaría agregar al debate. Para nosotros en el negocio del software, podemos poner en riesgo el rendimiento de precisión simple en bruto a la productividad, pero incluso eso no tiene por qué comprometerse, ya que, como ya se señaló, no se puede lograr tanto rendimiento en el hardware de ATI usando 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 puede estar sesgado ya que hacemos casi todo nuestro trabajo de GPGPU en CUDA. Tenemos una biblioteca de procesamiento de imágenes / visión por ordenador CUVI (CUDA para visión e imágenes) que acelera algunas funciones centrales de IP / CV en CUDA.


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

Esto se debe principalmente a que nvidia ha invertido buena parte de sus recursos (en dinero y personas) para desarrollar importantes bibliotecas requeridas para la computación científica (BLAS, FFT), y luego un buen trabajo de nuevo 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 realiza 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 (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 puntos de vista a veces. Así que 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 introdujo Xeon Phi en la naturaleza, admitiendo tanto OpenMP como OpenCL. También tiene la capacidad de usar el código x86 existente. como se señala en los comentarios, x86 limitado sin SSE por ahora
  • NVIDIA y CUDA aún tienen la ventaja en el rango de bibliotecas disponibles. Sin embargo, es posible que no se estén enfocando en OpenCL tanto como lo hacían antes.

En resumen, OpenCL ha cerrado la brecha en los últimos dos años. Hay nuevos jugadores en el campo. Pero CUDA aún está un poco adelantado al resto.


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 flotantes en tarjetas NVIDIA que van desde el 8600M GT hasta el GTX 460. Las tarjetas NVIDIA constantemente logran aproximadamente la mitad del pico teórico de precisión única 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 es 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.


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

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

Una gran parte de esta diferencia es la cantidad de información en línea disponible. Eche un vistazo a la zona NVIDIA CUDA frente a GPGPU Developer Central de AMD. La cantidad de cosas allí para los desarrolladores que se inician ni siquiera se compara. 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, desde NVIDIA y en 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 la forma de NVIDIA.

(Editor: la información en 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 fracasos máximos, pero para poder obtener una fracción significativa de eso, no solo debes dividir tu 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 lo suficientemente 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 pensando en construir clusters de GPU, ninguno de ellos está considerando seriamente las tarjetas AMD. Y eso significará aún más grupos escribiendo documentos, contribuyendo con códigos, etc. en el lado de NVIDIA.

No soy un chelín de NVIDIA; Ojalá no fuera así, y que hubiera dos (¡o más!) Plataformas de 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 consejos a alguien sobre qué tarjetas comprar hoy, y dónde gastar su tiempo poniendo esfuerzo en este momento, no puedo decir con tranquilidad que ambos entornos de desarrollo son igualmente buenos.

Editado para agregar : Supongo que lo anterior es un poco elíptico en términos de respuesta a la pregunta original, así que permítanme hacerlo un poco más explícito. El rendimiento que puede obtener de una pieza de hardware es, en un mundo ideal con infinito tiempo disponible, dependiente solo del hardware subyacente y las capacidades del lenguaje de programación; pero en realidad, la cantidad de rendimiento que puede obtener en un período fijo de tiempo invertido también depende en gran medida de herramientas de desarrollo, bases de códigos comunitarios existentes (por ejemplo, bibliotecas disponibles públicamente, etc.). Esas consideraciones apuntan fuertemente a NVIDIA.

(Editor: la información en 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 hace que el rendimiento en papel sea aún más difícil que con el hardware NVIDIA.


Soy nuevo en GPGPU pero tengo cierta experiencia en informática científica (doctorado en Física). Estoy armando un equipo de investigación y quiero usar GPGPU para mis cálculos. Tuve que elegir entre las plataformas disponibles. Decidí por Nvidia, por un par de razones: mientras que 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, de la cual 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 aproveche todas las capacidades de cualquiera 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 si Nvidia está detrás ... sin embargo, los MIC de Intel podrían ser un verdadero competidor, especialmente si logran mover la unidad GPGPU a la placa base Pero por ahora, elegí a Nvidia.


en mi experiencia:

  • si quieres el mejor rendimiento absoluto, entonces necesitas ver quién está en la última iteración de hardware y usar su pila (incluidas las versiones más recientes / beta).

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

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

finalmente, mi opinión personal, después del espantoso "soporte" de nvidia (obtuvimos un tesla muerto y no se modificó durante meses, mientras un cliente estaba esperando): la flexibilidad para lanzar el barco con opencl justifica el riesgo de un rendimiento ligeramente inferior cuando nvidia está adelante en el ciclo de lanzamiento.


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

AMD tiene una arquitectura relativamente simple que les permite gastar más transistores en ALU. Siempre que el problema se pueda definir completamente en tiempo de compilación y se pueda asignar correctamente a la arquitectura de una manera estática o lineal, existe una buena posibilidad de que AMD pueda ejecutar el algoritmo más rápido que NVIDIA.

Por otro lado, el compilador de NVIDIA realiza menos análisis en tiempo de compilación. En cambio, NVIDIA tiene una arquitectura más avanzada donde han gastado más transistores en lógica que es capaz de 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 correlaciona mejor con la arquitectura de NVIDIA que AMD.