J'essaie d'obtenir plus de puissance de traitement de mon réseau.
J'utilise tous les cpus / cœurs, est-il possible d'utiliser le GPU avec C #.
Quelqu'un connaît des bibliothèques ou a un exemple de code?
[ Modifier OCT 2017 car même cette réponse devient assez ancienne ]
La plupart de ces réponses sont assez anciennes, alors j'ai pensé donner un résumé mis à jour de l'endroit où je pense que chaque projet est:
GPU.Net (TidePowerd) - J'ai essayé cela il y a environ 6 mois, et je l'ai fait fonctionner même si cela a pris un peu de travail. Convertit le code du noyau C # en cuda au moment de la compilation. Malheureusement, leur site Web est en panne et leur github n'a pas été mis à jour depuis quelques années, ce qui pourrait indiquer que le projet est mort ...
Cudafy - Open source et très facile à utiliser. Convertit le code du noyau C # en cuda au moment de l'exécution (avec possibilité de sérialisation et de cache). Peut facilement exécuter le même code de noyau sur le processeur (principalement pour le débogage). Prend en charge plusieurs GPU. Plus d'exemples disponibles que d'autres ici. Le code standard auquel font référence d'autres réponses est minime et, dans mon cas, m'a au moins aidé à comprendre comment le code fonctionne. Cuda / Nvidia seulement cependant. Malheureusement, il semble qu'ils n'aient pas mis à jour leurs solutions depuis quelques années également (dernier commit en 2015 - support de cuda 7.0).
Hybridizer . Solution commerciale compilant C # vers CUDA. Fournit une édition communautaire gratuite sur le marché de Visual Studio et des échantillons sur github .
AleaGPU commerciale avec une édition communautaire gratuite pour les GPUS grand public. Voir les commentaires de Daniel pour plus de détails.
Brahma - exécute les expressions LINQ via OpenCL (prend donc également en charge AMD). Pas beaucoup de documentation / d'exemples. Dernière mise à jour en 2011.
C $ - le dernier développement remonte à plus de 10 ans ...
Microsoft Accelerator - de même, ne semble plus être activement développé.
d'autres ( C ++ AMP , OpenTK - dead / Cloo ) - beaucoup d'entre eux ne sont que des liaisons - c'est-à-dire vous permettent d'appeler le GPU à partir de C #, mais votre code noyau (code qui est en fait exécuté sur le GPU) doit être écrit en C ou OpenCL, ce qui signifie que vous devez utiliser (et apprendre) une autre langue.
Comme je l'ai dit, je recommanderais Cudafy à tous les autres - s'il pouvait fonctionner aussi bien sur OpenCL que sur Cuda, ce serait parfait.
EDIT septembre 2013 Cudafy vous permet maintenant de compiler pour les deux CUDA et OpenCL, donc va exécuter le même code C # sur tous les processeurs graphiques. Cela semble fantastique, même si je n'ai pas encore testé la compilation OpenCL.
Microsoft Research Accelerator était une bibliothèque GPU .NET.
la source
J'ai trouvé Brahma ... Il a également un fournisseur GPGPU qui permet aux méthodes de fonctionner sur le GPU ... Merci pour la question ... J'ai appris quelque chose de nouveau aujourd'hui. :)
la source
Puis-je recommander XNA Game Studio comme piste d'exploration possible? Il est évidemment conçu pour l'écriture de jeux, mais vous donne un accès géré à votre carte graphique et un accès bien meilleur aux fonctions d'énumération des capacités et au développement de shaders que ce qui était auparavant disponible dans, par exemple, Managed DirectX. Il existe également des moyens de combiner WinForms et XNA dans des applications hybrides:
http://www.ziggyware.com/news.php?readmore=866
Vous devrez faire des efforts pour apprendre la programmation des shaders (XNA prend en charge HLSL), mais cela peut être une approche plus simple que d'apprendre une solution spécifique au fournisseur telle que CUDA de nVidia. L'avantage est que vous pouvez programmer dans un environnement 100% géré. Voici quelques liens HLSL:
http://www.ziggyware.com/weblinks.php?cat_id=9
Le site GPGPU est également une destination recommandée pour la programmation GPU à usage général:
http://gpgpu.org/
Bonne chance!
la source
Que diriez-vous de http://www.tidepowerd.com/ GPU.NET?
la source
En voici un autre: CUDAfy . Cela ressemble à GPU.Net, dans la mesure où quelque chose d'aussi simple qu'un attribut de méthode peut entraîner l'exécution de la méthode entière sur le GPU. Mais contrairement à GPU.Net, CUDAfy est gratuit et open source.
GPU.Net semble ne nécessiter aucun code standard, cependant (selon leur documentation, il est "injecté automatiquement par l'outil de construction") , contrairement à CUDAfy.
Voici un exemple de construction d'une application avec CUDAfy.
la source
Eh bien, c'est une question assez ancienne, et depuis qu'elle a été posée, les choses ont beaucoup changé.
Une autre option pour utiliser .Net pour écrire du code GPU, que personne n'a mentionné dans les réponses dans Alea GPU . Il couvre C #, F # et VB.
Sur le site officiel F #, Alea est la première option pour utiliser F # dans la programmation GPGPU.
Pour apprendre à connaître ce cadre, je suggère de jeter un coup d'œil à sa liste complète d' exemples .
la source
En plus de Brahma, jetez un œil à C $ (prononcé "C Bucks"). Depuis leur site CodePlex :
Il est basé sur C #, évalué paresseusement et cible plusieurs modèles d'accélérateur:
la source
Il y a une nouvelle solution Microsoft en ville - C ++ AMP (intro ici ).
L'utilisation à partir de C # se ferait via P / Invoke, comme démontré ici pour les applications de bureau, et ici pour les applications Metro (ne l'appelez pas).
Edit: Je dois noter que C ++ AMP a une spécification ouverte , ce qui signifie que ce n'est pas nécessairement juste pour le compilateur MS, ou juste pour Windows.
Edit: Apparemment, la technologie est maintenant en "mode maintenance", ce qui signifie qu'ils corrigent des bogues, mais ne se développent pas activement.
la source
DirectX géré d'une manière ou d'une autre, pourrait fonctionner
la source
Si vos GPU sont tous de la même marque, vous pourrez peut-être obtenir le support GPGPU du fournisseur, soit via le CUDA de Nvidia ou le Stream d'ATI. AFAIK, ils fournissent des DLL, que vous pouvez utiliser via P / Invoke.
la source
CenterSpace Software a des calculs alimentés par GPU dans leurs bibliothèques NMath que vous pouvez ajouter au projet C #. C'est un produit commercial.
la source
Si vous allez appliquer vos propres algorithmes nécessitant des noyaux personnalisés:
J'ai récemment téléchargé un de mes projets open source dans ce référentiel github qui utilise OpenCL.
Ce qu'il fait (vous pouvez également vérifier à partir de sa page wiki) est de sélectionner plusieurs périphériques compatibles OpenCL et une chaîne de noyau de l'utilisateur et de créer des wrappers de tableau C # ou C ++, puis de calculer en utilisant tous, avec l'aide d'un équilibreur de charge automatique et d'un pipeliner (pour masquer les latences) pour obtenir une bonne efficacité du pc.
Voici un exemple de son utilisation (1024 éléments de travail partitionnés sur tous les périphériques, chacun exécutant le même code mais utilisant des données et un threadId différents):
quand tous ne sont plus utilisés, ils libèrent toutes les ressources C ++ avec leurs destructeurs.
Mais ce n'est pas si mature, alors n'hésitez pas à ajouter n'importe quel "problème" sur l'onglet Problèmes de github. Les classes pertinentes multi-pc-cluster ne fonctionnent pas et ne sont pas encore traduites en anglais, mais elles peuvent au moins utiliser tous les périphériques sur un seul PC.
la source
WPF utilise également le GPU et vous pouvez ajouter des shaders personnalisés à l'aide de HLSL.
la source