Frage: Gibt es einen Emulator für eine Geforce-Karte, mit dem ich CUDA ohne die eigentliche Hardware programmieren und testen kann?
Die Info:
Ich möchte einige meiner Simulationen in CUDA beschleunigen, aber mein Problem ist, dass ich für diese Entwicklung nicht immer auf meinem Desktop bin. Ich möchte stattdessen etwas an meinem Netbook arbeiten, aber mein Netbook hat keine GPU. Soweit ich weiß, benötigen Sie eine CUDA-fähige GPU, um CUDA ausführen zu können. Gibt es eine Möglichkeit, dies zu umgehen? Es scheint, als wäre der einzige Weg ein GPU-Emulator (der offensichtlich schmerzhaft langsam wäre, aber funktionieren würde). Aber wie auch immer es geht, ich würde gerne hören.
Ich programmiere auf Ubuntu 10.04 LTS.
Antworten:
Für diejenigen, die die Antwort im Jahr 2016 (und sogar 2017) suchen ...
Haftungsausschluss
gpuocelot
wenn Sie die Liste der Abhängigkeiten erfüllen.Ich habe versucht, einen Emulator für BunsenLabs zu bekommen (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (29.02.2016) i686 GNU / Linux).
Ich werde dir sagen, was ich gelernt habe.
nvcc
Früher gab es-deviceemu
in CUDA Toolkit 3.0 eine OptionIch habe CUDA Toolkit 3.0 heruntergeladen, installiert und versucht, ein einfaches Programm auszuführen:
Beachten Sie, dass in CUDA Toolkit 3.0
nvcc
in der/usr/local/cuda/bin/
.Es stellte sich heraus, dass ich Schwierigkeiten beim Kompilieren hatte:
Ich habe im Internet festgestellt, dass bei Verwendung
gcc-4.2
oder ähnlich alten anstellegcc-4.9.2
der Fehler verschwinden könnten. Ich gab auf.gpuocelot
Die Antwort von Stringer enthält einen Link zu einer sehr alten
gpuocelot
Projektwebsite. Also dachte ich zuerst, dass das Projekt 2012 oder so aufgegeben wurde. Eigentlich wurde es einige Jahre später aufgegeben.Hier sind einige aktuelle Websites:
Ich habe versucht, gpuocelot gemäß der Anleitung zu installieren . Ich hatte jedoch einige Fehler während der Installation und gab wieder auf.
gpuocelot
wird nicht mehr unterstützt und hängt von einer Reihe sehr spezifischer Versionen von Bibliotheken und Software ab.Sie könnten versuchen, diesem Tutorial ab Juli 2015 zu folgen , aber ich kann nicht garantieren, dass es funktioniert. Ich habe es nicht getestet.
MCUDA
Es könnte nützlich sein. Hier ist ein Link zur Website .
CUDA-Abfall
Es ist ein Emulator für Windows 7 und 8. Ich habe es jedoch nicht ausprobiert. Es scheint nicht mehr entwickelt zu sein (das letzte Commit ist am 4. Juli 2013 datiert).
Hier ist der Link zur Website des Projekts: https://code.google.com/archive/p/cuda-waste/
CU2CL
Letzte Aktualisierung: 12.03.2017
Wie Bindestrich in den Kommentaren hervorhob, scheint CU2CL ein interessantes Projekt zu sein. Es scheint in der Lage zu sein, CUDA-Code in OpenCL-Code zu übersetzen . Wenn Ihre GPU OpenCL-Code ausführen kann, ist das CU2CL-Projekt möglicherweise von Interesse.
Links:
quelle
nvcc -deviceemu
CUDA Waste
ArbeitCU2CL
ArbeitDiese Antwort mag zu spät sein, aber es ist trotzdem erwähnenswert. GPU Ocelot ( von dem ich einer der Hauptverantwortlichen bin ) kann ohne installierte CUDA-Gerätetreiber (libcuda.so) kompiliert werden, wenn Sie das Emulator- oder LLVM-Backend verwenden möchten. Ich habe den Emulator auf Systemen ohne NVIDIA-GPUs demonstriert.
Der Emulator versucht, die PTX 1.4- und PTX 2.1-Spezifikationen, die möglicherweise Funktionen enthalten, die ältere GPUs nicht unterstützen, genau zu implementieren. Der LLVM-Übersetzer strebt eine korrekte und effiziente Übersetzung von PTX nach x86 an, die CUDA hoffentlich zu einer effektiven Methode zur Programmierung von Multicore-CPUs und GPUs macht.
-deviceemu
ist seit geraumer Zeit ein veraltetes Feature von CUDA, aber der LLVM-Übersetzer war immer schneller.Darüber hinaus sind mehrere Korrektheitsprüfer in den Emulator integriert, um Folgendes zu überprüfen: Ausgerichtete Speicherzugriffe, Zugriffe auf gemeinsam genutzten Speicher werden ordnungsgemäß synchronisiert und globale Speicher-Dereferenzierungszugriffe auf zugewiesene Speicherbereiche. Wir haben auch eine implementiert interaktiven Befehlszeilen-Debugger der weitgehend von GDB inspiriert ist, um CUDA-Kernel in einem Schritt zu durchlaufen, Haltepunkte und Überwachungspunkte festzulegen usw. Diese Tools wurden speziell entwickelt, um das Debuggen von CUDA-Programmen zu beschleunigen. Sie können sie nützlich finden.
Entschuldigung für den Nur-Linux-Aspekt. Wir haben einen Windows-Zweig gestartet ( sowie einen Mac OS X-Port ) eingerichtet, aber der technische Aufwand ist bereits groß genug, um unsere Forschungsaktivitäten zu belasten. Wenn jemand Zeit und Interesse hat, kann er uns helfen, Windows zu unterstützen!
Hoffe das hilft.
quelle
Sie können auch gpuocelot überprüfen Projekt , das ein echter Emulator in dem Sinne ist, dass PTX (Bytecode, in den CUDA-Code konvertiert wird) emuliert wird.
Es gibt auch einen LLVM-Übersetzer. Es wäre interessant zu testen, ob es schneller ist als bei Verwendung von -deviceemu.
quelle
In das CUDA-Toolkit war bis zum CUDA 3.0-Release-Zyklus eines integriert. Wenn Sie eine dieser sehr alten Versionen von CUDA verwenden, stellen Sie sicher, dass Sie beim Kompilieren mit nvcc -deviceemu verwenden.
quelle
Mit https://github.com/hughperkins/cuda-on-cl können Sie NVIDIA® CUDA ™ -Programme auf OpenCL 1.2-GPUs ausführen (vollständige Offenlegung: Ich bin der Autor).
quelle
Seien Sie vorsichtig, wenn Sie mit -deviceemu programmieren, da es Vorgänge gibt, die nvcc im Emulationsmodus akzeptiert, jedoch nicht, wenn sie tatsächlich auf einer GPU ausgeführt werden. Dies tritt hauptsächlich bei der Interaktion zwischen Gerät und Host auf.
Und wie Sie bereits erwähnt haben, bereiten Sie sich auf eine langsame Ausführung vor.
quelle
GPGPU-Sim ist ein GPU-Simulator, der CUDA-Programme ohne Verwendung einer GPU ausführen kann. Ich habe ein Docker-Image mit GPGPU-Sim erstellt, das für mich installiert ist, falls dies hilfreich ist.
quelle