What to do #2
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
evalGPU(expr, data)
expr = simple Julia mathematical expression
data = Vector/Matrix with values for the variables in the expression
Briefe overview of what needs to be done:
Sehr geehrter Herr Wiplinger,
wie besprochen schicke ich ihnen noch mehr Material für die Masterarbeit.
Folgende Bücher habe ich hilfreich gefunden:
Konkretisierung der Aufgabenstellung:
Gegeben ist eine Matrix X mit k Spalten und N Zeilen, und ein Julia Ausdruck, der Spalten der Matrix über die Symbole x1 .. xk referenziert. Beispiele für Ausrücke sind:
Zusätzlich zu den Variablen und Konstanten können Ausdrücke auch Parameter (Vektor p = p1 .. pm) verwenden. Beispiele:
Es sollen zwei Funktionen zur Verfügung gestellt werden:
interpret_gpu(exprs::Vector{Expression}, X::Matrix{Float64}, p::Vector{Vector{Float64}})::Matrix{Float64}
evaluate_gpu(exprs::Vector{Expression}, X::Matrix{Float64}, p::Vector{Vector{Float64}})::Matrix{Float64}
Beide Funktionen werten mehrere Expressions auf der GPU aus damit die GPU möglichst gut genutzt werden kann. Die X Matrix ist für alle Expressions gleich und ist eine k x N Matrix. P enthält den Parameter Vektor für jede Expression. Es ist ein Vektor von Vektoren, da Expressions unterschiedlich viele Parameter haben können. p[i] ist der Vektor der Parameterwerte für expr[i]. Das Ergebnis ist eine Matrix mit length(exprs) Spalten und N Zeilen, jede Spalte ist das Ergebnis einer Expression.
Folgende Funktionen sollen unterstützt werden: *, /, +, -, ^, abs, log, exp, sqrt.
Zwei Varianten sollen getestet werden:
Die beiden Ansätze sollen mit verschiedenen Ausdrücken und unterschiedlich langen Matrizen (N=1000, 10000, 10^5, 10^6) getestet werden und die Ressourcennutzung der GPU analysiert werden.
Folgende Papers scheinen interessant zu sein:
https://umtl.cs.uni-saarland.de/paper_preprints/paper_koester_mpie_2020.pdf
https://ieeexplore.ieee.org/document/9370323
ich habe noch ein paar andere Papers zu dem Thema gefunden, aber nicht weiterverfolgt.
Hier noch ein einfaches Beispiel wie man in Julia zur Laufzeit einen PTX String erzeugen und aufrufen kann. Die Verwendung der Funktion ist im Kommentar der ersten Zeile gezeigt. In dem Einfachen Beispiel wird an der Stelle op im String einfach eine der 4 Operationen aufgerufen. Der Rest des PTX-Codes ist für das Durchlaufen der N Elemente auf verschiedenen Threads notwendig. Der Code verwenden das CUDA.jl Paket
Für die Arbeit mit Julia empfehle ich entweder auf einem Linux System oder mit WSL zu arbeiten. VS Code eignet sich gut als Editor. Das Revise Paket https://timholy.github.io/Revise.jl/stable/ ist sinnvoll, um Änderungen der Code-Files sofort in der REPL verfügbar zu machen (für Sie völlig transparent). Es ist sinnvoll gleich von Beginn an den Code in einem Paket zu schreiben. https://julialang.org/contribute/developing_package/ Das Paket können Sie vorerst lokal entwickeln, es muss nicht veröffentlicht werden. Wenn Sie mir einen Zugang zu dem github Repository geben, kann ich die Entwicklung ein wenig mitverfolgen. Mein Account ist @gkronber.
Falls Sie Fragen haben, können Sie sich jederzeit gerne melden.
Freundliche Grüße,
Gabriel Kronberger