2009-08-08 8 views
48

Ich habe vor kurzem eine Menge über Software gelesen (meist wissenschaftliche/Mathematik und Verschlüsselung), die einen Teil ihrer Berechnung auf die GPU bewegt, die eine 100-1000 (!) fache Erhöhung der Geschwindigkeit für unterstützte Operationen.C#: Ausführen von Operationen auf GPU, nicht CPU (Pi berechnen)

Gibt es eine Bibliothek, eine API oder eine andere Möglichkeit, etwas über die C# auf der GPU auszuführen? Ich denke an eine einfache Pi-Berechnung. Ich habe eine GeForce 8800 GTX, wenn das überhaupt relevant ist (würde aber eine kartenunabhängige Lösung bevorzugen).

+1

Ich glaube nicht, dass Sie die GPU für eine "einfache Pi-Berechnung" benötigen, es sei denn, Sie tun es Tausende von Malen pro Sekunde ... –

+18

Es geht nicht darum, es zu "brauchen". Ich habe es nur als Beweis für ein Beispiel vorgeschlagen. – Alex

+0

Ah, ich verstehe. Mein Fehler. +1 dann. –

Antwort

19

Es ist eine sehr neue Technologie, aber Sie könnten CUDA untersuchen. Da Ihre Frage mit C# getaggt ist, hier eine .Net wrapper.

Als Bonus scheint es, dass Ihre 8800 GTX CUDA unterstützt.

+1

Ihr Link für den Wrapper ist tot . –

+0

@Alizter - Danke.Ich habe eine Suche durchgeführt und eine neue URL angeschlossen, wenn die Leute danach suchen. –

+0

Verwenden Sie die Alea GPU von www.quantalea.com. Es ist ein vollwertiger .NET zu CUDA Compiler, plattformübergreifend mit sehr guter Entwicklerunterstützung für Debugging und Profiling. – Daniel

8

Sie könnten this question

aussehen wollen, sind Sie vermutlich für Accelerator suchen, aber wenn man in die Entwicklung von Spielen im Allgemeinen interessiert sind werde ich vorschlagen, dass Sie einen Blick auf XNA

+0

Ich hatte davon noch nichts gehört - interessant! Ich mache mir Sorgen, dass es immer noch ein Forschungsprojekt ist. Ist es bereit für kommerzielle Anwendungen? –

+0

Um ganz ehrlich zu sein habe ich es nicht ausprobiert und ich weiß nicht wie stabil es ist. Ich programmiere einige Grafiken und habe sie in meinen Lesezeichen als Referenz für die Zukunft, und es schien einfacher zu sein als CUDA für dieses Problem. – Tchami

+0

Ich habe eine ATI-Karte, vielleicht werde ich Accelerator ausprobieren. –

4

CUDA.NET sollte genau das, was Sie suchen, und es scheint Ihre spezifische Grafikkarte zu unterstützen.

3

Sie können auf die neuesten Direct3D-APIs von .NET zugreifen, indem Sie Windows API Code Pack verwenden. Direct3D 11 kommt mit Compute Shadern. Diese sind in etwa vergleichbar mit CUDA, arbeiten aber auch mit Nicht-NVIDIA-GPUs.

Beachten Sie, dass Managed DirectX und XNA auf den Direct3D 9-Feature-Set beschränkt sind, das für GPGPU etwas schwierig zu verwenden ist.

2

Es gibt eine Reihe von .Net Bindungen für Nvidias CUDA api, es heißt CUDA.net. Sie können sich auf die reference guide beziehen, um einen Beispiel-C# -Code zu betrachten. Die bevorzugte Methode, auf Ihren Co-Prozessor (GPU) zuzugreifen, wäre die Verwendung von OpenCL, so dass Ihr Code mit ATI-Karten übertragbar wäre, aber ich glaube, dass zusätzliche Codierung erforderlich ist und ich nicht sicher bin, wie viel Unterstützung OpenCL unterstützt hat für die .Net-Plattform.

Wenn Sie C++, here's a quick overview verwenden möchten, um eine Beispielcode-Kompilierung mit Visual Studio zu erhalten.

15

Eine andere Option, die für die GPU-Berechnung aus C# nicht erwähnt wurde, ist Brahma.

Brahma bietet eine LINQ-basierte Abstraktion für GPU-Berechnungen - es ist im Grunde LINQ zu GPU. Es funktioniert über OpenGL und DirectX ohne zusätzliche Bibliotheken (erfordert aber SM3). Einige der Beispiele sind ziemlich erstaunlich.