2010-06-01 18 views
35

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?¿Puedo programar CUDA de Nvidia usando solo Python o tengo que aprender C?

Los ejemplos de (sp) la página web de Klockner "pyCUDA" tenían una mezcla de ambos Python y C, así 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.

+0

supongo que se podría tener una biblioteca de Python que toma el código escrito en un subconjunto de Python y lo compila en instrucciones PTX que se pueden enviar al conductor con la API de CUDA. Algunos de los enfoques para la programación de GPU en Haskell toman este enfoque. No está seguro de si ha sido don en Python sin embargo, aunque –

Respuesta

18

creo que, con PyCUDA, sus núcleos computacionales siempre tendrán que ser escrito como "CUDA C Código". PyCUDA se hace cargo de una gran cantidad de contabilidad aburrida, pero no construye núcleos computacionales CUDA a partir del código Python.

+0

De hecho, aunque hay proyectos interesantes que lo hacen; ver mi respuesta ;) – dwf

+2

Utilizamos PyCUDA en el trabajo y obtener buenos resultados con ella. La ventaja de escribir normal CUDA C es que se puede obtener ayuda y fragmentos de otras personas sin traducir de su código Python API específica. –

8

pyopencl ofrece una alternativa interesante para PyCUDA. Se describe como un "proyecto hermano" para PyCUDA. Es un contenedor completo envolviendo la API de OpenCL.

Por lo que yo entiendo, OpenCL tiene la ventaja de funcionar con las GPU Nvidia más allá de.

+0

OpenCL, en teoría, puede ejecutar en el apoyo CPU también. Sin embargo, el soporte fuera del hardware de Nvidia es bastante mediocre hasta el momento. – dwf

20

Usted debe echar un vistazo a CUDAmat y Theano. Ambos son enfoques para escribir código que se ejecuta en la GPU sin tener que saber mucho acerca de la programación de la GPU.

+0

+1, ¡cosas realmente ordenadas! –

5

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.

1

Hay un buen conjunto básico de construcciones matemáticas con núcleos de cálculo ya escritos a los que se puede acceder a través de pyCUDA cumathmodule. 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 mapa/Reducir kernel para calcular el producto escalar:

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 se escribe el programa para usted. el ReductionKernel es un tipo de núcleo personalizado para las funciones de tipo de mapa/reducción, pero hay diferentes tipos. La porción de ejemplos de la pyCUDA oficial documentation entra en más detalles.

¡Buena suerte!

4

Una biblioteca prometedor es Copperhead (alternative link), sólo tiene que decorar la función que desea que se ejecute por la GPU (y entonces puede optar-en/opt-out para ver qué es lo mejor entre la CPU o GPU para esa función)

+0

El enfoque de decorador tiene mucho sentido. +1 por sugerir eso. – Vangel

0

Scikits CUDA package 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 de matriz numpy.

0

Me preguntaba lo mismo y realicé 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 vídeo pasa a través de la puesta en marcha, un ejemplo inicial y, muy importante, profiliing. 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.

Cuestiones relacionadas