gpgpu nvidia - Programación de GPU, CUDA o OpenCL?




amd developer (3)

Soy un novato en la programación de GPU. Tengo una laptop con tarjeta NVIDIA GeForce GT 640. Me enfrento con 2 dilemas, las sugerencias son bienvenidas.

  1. Si uso CUDA - Ubuntu o Windows Clearly CUDA es más adecuado para Windows, aunque puede ser un problema grave instalarlo en Ubuntu. He visto algunos blogs que afirman haber instalado CUDA 5 en Ubuntu 11.10 y Ubuntu 12.04 . Sin embargo, no he podido hacer que trabajen. Además, los libros de texto estándar de CUDA prefieren trabajar en el dominio de Windows y son más o menos silenciosos en lo que respecta a la instalación y el funcionamiento de Unix / Ubuntu.

  2. CUDA o OpenCL : ¡ahora es más complicado que mi primera pregunta! En su mayoría me he encontrado con proyectos de GPGPU usando CUDA / Nvidia, pero OpenCL es probablemente la siguiente mejor opción en código abierto y la instalación en Ubuntu probablemente no sea un problema, aunque algunas sugerencias aquí serán más útiles. ¿Estoy sacrificando cualquier funcionalidad si uso OpenCL y NO CUDA?

¿Alguna ayuda o sugerencia?


Answers

  1. Si usa OpenCL, puede usarlo fácilmente tanto en Windows como en Linux, ya que tener controladores de pantalla es suficiente para ejecutar los programas de OpenCL y, para la programación, simplemente necesita instalar el SDK. CUDA tiene más requisitos en versiones específicas de GCC, etc. Pero tampoco es mucho más difícil de instalar en Linux.

  2. En Linux, CUDA tiene requisitos extraños, como usar GCC 4.6 o 4.7. Si usa una versión diferente de GCC, ya no podrá compilar su programa. Si usa OpenCL, puede usar cualquier compilador porque solo necesita vincularlo con la biblioteca común de OpenCL. Entonces OpenCL es más fácil de configurar, usar y compilar. Una vez que compila un programa OpenCL, puede ejecutarse en cualquier hardware (siempre que esté codificado para hacerlo), incluso si se compiló utilizando el OpenCL SDK de otra marca.

Puede escribir programas OpenCL que funcionarán en hardware Nvidia, AMD e Intel, en GPU, CPU y aceleradores. ¡Aún más, Altera está trabajando para soportar OpenCL en FPGA! Si usa CUDA, tendrá que usar GPU de Nvidia solamente y volver a escribir su código nuevamente en OpenCL u otro idioma para otras plataformas. Una seria limitación de usar CUDA y una gran pérdida de tiempo a largo plazo.

Veo que alguien publicó algunas referencias antiguas entre CUDA y OpenCL, ¡pero ya son viejas! Cuando esos documentos estaban fuera, solo AMD soportaba OpenCL correctamente. Desde 2013, OpenCL es compatible con ARM, Altera, Intel, etc. y se convirtió en un estándar de la industria.

El único inconveniente es que, dado que OpenCL es tan flexible, se enfrenta a más opciones y formas de codificar asignaciones de memoria, transferencias, etc. en su programa. Por lo tanto, puede sentirse más complicado, tal vez.


Creo que no es muy difícil configurar el entorno de cuda en Ubuntu, puedes intentarlo.

Como estudiante de arquitectura informática, creo que debes aprender tanto de OpenCL como de CUDA. Y debe aprender cuda primero porque CUDA expone más hardware e información de tiempo de ejecución, la conciencia del hardware es muy importante cuando quiere optimizar sus códigos GPU.


Mi experiencia en la evaluación del rendimiento de punto flotante OpenCL tiende a favorecer las tarjetas NVIDIA. He trabajado con un par de puntos de referencia flotantes en tarjetas NVIDIA que van desde el 8600M GT hasta el GTX 460. Las tarjetas NVIDIA constantemente logran aproximadamente la mitad del pico teórico de precisión única en estos puntos de referencia.
Las tarjetas ATI con las que he trabajado rara vez alcanzan más de un tercio del pico de precisión simple. Tenga en cuenta que mi experiencia con ATI es sesgada; Solo he podido trabajar con una tarjeta de la serie 5000. Mi experiencia es principalmente con tarjetas de la serie HD 4000, que nunca fueron bien compatibles. El soporte para las tarjetas de la serie HD 5000 es mucho mejor.







cuda gpu gpgpu gpu-programming