Ausführen von CPU / GPU Anweisungen von verwalteten Code
Frage
Unter Berücksichtigung der Execute Disable Bit, was die empfohlene Methode ist die Ausführung von Befehlen gegen einen nativen Prozessor von einer hohen Niveau verwalteten Umgebung wie VB.NET 2008 oder C #. Darüber hinaus hat jemand erreicht ähnlich GPU Anweisungen gegen einen Grafikprozessor bei der Ausführung?
Lösung
Es gibt ein paar GPU Optionen für C #, für die direkten Zugriff ohne zu P / Invoke zurückkehren oder Ihren eigenen C ++ Wrapper zu schreiben:
- Brahma ist recht interessant. Es bietet Zugriff auf die GPU direkt über eine kundenspezifische LINQ-Anbieter. Der Code enthält einige Beispiele von hochBerechnungsMethoden auf der GPU laufen, die alle in C # über LINQ geschrieben.
- SlimDX bietet eine schöne .NET-Wrapper, um alle der großen DirectX-Funktionalität. Mit benutzerdefinierten Shadern können Sie Berechnung auf der GPU über DirectX zu tun. Es enthält auch DX11-Unterstützung, so dass Sie die Compute Shaders direkt verwenden können (wenn Sie die Hardware dafür haben).
- Sie können CUDA Zugriff über CUDA.NET .
- Sie können OpenCL nutzen über OpenCL.NET .
Wie bei CPU-Anweisungen, würde dies in der Regel fallen erfordert Ebene nativen Code mit Assemblerbefehl zu senken. Wahrscheinlich das interessanteste vollständig verwaltet (zumindest teilweise im Zusammenhang) Option wäre Mono. SIMD , die auf die SIMD-Befehle in der CPU von verwalteten Code direkten Zugriff, wenn sie auf dem Mono-Stack.
Andere Tipps
Es ist keine Option. Sie werden eine Funktion in der DLL zu P / Invoke, die von MASM oder geschrieben in nicht verwalteten C / C ++, mit Inline-Assembler oder intrinsics generiert wurde. Oder verwenden Sie die C ++ / CLI-Compiler und erzeugen Mixed-Mode-Code mit #pragma verwaltet werden.
Beachten Sie, dass Sie jetzt hängen nicht mehr von dem JIT-Compiler Erzeugungs was Plattform-Code für das Betriebssystem geeignet ist. Verwenden Sie Project + Eigenschaften, Registerkarte Build Platform Ziel die Architektur zu zwingen, Ihren nicht verwalteten Code entsprechen.
Blick auf CUDA für verwaltete GPU-Code.
Erstellen Sie nicht verwaltete DLL-Bibliothek mit dem, was Anweisungen, die Sie wollen, und die Verwendung P / Invoke es zu nennen.