2010-07-03 12 views
16

Estoy buscando comparaciones entre OpenCL y DirectCompute, pero no he encontrado nada. Las ventajas de OpenCL de ser multiplataforma y tener una gama más amplia de GPU compatibles no me importan. Estoy bien con la codificación en Windows solo contra GPU DX11. Asumiendo eso, ¿cuáles son los pros y los contras de cada API?OpenCL vs. DirectCompute?

this question was raised before, pero estoy buscando más detalles.

No me interesa CUDA, ya que no quiero restringirme solo al hardware de Nvidia.

+0

Es posible que desee reconsiderar su postura sobre CUDA, es bastante sorprendente, como es el hardware nvidia. – Benson

+6

@Benson Suponer que todos sus usuarios tienen hardware Nvidia parece una falla bastante grande. Lo mejor es atenerse a una API estandarizada como OpenCL o DirectCompute. Ambos ofrecen las mismas ventajas de CUDA sin la desventaja de solo trabajar en el hardware de Nvidia. De hecho, hoy en día uno tiene que cuestionar la decisión de usar CUDA en absoluto cuando hay otras API que hacen exactamente lo mismo en cualquier cantidad de sistemas de hardware diferentes. – Cromulent

+0

@Simon ¿Realmente? Admito que han pasado algunos meses desde que hice alguna comparación, pero la última vez que revisé CUDA fue un orden de magnitud más completo y con muchas funciones. Usted hace otras suposiciones cuando usa DirectCompute. Mientras tanto, no todos tienen "usuarios" genéricos. Una gran cantidad de proyectos de computación científica compran hardware y crean el software para ejecutarlo. Como no hemos recibido ningún detalle de Bob, no se puede asumir de una manera u otra. – Benson

Respuesta

11

Probablemente la mayor diferencia para un codificador es que DirectCompute está programado por un lenguaje que es similar a HLSL, y OpenCL se programa a través de un lenguaje de tipo C.

Otra diferencia a tener en cuenta es que, en general, para las GPU de nivel básico, la compatibilidad con DirectX es mejor (más rápida y menos problemática) que la compatibilidad con OpenGL en Windows. Esto puede traducirse en un soporte más estable para DirectCompute, pero en realidad, esto es solo especulación.

+0

¿Qué tiene que ver el soporte de OpenGL en Windows con OpenCL ...? Lo importante es la diferencia de soporte entre los proveedores; AMD soporta OpenCL muy bien y tiene soporte para versiones más nuevas, NVIDIA (que tiene el producto competidor CUDA) solo es compatible con CL 1.1 (con extensiones de imagen, etc.) Además, OpenCL garantiza ciertas cosas que DirectCompute (y Compute Shaders de OpenGL) no , como el cumplimiento de punto flotante IEEE. – Amadiro

+0

Cuando escribí esto, y creo que sigue siendo así, los controladores de tarjeta de video de bajo nivel son los mismos para cada tecnología. Lea atentamente lo que digo: "Esto puede traducirse en un soporte más estable ..." Esto es una especulación, pero no infundada, ya que el protocolo para mover la memoria y las funciones hacia y desde la tarjeta de video es el mismo para cualquier pila, y para DirectCompute comparte la misma cantidad de pruebas y robustez que el DirectX mejor soportado. Nuevamente, en el momento en que escribí esto. – codekaizen

11

Bueno, la principal ventaja de OpenCL es que no se limita a las tarjetas gráficas. Puede utilizar su CPU multinúcleo, su tarjeta gráfica y, potencialmente, cualquier cantidad de otros dispositivos de aceleración de hardware (DSP, etc.), todo desde el mismo programa.

No estoy seguro si DirectCompute permite esa libertad.

+1

DirectCompute no se ejecuta en los recursos de la CPU, sin embargo, el acelerador v2 de MSR se ejecuta en la CPU, y más bien abstrae el uso de computacional recursos. http://research.microsoft.com/en-us/projects/accelerator/ – codekaizen

1

Uso OpenCL porque puedo portar fácilmente mi aplicación a Linux, pero con DirectCompute esto no es posible. También creo que el rendimiento de la implementación de OpenCL aumentará con el tiempo (que llega al mismo nivel que CUDA para NVidia Cards) y también que los errores (del conductor) (con suerte) se eliminarán con el tiempo.

4

La plataforma multiplataforma OpenCL no es solo un detalle, ya que el código de host (el que llama a la API de OpenCL y el envío de kernels) puede ser multiplataforma (ver link text, link text ...).

Escribe una vez, ejecuta en cualquier GPGPU, en cualquier lugar.

lo contrario, el utillaje OpenCL es realmente cada vez mejor, con un plugin de ATI Stream para Visual Studio, los NVidia & ATI SDK que contiene toneladas de muestras, etc ...

3

Otra opción ahora es C++ AMP que le da sintaxis moderna de C++ sin la necesidad de un compilador separado mientras se preserva la portabilidad del hardware. Siga los enlaces de aquí para obtener más información y no dude en publicar preguntas como las tiene: http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/13/c-amp-in-a-nutshell.aspx

+1

Tenía la impresión de que solo Visual Studio 2012 puede compilar el código AMP de C++. ¿Eso no cuenta como "una necesidad de un compilador separado"? – JBentley