Você está na página 1de 27

Arquitetura de Computadores - Programa de Pós Graduação em Informática Universidade Federal da Paraíba

Otimizando o Uso de Memória de


um Grafo PageRank

Fabrício Leite Soares


Introdução
Grafos: Performance
● Grafos muito grandes apresentam Localidade Temporal e Espacial
de Memória pobre.
○ Não são estruturas lineares, e são estruturas esparsas
● Solução "estado da arte": Préprocessar
○ Reordenar
○ Particionar
Objetivo deste Trabalho

● Utilizar técnicas de particionamento para o algoritmo PageRank


● Experimentar diferentes layouts de dados
● Comparar performance para diferentes datasets
Estratégias de Processamento de
Grafos em Memória
Scatter-gatter [Google, SIGMOD 2010]
● Centrado em vértices: Armazena estados em vértices

Espalhar (scatter) pelas Gather (recolher) das


arestas de saída arestas da entrada
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Acessos: Aleatório e Sequencial
Solução: Scatter-gatter por Aresta

Por vértice Por aresta


para cada vértice v para cada aresta e
se v quer enviar atualização se e.origem tem atualização
para cada aresta e de v scatter_in(e)
scatter_in(e)
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Arquivo de vértices Arquivo de arestas
Scatter-gatter: BFS v
origem destino

1 3

1 1 5

3 2 2 7
2
2 4

3 3 2
1 4 3 8
4
4 3

5 4 7
8 7 4 8
6 5 6

5 6 7 6 1

8 5
8 8 6
Scatter gatter por Arestas: Vantagens
origem destino origem destino
1 3 1 3
1 5 8 6
2 7 5 6
2 4 2 4
3 2 3 2
3 8 4 7
4 3 4 3
4 7 3 8
4 8 4 8
5 6 2 7
6 1 6 1
8 5 8 5
8 6 1 5
Modelo Centrado em Arestas: Tradeoff
● Tabela de vértices não precisa estar ordenada
● Não é necessário indexar vértices

#Arestas
● Custo de scatter-gather centrado em vértices:
Largura de Banda para
Acesso Aleatório

#scatters x #Arestas
● Custo de scatter-gather centrado em arestas: Largura de Banda para
Acesso Sequencial
Particionamento de um Grafo
Pagerank: Particionamento de Grafos

● Proposta de [S. Zhou et al, 2015]:


○ Divida todos os vértices em n = conjuntos de tamanho igual.

Dados do Grafo

Partição 0 Partição 1 Partição 2 Partição n


Vertices 0

Arestas 0
Vertices 1

Arestas 1
Vertices 2

Arestas 2
... Vertices n

Arestas n

Mensagens 0 Mensagens 1 Mensagens 2 Mensagens n


Otimização do Layout de um Grafo
Otimização de Layout
● Acesso sequencial de memória
● Acesso a cache
● Acesso aleatório de memória
Otimização de Layout: Situação atual: pior caso com O(|E|) acessos

Ordem de
Lista de Arestas 0 Escreva DRAM
Percorrimento mensagens com
Origem Destino base no destino
Lista de Mensagens 0
0 10 para vértices [0..99]

0 101
Lista de Mensagens 1
1 201 para vértices [100..199]
1 105
78 20 Lista de Mensagens 2
para vértices [200..299]
79 201
79 105 ...
Otimização de Layout: Situação: pior caso com O(k ) acessos, k partições
2

Ordem de
Lista de Arestas 0 Escreva DRAM
Percorrimento mensagens com
Origem Destino base no destino
Lista de Mensagens 0
0 10 para vértices [0..99]

78 20
Lista de Mensagens 1
0 101 para vértices [100..199]
1 105
79 105 Lista de Mensagens 2
para vértices [200..299]
1 201
79 201 ...
Implementação Paralela do
PageRank
Pagerank: Particionamento de Grafos

● Para uma CPU de p núcleos, as computações das k partições foram


divididas em p “partes”
● As p partes foram entregues ao escalonador do tipo dinâmico do
OpenMP.
● Escolheu-se o número de vértices com base no tamanho da cache L2
de cada núcleo.
Obrigado!