C++ Optimieren von Math. Operationen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Leverator
Beiträge: 34
Registriert: Mo Jan 30, 2012 9:28 pm
Wohnort: ::1

C++ Optimieren von Math. Operationen

Beitrag von Leverator » Di Apr 16, 2024 10:46 am

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

Leverator
Beiträge: 34
Registriert: Mo Jan 30, 2012 9:28 pm
Wohnort: ::1

Re: C++ Optimieren von Math. Operationen

Beitrag von Leverator » Di Apr 16, 2024 10:47 am

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.

Benutzeravatar
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

Beitrag von Xin » Di Apr 16, 2024 11:44 am

Leverator hat geschrieben:
Di Apr 16, 2024 10:46 am
Hallo zusammen,
ich interessiere mich auf sehr grundlegendem Level für KI (NN) und allgemeiner Signalverarbeitung.
Ja, da wollte ich eigentlich auch mal wieder rein. ^^
Leverator hat geschrieben:
Di Apr 16, 2024 10:46 am
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
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).

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.
Leverator hat geschrieben:
Di Apr 16, 2024 10:46 am
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?
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.

Es ist jedenfalls ein spannendes Thema.
Leverator hat geschrieben:
Di Apr 16, 2024 10:47 am
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.
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.

Antworten