Je cherche à utiliser le GPU pour résoudre certaines équations, mais je ne peux pas comprendre comment y accéder depuis C #. Je sais que les frameworks XNA et DirectX vous permettent d’utiliser des shaders pour accéder au GPU, mais comment puis-je y accéder sans ces frameworks?
Réponses
Trop de publicités?Je n'ai pas fait de C#, mais, fondamentalement, vous utilisez le CUDA (en supposant que vous êtes à l'aide d'une carte nVidia ici, bien sûr) SDK et CUDA toolkit pour le retirer.
nVidia a porté (ou écrit?) un BLAS de mise en œuvre pour une utilisation sur CUDA appareils compatibles. Ils ont fourni de nombreux exemples de la façon de faire de nombreux calculs, bien que vous aurez à comprendre comment vous allez le retirer à partir de C#. Mon pari est que vous allez avoir à écrire des trucs dans géré par les nations unies en C ou C++ et en lien avec elle.
Si vous n'êtes pas accroché sur l'aide de C#, jetez un oeil à Théano. Il pourrait être un peu exagéré pour vos besoins, car ils sont la construction d'un cadre leur permettant de faire l'apprentissage de la machine sur les Gpu de Python, mais ... il fonctionne, et qui fonctionne très bien.
Si votre GPU NVidia, vous pouvez utiliser CUDA.
Il y a un exemple ici, qui expliquent toute la chaîne, y compris certains code C/C++: CUDA intégration avec C#
Et il y a une bibliothèque appelée CUDA.NET disponible ici: CUDA.NET
Si votre GPU d'ATI, alors il est ATI Stream. .NET support est moins clair pour moi sur ce point. Peut-être que l' Open Toolkit Bibliothèque a, par la Prise en charge.
Et enfin, il y a un Microsoft projet de Recherche appelé "Accélérateur" qui a géré wrapper qui devrait fonctionner sur n'importe quel matériel (à condition qu'il prend en charge DirectX 9).
Que diriez-vous de Brahma (LINQ to GPU)?
Je dois aimer LINQ!
J'ai peur que ma connaissance de l'utilisation du GPU est plutôt théorique au-delà de l'écriture de shaders DirectX / XNA et à barboter un peu avec CUDA (NVidia spécifiques). Cependant, j'ai entendu beaucoup de choses sur OpenCL (Open Computing Language) qui permet d'exécuter des algorithmes qui OpenCL intelligemment pousser hors de votre carte graphique, ou de s'exécuter sur le PROCESSEUR si vous n'avez pas compatible GPU.
Le code à exécuter sur le processeur graphique devra être écrit spécifiquement dans OpenCL sous-ensemble de C99 (toutes mes excuses si ce n'est pas répondre à vos reqiurements comme vous l'avez demandé comment l'utiliser à partir de C#), mais au-delà de votre numéro de croquer des algorithmes, vous pouvez écrire le reste de votre application en C# et il ont tous travailler ensemble bien par l'aide de La boîte à outils;
Il y a deux options si vous ne voulez pas salir avec le P/Invoke trucs et code non managé:
- L'utilisation mentionnés CUDA.NET de la bibliothèque. Il fonctionne très bien, mais c'est le ciblage de CUDA, de sorte que seules les cartes nVidia. Si vous souhaitez résoudre des problèmes plus complexes, vous devez apprendre CUDA, écrire votre propre noyau (en C...), le compiler avec nvcc et de l'exécuter à partir de C# via cette bibliothèque.
- Utilisation De Microsoft À La Recherche D'Accélérateur. C'est une belle bibliothèque de construire par la Recherche sur la sp qui exécute votre code sur quelque chose qui a beaucoup de cœurs (many-core nVidia/ATI cartes Graphiques et les processeurs multi-core). Il est complètement indépendant de la plateforme. L'utilise et je suis assez impressionné par les résultats. Il y a aussi un très bon tutoriel sur l'utilisation de l'Accélérateur en C#.
La deuxième option est que je le recommande, mais si vous n'avez pas de problème avec les coller à des Gpu nVidia seulement - la première serait probablement plus rapide.