web-dev-qa-db-fra.com

C #: effectuer des opérations sur le GPU, pas sur le processeur (Calculate Pi)

J'ai récemment lu beaucoup de choses sur les logiciels (principalement scientifiques/mathématiques et liés au cryptage) qui transfèrent une partie de leurs calculs sur le GPU, ce qui multiplie par 100 la vitesse des opérations prises en charge.

Existe-t-il une bibliothèque, une API ou un autre moyen d'exécuter quelque chose sur le GPU via C #? Je pense au calcul simple de Pi. J'ai une GeForce 8800 GTX si cela est pertinent (je préférerais une solution indépendante de la carte).

49
Alex

C'est une technologie très nouvelle, mais vous pourriez étudier CUDA . Puisque votre question est étiquetée avec C #, voici un wrapper .Net .

En prime, il semble que votre 8800 GTX prenne en charge CUDA.

20
Charlie Salts

Une autre option qui n’a pas été mentionnée pour le calcul de GPU à partir de C # est Brahma .

Brahma fournit une abstraction basée sur LINQ pour les calculs de GPU - il s’agit essentiellement de LINQ à GPU. Cela fonctionne sur OpenGL et DirectX sans bibliothèques supplémentaires (mais nécessite SM3). Certains échantillons sont assez étonnants.

16
Reed Copsey

Vous voudrez peut-être regarder cette question

Vous recherchez probablement Accelerator , mais si le développement de jeux en général vous intéresse, je vous suggère de jeter un coup d'œil à XNA.

8
Tchami

CUDA.NET devrait correspondre exactement à ce que vous recherchez et semble prendre en charge votre carte graphique spécifique.

4
Michael Borgwardt

Vous pouvez accéder aux dernières API Direct3D à partir de .NET à l'aide de Windows API Code Pack . Direct3D 11 est livré avec Compute Shaders. Celles-ci sont à peu près comparables à CUDA, mais fonctionnent également sur des GPU non-NVIDIA. 

Notez que Managed DirectX et XNA sont limités à l'ensemble de fonctionnalités de Direct3D 9, ce qui est un peu difficile à utiliser pour GPGPU.

3
Malte Clasen

Il existe un ensemble de liaisons .Net pour l'API CUDA de Nvidia, appelé CUDA.net . Vous pouvez vous référer au guide de référence pour consulter un exemple de code C #. 

Le moyen privilégié pour accéder à votre co-proccesor (GPU) serait d'utiliser OpenCL pour que votre code soit portable avec des cartes ATI, mais je pense qu'un codage supplémentaire est peut-être nécessaire et je ne sais pas dans quelle mesure OpenCL prend en charge a pour la plate-forme .Net.

Si vous souhaitez utiliser C++, voici un aperçu rapide sur la façon de compiler un exemple de code avec Visual Studio. 

2
Darwyn

FYI: Accelerator ( http://research.Microsoft.com/en-us/projects/Accelerator/ ) fonctionnait bien pour quelques tests.

0
Alex