2010-04-15 17 views
22

Estoy investigando formas de usar GPU para procesar datos de transmisión. Tenía dos opciones pero no podía decidir qué camino tomar.OpenCL o CUDA ¿Qué camino tomar?

Mis criterios son los siguientes:

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

voy código en C y C++ bajo Linux.

+1

Ver también: http://stackoverflow.com/questions/2384930 –

Respuesta

36

OpenCL

  • interfaz de su código de producción
  • portable entre diferentes hardware de gráficos
  • operaciones limitadas, pero los atajos ya predispuestas

CUDA

lenguaje
  • separado (CUDA C)
  • hardware de NVIDIA solamente
  • un control casi total sobre el código (que codifica en un lenguaje similar a C)
  • gran cantidad de herramientas de perfilado y depuración

Bottom línea - OpenCL es portátil, CUDA es nVidia solamente. Sin embargo, al ser un lenguaje independiente, CUDA es mucho más poderoso y tiene muchas herramientas realmente buenas.

  1. Facilidad de uso - OpenCL es más fácil de usar fuera de la caja, pero una vez que la configuración del entorno de codificación CUDA es casi como la codificación en C
  2. Comunidad y Documentación - ambos tienen extensa documentación y ejemplos, sin embargo creo que CUDA tiene mejor.
  3. Rendimiento - CUDA permite un mayor control, por lo tanto, se puede ajustar mejor para un mayor rendimiento.
  4. Futuro - difícil decir realmente.
+9

En realidad, hay una ventaja más en el uso de OpenCL, también puede paralelizar tareas en la CPU. – systemsfault

+0

@holydiver, punto válido, pero usted preguntó acerca de la GPU :) –

+4

@holydiver, en este espíritu podría decir que ni Windows ni MacOS X tienen un futuro brillante:> –

17

Mis experiencias personales fueron:

  1. API: API OpenCL tiene un poco más compleja. Sin embargo, la mayor parte del tiempo lo dedicará a escribir código de 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 esté a punto de igualarse.

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

  4. Rendimiento: Hicimos la experiencia de que los controladores OpenCL todavía no están optimizados.

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

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

6

OpenCL hasta el final a menos que tenga un motivo específico para usar CUDA. OpenCL funciona bien en multinúcleos como Intel i7 además de ejecutarse en GPU. Al usar OpenCL, puede ejecutarlo en una gama mucho más amplia de hardware, desde teléfonos celulares Droid hasta los nodos informáticos IBM Power7 del superordenador más grande del mundo, Blue Waters, que se espera que se conecte el próximo año.

Cuestiones relacionadas