Der Zweck des Spiralskripts ist es, ein computergeneriertes Bild zu erstellen. Das Bild kartiert mit CUDA -Unterstützung zu GPUs.
Im Folgenden sind Beispiele für Bilder, die mit dem Python -Skript erstellt wurden. Ihre Konfigurationsdetails finden Sie im Ordner Beispiele mit anderen Beispielen.
Um das Python -Skript auszuführen, müssen die folgenden Abhängigkeiten installiert werden:
Bei nacheinander auf einem Intel i7-9700K ausgeführter Bild dauert jedes Bild ungefähr 23,5877081 Sekunden.
Der erste Schritt zur Optimierung des CGI -Algorithmus bestand darin, den Algorithmus für die parallele Verwendung der GPU zu rekonstruieren. Dies geschah mit dem @cuda.jit -Dekorator, der Kernel -Aufruf erfordert. Bevor der Algorithmus ausgeführt wird, stellt der Code fest, wie ein Pixel -Array auf der GPU -Hardware zugeordnet wird. Im Algorithmus werden Schleifen zur Berechnung jedes Pixels durch i, j = cuda.grid(2) ersetzt. Wenn i und j innerhalb der Grenzen des Bildes liegen, berechnet die Funktion die Pixelfarbe des Index. Keine Schleifen. Die Beschleunigung der Parallelisierung beträgt rund 1.072 und dauert ungefähr 22,1124 Millisekunden.
Nach dem nvprof CLI -Tool (in Optimierungen.TXT) macht [CUDA memcpy HtoD] ungefähr 36.09% der Ausführung aus. Um dies zu umgehen, kann das Pixelarray auf dem Gerät erstellt und initialisiert werden, ohne jemals im CPU-Side-Speicher hinzugefügt zu werden. numba.cuda bietet dazu ein device_array . Die Beschleunigung der Minimierung der Übertragung von Host-to-Device-Übertragungen beträgt etwa 1,38 und dauert ungefähr 15,9563 Millisekunden.
Die nächste Optimierung verwendet gemeinsamer Speicher, Speicher, den ein Thread -Block nimmt. Da der Speicher blockspezifisch ist, sind die Geschwindigkeiten von Lesen und Schreiben schneller. Daher können Speicherzugriffsvorgänge im gemeinsamen Speicher berechnet werden. Nach dem Vorgang vervollständigt ein langsamer Zugriff auf das globale Pixel -Array die parallelisierte Berechnung. Die Beschleunigung der gemeinsamen Speicherverwendung beträgt ca. 1,068 und dauert ungefähr 14,9425 Millisekunden.
Die Gesamt -Beschleunigung vom CPU -Algorithmus zum optimierten GPU -Algorithmus beträgt ungefähr 1.578.