SplashTool_GPU

Nvidia RTX 3090 (Quelle)

Die Geschwindigkeitsoptimierungen der CPU-basierten Variante mit reinem numpy sind mittlerweile weitgehend ausgereizt. Einzelne Optimierungen wären noch mit numba möglich, jedoch sind auch hier aufgrund der Beschränkungen der Hardware Grenzen gesetzt. Die Mathematikbibliotheken von numpy sind bereits stark optimiert, sodass der aktuelle Flaschenhals das Lesen und Schreiben der Daten aus dem Arbeitsspeicher ist. Moderne Grafikkarten verfügen über einen dedizierten Grafikkartenspeicher, der um ein Vielfaches schneller ist, als der RAM, welchen die CPU nutzt. Somit ist von einer Implementierung des Algorithmus auf der Grafikkarte ein starker Geschwindigkeitszuwachs zu erwarten.

Ein weit verbreitetes Framework für GPU-Computing ist Nvidia CUDA. Die High-End Consumerkarten der GeForce Reihe verfügen über ähnlich hohe Datentransferraten wie die deutlich teureren RTX Titan, sodass auch schon mit einer günstigeren Karte größere Gebiete schnell berechnet werden können.

Nach einigen Recherchen zur Möglichen Implementierung von GPU-Computing für numpy habe ich mich für CuPy entschieden. Es bietet viele Freiheiten und Optimierungsmöglichkeiten, und dennoch eine einfache Kompatibilität zum bestehenden Python und Numpy Code. In einem ersten Schritt habe ich daher einen Fork erstellt und starte mit der Umsetzung der Iteration auf der Grafikkarte.