Hallo zusammen,
ich interessiere mich auf sehr grundlegendem Level für KI (NN) und allgemeiner Signalverarbeitung.
Bei der Simulation von Neuronalen Netzen werden im Grunde Formeln in der Art Y = ax + b ausgewertet. Wobei wir hier über gigantische Vektoren, Matritzen, bzw. Tensoren sprechen.
Bei der Suche nach optimierten Berechnungsmöglichkeiten bin ich über die SIMD-Instruktionen (SSE, AVX, usw.) auf Expression Templates gekommen, die im folgenden Link vorgestellt werden.
https://www.grimm-jaud.de/index.php/pri ... -templates
Da dieses Tutorial nun schon einige Jährchen auf dem Buckel hat, frage ich hier die Community: Gibt es in der Zwischenzeit noch effizientere Methoden, die Berechnungen durchzuführen?
Womit müsste man sich beschäftigen, wenn man State-of-the-Art sein möchte?
Viele Grüße,
Lev
C++ Optimieren von Math. Operationen
Re: C++ Optimieren von Math. Operationen
Achja, Möglichkeiten die Abstraktion deart zu gestalten, dass später die Berechnungen konfigurierbar in der CPU, GPU oder APU geschehen können sind natürlich besonders interessant.
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C++ Optimieren von Math. Operationen
Ja, da wollte ich eigentlich auch mal wieder rein. ^^
SIMD wird in C++ durch Compilerflags gesteuert, soweit ich weiß. Du musst vorrangig dafür sorgen, dass die Datenpakete gut in den CPU-Cache passen, heißt Vektoren oder Arrays und Zeiger vermeiden (keine Listen, Hashmaps etc).Leverator hat geschrieben: ↑Di Apr 16, 2024 10:46 amBei der Simulation von Neuronalen Netzen werden im Grunde Formeln in der Art Y = ax + b ausgewertet. Wobei wir hier über gigantische Vektoren, Matritzen, bzw. Tensoren sprechen.
Bei der Suche nach optimierten Berechnungsmöglichkeiten bin ich über die SIMD-Instruktionen (SSE, AVX, usw.) auf Expression Templates gekommen, die im folgenden Link vorgestellt werden.
https://www.grimm-jaud.de/index.php/pri ... -templates
Afair wäre es hier interessant, entsprechende Funktionen auszulagern und diese C++-Files SIMD-optimiert zu kompilieren.
Das ist kein qualifizierter Rat aus Erfahrung, das ist gesammeltes Halbwissen.
Grafikkarten sind hier wohl extrem leistungsfähig. Ich bin da aber auch micht mehr auf aktuellem Stand. Das damalige Problem war, dass die Daten auf die Grafikkarte zu schaufeln, was den Geschwindigkeitsvorteil der Graka wieder zunichte machte. Das könnte sich dank modernerer Rechner inzwischen verschoben haben. In beide Richtungen.Leverator hat geschrieben: ↑Di Apr 16, 2024 10:46 amDa dieses Tutorial nun schon einige Jährchen auf dem Buckel hat, frage ich hier die Community: Gibt es in der Zwischenzeit noch effizientere Methoden, die Berechnungen durchzuführen?
Womit müsste man sich beschäftigen, wenn man State-of-the-Art sein möchte?
Es ist jedenfalls ein spannendes Thema.
APU ist CPU+GPU, womit die Auswahl zwischen CPU und GPU am Ende bleibt. CUDA wäre hier das Thema für GPUs, bzw. ROCm für AMD, wobei die inzwischen wohl auch Richtung Cuda gehen.
Solange Du Deine mathematischen Klasse abstrahierst, sollte das kein Problem darstellen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.