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.