Speedup GPU vs. CPU für matrix-Operationen
Frage ich mich, wie viel GPU-computing würde mir helfen, die Geschwindigkeit meiner Simulationen.
Den kritischen Teil meiner code-matrix-Multiplikation. Grundsätzlich ist der code der aussieht, wie der folgende python-code mit Matrizen der Ordnung 1000 und lange Schleifen.
import numpy as np
m_size = 1000
sim_length = 50
a = np.random.rand(m_size, m_size)
b = np.random.rand(m_size, m_size)
for j in range(sim_length):
result = np.dot(a,b)
Hinweis: Meine Matrizen sind dicht, meist zufällig und for-Schleifen wurden mit cython.
Meine naive Vermutung wäre, dass ich zwei Faktoren:
- Mehr parallele threads (Derzeit um 1 thread, die GPU um 100 threads?) --> Beschleunigung von um die 100? [Quelle ist ziemlich veraltet, ab 2011]
- Niedrigeren Prozessor-Frequenz (Derzeit 3Ghz GPUs in der Regel 2 Ghz) --> Vernachlässigung
Erwarte ich, dass dieser Standpunkt ist zu naiv, so was bin ich?
- Ich schlage vor, ein guter Ausgangspunkt wäre PyCUDA wenn Ihre GPU zulässt. Große Bibliothek, die ich verwendet habe in der Vergangenheit mit numpy.
Du musst angemeldet sein, um einen Kommentar abzugeben.
- Matrix-Multiplikation die Leistung
Wenn Sie
numpy
Sie sind wahrscheinlich über eine der BLAS-Bibliotheken als rechnerische backend, wie ATLAS, OpenBLAS, MKL, etc. Wenn Sie die Schnellste, MKL, finden Sie eine aktuelle performance-benchmark hier, zwischen einer aktuellen Nvidia-GPU K40m und Intel Xeon 12-core E5-2697 v2 @ 2.70 GHzhttps://developer.nvidia.com/cublas
wo K40m ist 6x schneller als 12-thread E5-2697. Angesichts MKL skaliert gut auf multi-core-CPU. K40m ist ~72x schneller als die 1-thread E5-2697. Bitte beachten Sie auch 1000-dim ist fast die untere Grenze voll zu nutzen, sowohl die GPU und die CPU. Kleinere Größe der matrix führt in der Regel zu mehr Leistung verschlechtern, auf der GPU.
Wenn Sie langsamer BLAS-backend für
numpy
, sagen die GNU-lizenzierte ATLAS. Sie könnten dann finden Sie den Vergleich zwischen MKL und ATLAS hierhttps://software.intel.com/en-us/intel-mkl/benchmarks#DGEMM-ATLAS
wo die MKL ist 2~4x schneller als die ATLAS.
Für Nvidia-GPUs, die nur weit verbreitete backend ist CUDA cuBLAS ist, so dass die Leistung nicht viel verändern wie ATLAS vs. MKL.
Datenübertragung
Als @janbrohl sagt, Datentransfer zwischen dem host-RAM und GPU-Speicher des Gerätes ist ein wichtiger Faktor, der Einfluss auf die Leistung. Hier ist ein benchmark, der die Geschwindigkeit der Datenübertragung.
CUDA - wie viel langsamer ist die übertragung über PCI-E?
Angesichts der Größe der matrix, Sie können tatsächlich berechnen sich die absolute Zeit für die Berechnung und die Daten übertragen, beziehungsweise. Diese könnten Ihnen bei der Bewertung der Leistung besser.
Zur Maximierung der Leistung auf der GPU benötigen Sie wahrscheinlich re-design-Programm zu minimieren, werden die Daten übertragen, indem Sie alle die Rechenoperationen auf die GPU, anstatt die matrix-Multiplikation nur.
Generell GPUs sind wesentlich schneller als die CPU zu sehr parallel-einfache Aufgaben (das ist, was Sie gemacht werden), wie die Multiplikation großer Matrizen, aber es gibt einige Probleme kommen mit der GPU-Berechnung:
während also die Multiplikation selbst kann werden 100 (oder mehr) mal schneller, erleben Sie möglicherweise eine eigentlich viel kleiner speedup oder sogar eine Verlangsamung
Gibt es mehr Probleme mit GPUs als "dumm" im Vergleich zu CPUs wie massive geschwindigkeitseinbussen auf Verzweigungen code, mit Griff-caching von hand und andere, die schreiben schnell Programme für GPUs ziemlich schwierig.
Mit opencl-api, ich habe versucht, 8k X 8k von 8k X 8k-Multiplikation auf einem 1280-core-HD7870(nicht einmal ein mainstream-desktop-Grad gpu) und es dauerte etwa 0.99 Sekunden, was bedeutet, dass etwa 540 Milliarden Ergänzungen und 540 Milliarden Multiplikationen und das heißt auch 1.1 Tflops(%40 von seinen Spitzenwert sagte in seiner Werbung). High-end-desktop-grade-CPUs haben nur 0.2 - 0.3 Tflops(peak-Wert) ohne integrierte gpus. Also am besten cpus nicht sogar eine low-mid-gpu in der Leistung und Leistung pro watt und Leistung pro dollar.
Taste Optionen für die Leistung:
Optimierung für hardware-differencies
mithilfe einer Bibliothek, die Optionen hat, von 1 bis 4