tutorial - ¿Puedo programar el CUDA de Nvidia usando solo Python o tengo que aprender C?
python tutorial (8)
Supongo que la pregunta habla por sí misma. Estoy interesado en hacer algunos cálculos serios, pero no soy un programador de oficio. Puedo conectar suficiente python para hacer lo que quiero. ¿Pero puedo escribir un programa en python y hacer que la GPU lo ejecute usando CUDA? ¿O tengo que usar una mezcla de python y C?
Los ejemplos en la página web de Klockner (sp) "pyCUDA" tenían una mezcla de python y C, por lo que no estoy seguro de cuál es la respuesta.
Si alguien quiere hablar sobre Opencl, siéntase libre. Escuché sobre este negocio de CUDA hace solo un par de semanas y no sabía que podrías usar tus tarjetas de video como esta.
Creo que, con PyCUDA, sus núcleos computacionales siempre tendrán que escribirse como "Código CUDA C". PyCUDA se hace cargo de una gran cantidad de contabilidad aburrida, pero no construye núcleos computacionales CUDA a partir del código Python.
Grandes respuestas ya, pero otra opción es Clyther . Te permitirá escribir programas OpenCL sin usar C, al compilar un subconjunto de Python en kernels OpenCL.
Me preguntaba lo mismo y llevé algunas búsquedas. Encontré el artículo vinculado a continuación que parece responder a su pregunta. Sin embargo, lo solicitó en 2014 y el artículo de Nvidia no tiene fecha.
https://developer.nvidia.com/how-to-cuda-python
El video pasa por la configuración, es un ejemplo inicial y, lo que es más importante, profiling. Sin embargo, no sé si puede implementar todos los patrones de cálculo generales habituales. Creo que puedes porque, en la medida de lo posible, no hay limitaciones en NumPy.
Una biblioteca prometedora es Copperhead ( enlace alternativo ), solo necesita decorar la función que desea que ejecute la GPU (y luego puede optar por ella / opt-out para ver qué es lo mejor entre cpu o gpu para esa función )
El paquete CUDA de Scikits podría ser una mejor opción, siempre que no requiera ningún conocimiento de bajo nivel o código C para cualquier operación que pueda representarse como manipulación numpy de arreglos.
pyopencl ofrece una alternativa interesante a PyCUDA. Se describe como un "proyecto hermano" para PyCUDA. Es un contenedor completo alrededor de la API de OpenCL.
Por lo que tengo entendido, OpenCL tiene la ventaja de correr en GPU más allá de Nvidia.
Existe un buen conjunto básico de construcciones matemáticas con núcleos de cómputo ya escritos a los que se puede acceder a través del module cumath de cumath
. Si quieres hacer más cosas específicas o personalizadas, tendrás que escribir un toque de C en la definición del kernel, pero lo bueno de pyCUDA es que te hará mucho ejercicio; hace un montón de meta-programación en el back-end para que no tengas que preocuparte por la programación en serio de C, solo las pequeñas piezas. Uno de los ejemplos dados es un kernel Map / Reduce para calcular el producto de puntos:
dot_krnl = ReductionKernel(np.float32, neutral="0", reduce_expr="a+b", map_expr="x[i]*y[i]", arguments="float *x, float *y")
Los pequeños fragmentos de código dentro de cada uno de esos argumentos son líneas C, pero en realidad escribe el programa por usted. ReductionKernel
es un tipo de kernel personalizado para las funciones de tipo map / reducish, pero hay diferentes tipos. La porción de ejemplos de la documentation oficial de pyCUDA entra en más detalles.
¡Buena suerte!