Ich versuche, mehr Rechenleistung aus meinem Netz herauszuholen.
Ich verwende alle CPUs / Kerne, ist es möglich, die GPU mit C # zu verwenden.
Kennt jemand Bibliotheken oder hat einen Beispielcode?
[ Bearbeiten Sie das OKT 2017, da selbst diese Antwort ziemlich alt wird ]
Die meisten dieser Antworten sind ziemlich alt, daher dachte ich, ich würde eine aktualisierte Zusammenfassung darüber geben, wo sich meines Erachtens jedes Projekt befindet:
GPU.Net (TidePowerd) - Ich habe es vor ungefähr 6 Monaten versucht und es zum Laufen gebracht, obwohl es ein wenig Arbeit gekostet hat. Konvertiert C # -Kernel-Code zur Kompilierungszeit in Cuda. Leider ist ihre Website nicht verfügbar und ihr Github wurde seit einigen Jahren nicht mehr aktualisiert, was darauf hindeuten könnte, dass das Projekt tot ist.
Cudafy - Open Source und sehr einfach zu bedienen. Konvertiert C # -Kernel-Code zur Laufzeit in Cuda (mit der Möglichkeit, zu serialisieren und zwischenzuspeichern). Kann problemlos denselben Kernel-Code auf der CPU ausführen (hauptsächlich zum Debuggen). Unterstützt mehrere GPUs. Mehr Beispiele als andere hier. Der Boilerplate-Code, auf den in anderen Antworten verwiesen wird, ist minimal und hat in meinem Fall zumindest zu meinem Verständnis der Funktionsweise des Codes beigetragen. Nur Cuda / Nvidia. Leider scheinen sie ihre Lösungen auch einige Jahre lang nicht aktualisiert zu haben (letztes Commit im Jahr 2015 - Unterstützung von cuda 7.0).
Hybridisierer . Kommerzielle Lösung zum Kompilieren von C # zu CUDA. Bietet eine kostenlose Community-Edition auf dem Visual Studio-Marktplatz und Beispiele auf Github .
AleaGPU Commercial-Lösung mit einer kostenlosen Community-Edition für Consumer-GPUS. Siehe Daniels Kommentare für Details.
Brahma - führt LINQ-Ausdrücke über OpenCL aus (unterstützt also auch AMD). Nicht viel Dokumentation / Beispiele. Letztes Update im Jahr 2011.
C $ - letzte Entwicklung war vor über 10 Jahren ...
Microsoft Accelerator - sieht ebenfalls nicht so aus, als würde es nicht mehr aktiv entwickelt.
einige andere ( C ++ AMP , OpenTK - dead / Cloo ) - viele davon sind nur Bindungen - dh Sie können die GPU von C # aus aufrufen, aber Ihr Kernel-Code (Code, der tatsächlich auf der GPU ausgeführt wird) muss geschrieben werden C oder OpenCL, dh Sie müssen eine andere Sprache verwenden (und lernen).
Wie gesagt, ich würde Cudafy allen anderen empfehlen - wenn es sowohl auf OpenCL als auch auf Cuda laufen könnte, wäre es perfekt.
EDIT SEP 2013 Mit Cudafy können Sie jetzt sowohl für CUDA als auch für OpenCL kompilieren , sodass auf allen GPUs derselbe C # -Code ausgeführt wird. Das klingt fantastisch, obwohl ich die OpenCL-Kompilierung noch nicht getestet habe.
Microsoft Research Accelerator war eine .NET GP-GPU-Bibliothek.
quelle
Ich habe Brahma gefunden ... Es gibt auch einen GPGPU-Anbieter, mit dem Methoden auf der GPU ausgeführt werden können ... Danke für die Frage ... Ich habe heute etwas Neues gelernt. :) :)
quelle
Könnte ich XNA Game Studio als möglichen Weg zur Erkundung empfehlen? Es ist offensichtlich auf das Schreiben von Spielen ausgerichtet, bietet Ihnen jedoch einen verwalteten Zugriff auf Ihre Grafikkarte und einen viel besseren Zugriff auf Funktionen zur Aufzählung von Funktionen und zur Entwicklung von Shadern als dies beispielsweise in Managed DirectX bisher möglich war. Es gibt auch Möglichkeiten, WinForms und XNA zu Hybridanwendungen zu kombinieren:
http://www.ziggyware.com/news.php?readmore=866
Sie müssen einige Anstrengungen unternehmen, um die Shader-Programmierung zu erlernen (XNA unterstützt HLSL). Dies ist jedoch möglicherweise einfacher als das Erlernen einer herstellerspezifischen Lösung wie der CUDA von nVidia. Der Vorteil ist, dass Sie in einer zu 100% verwalteten Umgebung programmieren können. Hier sind einige HLSL-Links:
http://www.ziggyware.com/weblinks.php?cat_id=9
Die GPGPU-Site ist auch ein empfohlenes Ziel für die allgemeine GPU-Programmierung:
http://gpgpu.org/
Viel Glück!
quelle
Wie wäre es mit http://www.tidepowerd.com/ GPU.NET?
quelle
Hier ist noch einer: CUDAfy . Es klingt wie GPU.Net, da etwas so Einfaches wie ein Methodenattribut dazu führen kann, dass die gesamte Methode auf der GPU ausgeführt wird. Im Gegensatz zu GPU.Net ist CUDAfy jedoch kostenlos und Open Source.
GPU.Net scheint jedoch keinen Boilerplate-Code zu benötigen (laut Dokumentation wird es "automatisch vom Build-Tool injiziert") , während CUDAfy dies tut.
Hier ist ein Beispiel für das Erstellen einer Anwendung mit CUDAfy.
quelle
Nun, das ist eine ziemlich alte Frage, und seitdem sie gestellt wurde, haben sich die Dinge sehr verändert.
Eine weitere Option für die Verwendung von .Net zum Schreiben von GPU-Code, den niemand in den Antworten in Alea GPU erwähnt hat . Es umfasst C #, F # und VB.
Auf der offiziellen F # -Seite ist Alea die erste Option für die Verwendung von F # in der GPGPU-Programmierung.
Um dieses Framework kennenzulernen, schlage ich vor, einen Blick auf die umfassende Liste der Beispiele zu werfen .
quelle
Schauen Sie sich neben Brahma auch C $ an (ausgesprochen "C Bucks"). Von ihrer CodePlex- Site :
Es basiert auf C #, wird träge ausgewertet und zielt auf mehrere Beschleunigermodelle ab:
quelle
Es gibt eine neue Microsoft-Lösung in der Stadt - C ++ AMP (Einführung hier ).
Die Verwendung von C # erfolgt über P / Invoke, wie hier für Desktop-Apps und hier demonstriert für Metro-Apps (nicht anrufen) demonstriert.
Bearbeiten: Ich sollte beachten, dass C ++ AMP eine offene Spezifikation hat , was bedeutet, dass es nicht unbedingt nur für den MS-Compiler oder nur für Windows ist.
Bearbeiten: Anscheinend befindet sich die Technologie jetzt im "Wartungsmodus", was bedeutet, dass sie Fehler behebt, sich aber nicht aktiv entwickelt.
quelle
Managed DirectX könnte irgendwie funktionieren
quelle
Wenn Ihre GPUs alle von derselben Marke sind, können Sie möglicherweise GPGPU-Unterstützung vom Anbieter erhalten, entweder über Nvidias CUDA oder ATIs Stream. AFAIK bieten DLLs, die Sie über P / Invoke verwenden können.
quelle
Die CenterSpace-Software verfügt über GPU- basierte Berechnungen in ihren NMath- Bibliotheken, die Sie dem C # -Projekt hinzufügen können. Es ist ein kommerzielles Produkt.
quelle
Wenn Sie Ihre eigenen Algorithmen anwenden möchten, die benutzerdefinierte Kernel benötigen:
Ich habe kürzlich ein Open-Source-Projekt von mir in dieses Github-Repository hochgeladen , das OpenCL verwendet.
Was es tut (Sie können es auch auf seiner Wiki-Seite überprüfen), ist, mehrere OpenCL-fähige Geräte und eine Kernel-Zeichenfolge vom Benutzer auszuwählen und C # - oder C ++ - Array-Wrapper zu erstellen, die dann mithilfe eines automatischen Load-Balancers und eines mit all berechnet werden Pipeliner (um Latenzen zu verbergen), um eine gute Effizienz des PCs zu erzielen.
Hier ist ein Beispiel für seine Verwendung (1024 Workitems, die auf alle Geräte verteilt sind und jeweils denselben Code ausführen, jedoch unterschiedliche Daten und Thread-IDs verwenden):
Wenn alle nicht mehr verwendet werden, geben sie alle C ++ - Ressourcen mit ihren Destruktoren frei.
Aber es ist nicht so ausgereift, also zögern Sie nicht, ein "Problem" auf der Registerkarte "Github-Probleme" hinzuzufügen. Multi-PC-Cluster-relevante Klassen funktionieren nicht und sind noch nicht ins Englische übersetzt, können jedoch mindestens alle Geräte in einem einzigen PC verwenden.
quelle
WPF verwendet auch die GPU und Sie können benutzerdefinierte Shader mit HLSL hinzufügen.
quelle