Geometric Centralities and Betweenness in Rust
Matteo Zagheno (987403)
Relatore: Prof. Sebastiano Vigna
Laurea Triennale in Informatica
Università degli Studi di Milano
Centralità
Centralità

Assegnare ai nodi un valore che ne determina
l’importanza all’interno del grafo
WebGraph
-
Compressione e analisi in-memory di grafi di
grandi dimensioni -
Sviluppato originariamente in Java
- Nuova versione in Rust
WebGraph


Rust
Rust
-
Compila in codice nativo
-
Astrazioni a costo zero
- Immutabilità di default
- Gestione automatica della memoria senza garbage collector
- Safety (Memory e Thread)
Obiettivo del lavoro
Progettazione e implementazione di algoritmi per il calcolo delle centralità geometriche e betwenness in Rust nel contesto del framework WebGraph
Centralità geometriche
Centralità Geometriche
Centralità che dipendono solamente dal numero di nodi presenti a ogni distanza
Esempio: Harmonic
Come calcolarle
Come calcolarle
Eseguiamo una BFS a partire dal nodo di cui vogliamo calcolare la centralità e per ogni nodo raggiungibile applichiamo la formula
Due approcci:
- Sequenziale
- Parallelo
BFS sequenziale
C
B
•
•
D
E
F
G
A
•
A
B
C
BFS parallela
B
C
G
F
D
E
BFS parallela
BFS parallela
G
F
D
E
H
L
I
M
O
J
K
N
Approccio parallelo
- BFS Parallela per singolo nodo
- N BFS Sequenziali per tutti i nodi
Parallelizzazione
Thread 0
Thread 1
Thread 2
Thread 3
0
1
2
3




Prossimi vertici:
Parallelizzazione
1
2
3




Prossimi vertici:
4
0
BFS Sequenziale
Thread 0
Thread 1
Thread 2
Thread 3
Parallelizzazione
1
2
3




Prossimi vertici:
4
5
BFS Sequenziale
BFS Sequenziale
0
Thread 0
Thread 1
Thread 2
Thread 3
Parallelizzazione
1
2
3




Prossimi vertici:
4
5
6
0
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
Thread 0
Thread 1
Thread 2
Thread 3
Parallelizzazione
1
2
3




Prossimi vertici:
4
5
6
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
0
Thread 0
Thread 1
Thread 2
Thread 3
Parallelizzazione
2
3




Prossimi vertici:
4
5
6
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
0
Thread 0
Thread 1
Thread 2
Thread 3
Parallelizzazione
2
3




Prossimi vertici:
4
5
6
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
Thread 0
Thread 1
Thread 2
Thread 3
Parallelizzazione
3




Prossimi vertici:
4
5
6
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
BFS Sequenziale
Thread 0
Thread 1
Thread 2
Thread 3
Compute Custom
#[derive(Clone, Default)]
struct CustomGeomCentralityResult {
}
let mut res: Box<[CustomGeomCentralityResult]> = geometric::compute_custom(&graph, threads,
|n: &mut CustomGeomCentralityResult, distance, num_of_nodes| {
}
);Compute Custom
#[derive(Clone, Default)]
struct CustomGeomCentralityResult {
harmonic: f64,
}
let mut res: Box<[CustomGeomCentralityResult]> = geometric::compute_custom(&graph, threads,
|n: &mut CustomGeomCentralityResult, distance, num_of_nodes| {
n.harmonic += (1f64 / distance as f64) * num_of_nodes as f64;
}
);Compute Custom
#[derive(Clone, Default)]
struct CustomGeomCentralityResult {
closeness: f64,
harmonic: f64,
}
let mut res: Box<[CustomGeomCentralityResult]> = geometric::compute_custom(&graph, threads,
|n: &mut CustomGeomCentralityResult, distance, num_of_nodes| {
n.closeness += (num_of_nodes * distance) as f64;
n.harmonic += (1f64 / distance as f64) * num_of_nodes as f64;
}
);
for item: &mut CustomGeomCentralityResult in &mut res {
item.closeness = 1.0 / item.closeness;
}Betweenness
Betweenness
Quantifica quante volte un nodo si trova sul percorso più breve tra altri due nodi nel grafo
Betweenness
Quantifica quante volte un nodo si trova sul percorso più breve tra altri due nodi nel grafo
Algoritmo di Brandes
- Single-source shortest paths (BFS)
- Backpropagation
- Parallelizzabile

Per ogni nodo:
Risultati per le centralità geometriche
Decremento ~70%
Risultati per centralità geometriche singole
Decremento tra 30 e 70%
Risultati per la betweenness
Decremento ~30%
Grazie per l'attenzione
Slide Tesi
By Matteo Zagheno
Slide Tesi
Gemetric Centralities and Betweenness in Rust: Tesi di laurea triennale Matteo Zagheno 987403
- 73