it-swarm.com.de

Ist es möglich, die GPU-Beschleunigung zum Kompilieren mehrerer Programme auf einem GCC-Compiler zu verwenden?

Gibt es eine Möglichkeit oder ein Tool, um die GPU-Beschleunigung beim Kompilieren von Programmen mit dem GCC-Compiler anzuwenden? Im Moment habe ich ein Programm erstellt, um die angegebene Liste der Programme iterativ zu kompilieren. Es dauert einige Minuten. Ich kenne einige Programme wie Pyrit, mit denen sich die GPU-Beschleunigung für das Precomputing von Hashes anwenden lässt.

Wenn solche Tools nicht verfügbar sind, geben Sie bitte an, ob Sie OpenCL oder etwas anderes verwenden möchten, um meinen Code neu zu programmieren.

48
clu3Less

WENN Sie fragen: "Können Sie automatisch GPU-beschleunigten Code für die Verwendung mit GCC und LLVM schreiben?" Die Antwort ist ja. NVIDIA und Google erstellen Open-Source-LLVM-basierte Compiler-Projekte:

NVIDIA CUDA LLVM:

GOOGLE GPUCC:

Wenn Ihre Frage lautet: "Kann ich die GPU verwenden, um die generische Codekompilierung ohne CUDA zu beschleunigen?" Die Antwort ist derzeit nein. Die GPU ist gut in bestimmten Dingen wie parallelen Aufgaben, schlecht in anderen wie Zweigen, um die es bei Compilern geht. Die gute Nachricht ist, dass Sie ein Netzwerk von PCs mit CPUs verwenden können, um 2-10-fache Kompilierungsgeschwindigkeit zu erzielen, je nachdem, wie optimiert Ihr Code bereits ist, und dass Sie die schnellste Multi-Core-CPU und Hochgeschwindigkeits-SSD erhalten, die für Ihren Desktop verfügbar ist So erhalten Sie Gewinne für weniger Ärger, bevor Sie auf Netzwerk-Builds zurückgreifen.

Es gibt Tools zum Verteilen von C/C++/ObjC-Compiler-Tasks auf ein Netzwerk von Computern wie Distcc. Es war in älteren Versionen von XCode enthalten, wurde jedoch entfernt und kann nicht mit Swift verwendet werden.

Es gibt ein kommerzielles Tool, das Distcc ähnelt und Incredibuild heißt und Visual Studio C/C++ und Linux-Entwicklungsumgebungen unterstützt:

Es gibt einige gute Artikel über die reale Verwendung von Incredibuild vs Distcc und Kompromisse im Vergleich zur inkrementellen Build-Unterstützung im nativen Compiler, um kleine Änderungen wie eine einzelne Zeile in einer einzelnen Datei vorzunehmen, ohne alles andere neu zu kompilieren. Was zu beachten ist:

  • Sie können eine Codebasis erheblich beschleunigen, indem Sie Header vorkompilieren, mehrere DLLs verwenden und inkrementelle Builds auf einem einzelnen Computer verwenden.
  • Incredibuild ist eine umfassendere Lösung für die automatische Verteilung von Arbeit und die Gewährleistung des gleichen Ergebnisses wie eine serielle Kompilierung, im Gegensatz zu der kostenlosen Ausführung mit distcc, bei der Sie viel mehr Arbeit für die gleichen Ergebnisse und die Kompatibilität mit anderen Komponenten als gcc leisten müssen.
  • Eine ausführliche Übersicht finden Sie unter http://gamesfromwithin.com/how-incredible-is-incredibuild
13
Alex Peake