Open gdalle opened 10 months ago
Presented a proposition (see below)
Student tasks:
Instructor tasks:
If interested:
Next meeting: friday to discuss package creation
Parallel Graphs in Julia : Proposition de plan
-Implémentation de certaines primitives nécessaires à de nombreux algorithmes parallèles, potentiellement dans utils.jl : Reduce : déjà implémenté Scan Filter EdgeMap & VertexMap
-Implémentation d’un premier algorithme complet Low-Diameter Decomposition (utilisé dans de nombreux autres algorithmes) Parallel speed-up benchmark (en plus des tests de correctness)
-Implémentation d’un second algorithme plus complexe Graph Coloring (NP-Hard) Benchmarks : random input, worst-case input (on peut s’attendre à une large différence) Comparaison des résultats obtenus et des garanties théoriques, analyse statistique
L'implémentation de "Low Diameter Decomposition" qui est évoquée dans le papier de recherche "Theoretically Efficient Parallel Graph Algorithms Can Be Fast and Scalable" semble être basée sur ce papier : Parallel Graph Decompositions Using Random Shifts. L'algorithme y est décrit de manière assez claire en une dizaine de page, je pense que c'est un bon point de départ.
Cool, je jetterai un œil avant notre meeting de vendredi !
Work done
Tasks
Base.Threads.Atomic
OhMyThreads.jl
Work done
Tasks
BFS running with tests and benchmarks
Specification
Performance
Base.Threads
for atomic operations and either Base.Threads
or OhMyThreads.jl for high-level (map, reduce, etc => EdgeMap
and VertexMap
)Testing
Benchmarking
evals=1
after each @benchmarkable
(the functions are slow enough)Good practices
Questions
Atomic
seems deprecated? InvestigateParallel weighted BFS :
Implantation is significantly more complicated than non-weighted variant. Requires a "Bucket" data-structure as introduced in https://www.cs.umd.edu/~laxman/papers/Bucketing.pdf .
I will look into this for the next meeting.
Interesting, but I would start by getting the unweighted version up and running!
Work done
During meeting
@profview
in VSCodeTasks
Remarks
evals=1
to avoid starting the function with unclean inputsusing BenchmarkTools
g = SimpleGraph(100, 200)
@btime bfs!(parents, $g) setup=(parents=zeros(Int, nv(g)) evals=1
repetitions = 10
@profview for r in 1:repetitions; bfs(g); end
parents_several = [zeros(Int, n) for r in 1:repetitions]
@profview for r in 1:repetitions; bfs!(g, parents_several[r]); end
nthreads()
queue objects inside a Channel
, as done in https://juliafolds2.github.io/OhMyThreads.jl/stable/literate/tls/tls/#The-safe-way:-ChannelTo do
Work done
Debugging
run(SUITE; verbose=true)
Question
sizehint!
the global to_visit
at the beginningQueue
relies on internal storage that is close to a Vector
: allows flushing all at onceto_visit
and then parallelize the flushingtreduce
Work done
Todo
to_visit
to avoid locality effects?Remarks
Presentation
Work done
Todo
Graphs.Parallel.Queue
if it has the same nameWork done
Bool
Graphs.adjacency_matrix
returns integers even for unweighted graph, which sucks => open an issueBool
matrix with an Int
vector (no mixed types)
Bool
and one Int
, and let them communicateGraph BLAS algorithms descriptions :
Work done
Todo
copyto!
from each vector to the right chunk of the global oneBool
type argument to Graphs.adjacency_matrix
directlyBool
for available colors updated in placeBonus
Work done
Todo
Int32
Work done
Work done
Discussion
minimum
or median
) but you better plot a confidence interval: median as a line, quantiles 25-75 with a colored ribbon or a small barGBVector
Float32
? Inconclusiverng
Work done
scatter
that doesn't belong to GraphBLASDiscussion
Int
operations instead of Float64
Todo
Some resources to learn more about parallel graph algorithms and pick a topic of interest
Reading list:
Assignment: