Con Windows 7 probablemente en RTM el próximo mes de octubre (y DirectX 11 con él), ¿valdría la pena esperar las características GPGPU explícitas de DirectX 11, lo que significa que será multiplataforma (ATI/Nvidia, no Windows/Linux/Mac/Lo que sea); o debería crear una aplicación CUDA ahora?¿Debo crear aplicaciones CUDA ahora o esperar a DirectX 11?
Respuesta
Desde un punto de vista de aprendizaje, creo que se beneficiaría si comenzara con CUDA ahora, ya que le ayudará mucho a pensar en el paralelismo de datos, que es en lo que las GPU son buenas. Luego, cuando/si recurres a DirectX 11, tienes una buena base para trabajar con él, pero depende del tipo de tiempo que tengas disponible (es decir, si tienes tiempo para experimentar cosas solo para la experiencia de aprendizaje).
Alternativamente, las personas mac están presionando para que OpenCL (Open Compute Language) sea la solución general, aunque no se sabe mucho en este momento. Esta es otra tecnología que puede esperar y verificar.
La conferencia de Microsoft PDC se llevará a cabo a fines de este mes, quizás anuncien cierta información útil sobre DX11 para ayudarle a tomar una decisión.
Mi consejo general es que creo que hay mucho que aprender ahora que podrás usar más adelante (con DX11 o OpenCL) pero que tienes que preguntarte si estás dispuesto a aprender alguna tecnología que podría no hacerlo a la larga. De todos modos, estos son solo mis pensamientos, todavía no tengo una gran cantidad de experiencia con CUDA.
En una nota altamente especulativa, mi intuición es que las API como CUDA no sobrevivirán por mucho tiempo y que DirectX y/o OpenCL son las únicas soluciones que tienen futuro (a menos que realmente fallen sus implementaciones, que duda).
Desde mi experiencia, el salto más importante de la programación de procesadores de propósito general a la programación de GPGPU son los saltos conceptuales. La clave aquí es el código paralelo de datos.
Incluso en un entorno de subprocesos múltiples en una CPU, cada subproceso está haciendo lo suyo en un nivel bajo, y la sincronización entre subprocesos es una ocurrencia relativamente rara. Para usar la potencia de una GPGPU, debe ejecutar miles de subprocesos que lógicamente ejecutan las mismas instrucciones, en diferentes datos, casi completamente sincronizados.
Aprender la sintaxis de CUDA es relativamente rápido en comparación con familiarizarse con el paradigma paralelo de datos, por lo que si tiene la intención de prepararse para la programación de GPGPU, comenzar con CUDA ahora sería una medida muy útil.
Si quieres la experiencia de aprendizaje, ¡adelante!
Otra alternativa es SDK flujo de AMD/ATI, que se puede descargar aquí: http://ati.amd.com/technology/streamcomputing/sdkdwnld.html
CUDA de Nvidia y CAL de ATI son más o menos equivalente en características. Cuda solo funciona en nVidia gpus y CAL solo funciona en ATI gpus.
Eventualmente, habrá buenas herramientas de desarrollo multiplataforma, pero eso es un gran vacío en este momento. Los sombreadores de cómputo DirectX 11 y OpenCL lucharán por ser la herramienta de elección, pero ninguno está disponible todavía.
Si desea construir una aplicación "real", y no solo una experiencia de aprendizaje desechable, y desea que funcione multiplataforma, existen algunas alternativas: Brook, por ejemplo. Además, la gente ha estado haciendo gpgpu con DirectX y OpenGL (no con OpenCL) durante varios años, sin esperar las características explícitas de GPGPU. Ve a gpgpu.org para punteros
Tanto DirectX 11 Compute Shaders como OpenCL se basan principalmente en CUDA, por lo que definitivamente vale la pena comenzar a trabajar con CUDA ahora. Básicamente, todos usan el mismo modelo de memoria y tienen una sintaxis similar, que está más cerca de CUDA que de Brook + (que usarías con Stream SDK).
Sin embargo, si desea DX11, no hay necesidad de esperar, simplemente tome el November 2008 SDK de Microsoft que viene con una vista previa DX11, que ya puede usar para escribir (al menos) aplicaciones simples de sombreado.
- 1. ¿Debo usar C++ 11 lambdas ahora?
- 2. Captura de framebuffer DirectX 11 (C++, no Win32 o D3DX)
- 3. DirectX 9 o DirectX 10 para principiantes?
- 4. Rendering a texturas múltiples con una pasada en directx 11
- 5. DirectX 11, enviar varias texturas para Shader
- 6. ¿DirectX 11 es compatible con .NET?
- 7. WPF y DirectX 11 vía D3DImage
- 8. Cómo compilar una aplicación DirectX 11 en MinGW
- 9. crear mediante programación DirectX 11 texturas, los pros y los contras de los tres métodos diferentes
- 10. ¿Debo esperar a que Django comience a soportar Python 3?
- 11. OpenGL/DirectX Hook - Similar a FRAPS
- 12. ¿Escala ahora o más tarde?
- 13. ¿Microsoft está protegiendo Managed DirectX?
- 14. DirectX Desktop
- 15. Procesamiento de imágenes en CUDA o OpenCV?
- 16. cómo crear aplicaciones similares a viber?
- 17. ¿Es posible desarrollar aplicaciones de DirectX en Linux?
- 18. crear automáticamente comprar ahora botón paypal?
- 19. Crear un vínculo que, o bien lanza iOS, o redirige a la tienda de aplicaciones
- 20. ¿Qué dolores de cabeza debo esperar al usar Trac?
- 21. Debo crear un método estático o una superclase abstracta
- 22. ¿Debo usar Flash o Flex?
- 23. Función en PHP obsoleta, ¿qué debo usar ahora?
- 24. Esperar a Keypress (o) N segundos para caducar
- 25. ¿Debo crear un RegEx complejo o varios y menos complejos?
- 26. ¿Cómo crear aplicaciones Django reutilizables?
- 27. ¿Debo utilizar DirectInput o el bucle de mensajes de Windows?
- 28. ¿Debo emitir advertencias a STDERR o STDOUT?
- 29. ¿Debo ir al widget o a HTML?
- 30. Codificando CUDA con C#?
Sé perfectamente la programación de datos en paralelo, me preguntaba si valdría la pena invertir tiempo en CUDA si DX11 también va a incluir las capacidades de GPGPU. – TraumaPony