OpenCL o CUDA ¿Qué camino tomar?

Estoy investigando formas de usar GPU para procesar datos de transmisión. Tenía dos opciones, pero no podía decidir qué camino tomar.

Mis criterios son los siguientes:

  1. Facilidad de uso (buena API)
  2. Comunidad y Documentación
  3. Actuación
  4. Futuro

Codificaré en C y C ++ bajo linux.

OpenCL

  • interconectado desde su código de producción
  • portátil entre diferentes hardware de gráficos
  • Operaciones limitadas pero atajos prepreparados

CUDA

  • idioma separado (CUDA C)
  • solo hardware nVidia
  • Control casi total sobre el código (encoding en un lenguaje similar a C)
  • gran cantidad de herramientas de perfilado y depuración

En pocas palabras: OpenCL es portátil, CUDA es solo nVidia. Sin embargo, al ser un lenguaje independiente, CUDA es mucho más poderoso y tiene un montón de herramientas realmente buenas.

  1. Facilidad de uso : OpenCL es más fácil de usar de inmediato, pero una vez que configura el entorno de encoding CUDA es casi como codificar en C.
  2. Comunidad y documentación : ambos tienen una amplia documentación y ejemplos, sin embargo, creo que CUDA tiene mejor.
  3. Rendimiento : CUDA permite un mayor control, por lo tanto, puede ajustarse mejor para un mayor rendimiento.
  4. Futuro – difícil de decir realmente.

Mis experiencias personales fueron:

  1. API: OpenCL tiene una API más compleja. Sin embargo, pasará la mayor parte del tiempo escribiendo código kernel, y aquí ambos son casi idénticos.

  2. Comunidad: CUDA tiene una comunidad mucho más grande que OpenCL hasta ahora, pero esto probablemente estará a punto de salir.

  3. Documentación: Ambos están muy bien documentados.

  4. Rendimiento: creamos la experiencia de que los controladores de OpenCL aún no están totalmente optimizados.

  5. Futuro: ¡El futuro está en OpenCL ya que es un estándar abierto, no restringido a un proveedor o hardware específico!

Esta evaluación es de 2010, por lo que probablemente esté desactualizada.

OpenCL hasta el final, a menos que tenga una razón específica para usar CUDA. OpenCL funciona bien en multinúcleos como Intel i7 además de funcionar en GPU. Al usar OpenCL, puede ejecutarlo en una gama mucho más amplia de hardware, desde teléfonos celulares Droid a los nodos de computación IBM Power7 de la supercomputadora más grande del mundo, Blue Waters , que se espera que esté disponible el próximo año.