Puis-je programme Nvidia CUDA en utilisant uniquement Python ou dois-je apprendre le C?
Je suppose que la question parle de lui-même. Je suis intéressé à faire une grave calculs mais je ne suis pas un programmeur de métier. Je peux chaîne assez python ensemble pour faire ce que je veux. Mais ce que je peux écrire un programme en python et ont le GPU de l'exécuter à l'aide de CUDA? Ou dois-je utiliser un mélange de python et C?
Les exemples de la Klockner s (sp) "pyCUDA" page web a un mélange des deux, en python et en C, donc je ne sais pas quelle est la réponse.
Si quelqu'un veut le carillon sur Opencl, n'hésitez pas. J'ai entendu parler de cette CUDA, uniquement un couple de semaines, et je ne savais pas que vous pourriez utiliser vos cartes vidéo de ce genre.
- Je suppose que vous pourriez avoir une bibliothèque python qui prend le code écrit dans un sous-ensemble de Python et compile en PTX instructions qui peuvent être envoyées pour le conducteur avec l'API CUDA. Certaines des approches de la programmation sur GPU en Haskell prend cette approche. Vous ne savez pas si c'est l'été n'en Python et pourtant,
Vous devez vous connecter pour publier un commentaire.
Vous devriez jeter un oeil à CUDAmat et Théano. Les deux sont des approches de l'écriture de code qui s'exécute sur le GPU sans vraiment avoir d'en savoir beaucoup sur la programmation sur GPU.
Je crois que, avec PyCUDA, votre de calcul de noyaux de toujours être écrit "CUDA C Code". PyCUDA prend en charge beaucoup d'ailleurs fastidieux de comptabilité, mais ne construit pas de calcul CUDA grains de code Python.
pyopencl propose une alternative intéressante à PyCUDA. Il est décrit comme une "sœur du projet" PyCUDA. C'est un complète wrapper autour de l'API OpenCL.
Comme je le comprends, OpenCL a l'avantage de fonctionner sur des Gpu au-delà de Nvidia.
De grandes réponses déjà, mais une autre option est Clyther. Il vous permettra d'écrire OpenCL programmes sans même l'aide de C, par la constitution d'un sous-ensemble de Python en OpenCL noyaux.
Prometteur de la bibliothèque est Copperhead (lien alternatif), vous avez juste besoin pour décorer la fonction que vous voulez être géré par le GPU (et puis vous pouvez opt-in /opt-out, c'est pour voir ce qui est le mieux entre le cpu ou le gpu pour cette fonction)
Il y a un bon set de base des mathématiques, avec des constructions de calculer les noyaux déjà écrit qui peut être consulté par le biais de pyCUDA de
cumath
module. Si vous voulez faire plus impliqué ou spécifiques/custom trucs que vous avez à écrire une touche de C dans le noyau de la définition, mais la bonne chose à propos pyCUDA c'est qu'il va faire le gros du C-levage pour vous; il fait beaucoup de méta-programmation sur le back-end afin que vous n'avez pas à vous soucier de sérieux de la programmation en C, juste le petit morceaux. L'un des exemples donnés est une Map/reduce noyau de calculer le produit scalaire:dot_krnl = ReductionKernel(np.float32, neutral="0",
reduce_expr="a+b",
map_expr="x[i]*y[i]",
arguments="float *x, float *y")
Les petits bouts de code à l'intérieur de chacun de ces arguments sont des lignes C, mais il écrit en fait le programme pour vous. le
ReductionKernel
est un noyau de type map/reducish type de fonctions, mais il existe différents types. Les exemples de la partie officielle de la pyCUDA la documentation va plus dans le détail.Bonne chance!
Scikits CUDA paquet pourrait être une meilleure option, à condition qu'il ne nécessite pas de faible niveau de connaissances ou de code C pour toute opération qui peut être représenté comme un tableau numpy de manipulation.
Je me demandais la même chose et effectué quelques recherches. J'ai trouvé l'article en lien ci-dessous qui semble répondre à votre question. Cependant, vous avez demandé à ce retour en 2014 et la Nvidia article n'est pas d'avoir une date.
https://developer.nvidia.com/how-to-cuda-python
La vidéo passe par la mise en place, un premier exemple et, très important, profiliing. Cependant, je ne sais pas si vous pouvez mettre en œuvre tous les généraux de calcul des modèles. Je pense que vous le pouvez parce que d'aussi loin que je le pouvais il n'y a pas de limitations dans NumPy.