Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
INSTITUTO DE INFORMTICA
CURSO DE BACHARELADO EM CINCIA DA COMPUTAO
Trabalho de Graduao
AGRADECIMENTOS
SUMRIO
LISTA DE FIGURAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
RESUMO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
ABSTRACT
12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 INTRODUO . . . . . . . . .
1.1
Hierarquias de Memria . . .
1.2
Outros Modelos . . . . . . . .
1.2.1
RAM . . . . . . . . . . . . .
1.2.2
Memria Externa . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
13
14
15
15
16
2 ALGORITMOS CACHE-OBLIVIOUS . .
2.1
Modelo de cache Ideal . . . . . . . . . .
2.1.1
Poltica de Substituio . . . . . . . . .
2.1.2
Nveis de Memria . . . . . . . . . . .
2.1.3
Associatividade e Reposio Automtica
2.2
Algoritmos Estudados . . . . . . . . . .
2.2.1
Maior Subseqncia Comum . . . . . .
2.2.2
Multiplicao de Matrizes . . . . . . . .
2.2.3
Gap Problem . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
17
17
18
18
19
19
20
21
22
3 BIN PACKING . . . . . . . . . . . . . . . . . . . .
3.1
Solues para o Empacotamento Unidimensional
3.1.1
Heursticas e Meta-heursticas . . . . . . . . . .
3.1.2
Algoritmos Exatos . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
24
24
24
24
4 PROBLEMA DA MOCHILA . . . . .
4.1
Problema . . . . . . . . . . . . . . .
4.2
Variaes . . . . . . . . . . . . . . .
4.2.1
Problema Fracionrio da Mochila . .
4.2.2
Problema Booleano da Mochila . . .
4.2.3
Problema da Mochila Limitado . . .
4.3
Problema da Mochila No Limitado
4.3.1
Dominncias . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
26
26
27
27
27
27
28
28
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
30
32
33
36
39
39
40
6 CONSIDERAES FINAIS . . . . . . . . . . . . . . . . . . . . . . . .
6.1
Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
45
REFERNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
LRU
FIFO
LISTA DE FIGURAS
Figura 1.1:
Figura 1.2:
15
16
Figura 2.1:
17
Figura 4.1:
29
Figura 5.1:
Figura 5.2:
Figura 5.3:
Figura 5.4:
Figura 5.5:
Figura 5.6:
Figura 5.7:
37
38
39
41
41
42
43
RESUMO
A memria nos computadores modernos geralmente est organizada em uma hierarquia complexa. Dessa forma, torna-se importante projetar algoritmos que utilizem a cache
de forma eficiente. Alm disso, as configuraes da memria e da cache tem grande variao de computador para computador. Assim, necessrio tambm que os algoritmos
desenvolvidos dependam o mnimo possvel de informaes da mquina para usar a cache
eficientemente.
No modelo de cache ideal, existem dois nveis de memria. Uma tem acesso aleatrio
e infinita (memria principal), porm tem um custo associado ao seu acesso, enquanto
que a outra de acesso rpido, porm com um tamanho finito.
Um algoritmo dito cache-oblivious se ele usa a cache de forma eficiente mesmo
sem ter nenhuma informao sobre a cache. Para medirmos a complexidade desse tipo
de algoritmo, no basta utilizarmos somente a complexidade do nmero de instrues
executadas. Dessa maneira, utilizamos tambm a complexidade de cache-misses, que
pode ser medida utilizando o modelo de cache ideal, para medir o quo eficientemente
um algoritmo acessa a cache.
Existem muitos problemas ainda no analisados quanto a sua eficincia de cache. Um
desses problemas o Problema da Mochila. Nele, dado uma mochila de um certo tamanho
e um conjunto de itens com um peso e um lucro associado, pede-se que se encontre a
combinao de itens que caibam na mochila que resultem no maior lucro acumulado.
Esse problema de extrema importncia para vrias reas da computao, sendo subproblema de muitos problemas. Um desses problemas o Bin-Packing, de inmeras
aplicaes prticas.
Apresentamos, nesse trabalho, um algoritmo cache-oblivious para o Problema da Mochila Ilimitado. Alm disso, apresentamos tambm uma pesquisa e anlise de problemas
em que j existem algoritmos cache-oblivious desenvolvidos.
Palavras-chave: Programao dinmica, algoritmos cache-oblivious, problema da mochila ilimitado, problema bin-packing.
ABSTRACT
13
INTRODUO
Tradicionalmente o projeto de algoritmos tem como foco o desenvolvimento de algoritmos que levam em conta apenas o nmero de instrues executadas, sendo considerado
o acesso memria constante. Esse tipo de complexidade pode ser medida pelo modelo
RAM (Random Access Machine), onde existe somente um processador e uma memria
com acesso aleatrio constante.
Com o desenvolvimento de memrias mais rpidas, porm mais caras, e a disparidade
entre a velocidade do processador e das memrias mais baratas, tornou-se comum o uso
de uma hierarquia de memrias nos computadores. Nessa hierarquia, somente a memria
mais rpida (e tambm a menor) tem contato direto com o CPU. A segunda memria mais
rpida tem contato com essa cache e assim por diante at a memria mais lenta e de maior
capacidade.
Sendo os computadores atuais projetados com hierarquias de memria com mltiplos
nveis, torna-se importante tambm levar em conta no projeto de algoritmos, alm do
nmero de instrues executadas, o custo para acessar os diferentes nveis de memria
existentes.
O modelo de cache ideal, proposto por Prokop em (PROKOP, 1999), lida justamente
com esse tipo de custo. Nele, alm da complexidade do nmero de instrues, possvel
calcular a complexidade de cache-misses de um algoritmo.
H duas maneiras de se desenvolver um algoritmo que utiliza a cache eficientemente.
Um algoritmo dito cache-aware se ele tem algum conhecimento de como a cache, tal
como o tamanho dela ou quantas palavras existem em uma linha de cache. Pelo outro
lado, um algoritmo dito cache-oblivious se ele usa a cache de forma eficiente mesmo
sem ter nenhuma informao sobre a cache.
Devido grande diversidade de configuraes de computadores existentes, tanto no
nmero de nveis de memria, quanto no tamanho dessas memrias, importante que os
algoritmos desenvolvidos para usar a cache eficientemente sejam cache-oblivious.
Programao Dinmica um mtodo para problemas que tem por caracterstica uma
subestrutura tima e subproblemas que se sobrepem. Um problema que tem subestrutura
tima aquele em que as solues timas para os seus subproblemas podem ser utilizadas
para achar a soluo tima para o problema maior. Nesse tipo de tcnica, utiliza-se a
memria para guardar as solues para os subproblemas, de forma a no ser necessrio
recalcular nenhuma informao.
Esse tipo de mtodo depende pesadamente da memria, com muitos acessos sendo
feitos a ela a cada passo do clculo da soluo. Dessa forma, esse tipo de algoritmo
ideal para se utilizar tcnicas a fim de diminuir o nmero de cache-misses. Existem um
nmero considervel de algoritmos cache-oblivious j desenvolvidos para problemas que
utilizam programao dinmica, porm a eficincia da cache na maioria dos algoritmos
14
1.1
Hierarquias de Memria
15
1.2
Outros Modelos
RAM
Neste modelo, instrues so executadas com uma memria to larga quanto necessria, de acesso aleatrio constante. Com ele, possvel calcular tanto a complexidade de
nmero de instrues quanto a complexidade espacial.
16
1.2.2
Memria Externa
Este modelo, tambm conhecido como modelo de acesso ao disco, introduz dois nveis
memria:
Uma memria (cache) na qual o CPU acessa diretamente, que barata de acessar,
porm pequena em tamanho.
Uma memria (disco) na qual o CPU no consegue acessar diretamente, que
custosa para acessar, mas contm uma capacidade to grande quanto o necessrio.
17
2.1
ALGORITMOS CACHE-OBLIVIOUS
18
Poltica de Substituio
Quando ocorre um cache-miss e a cache est cheia, necessrio escolher uma linha da
cache para ser substituda. No modelo de cache ideal, a linha escolhida para a substituio
aquela que mais demoraria para ser acessada no futuro. Essa poltica de substituio
chamada de estratgia de substituio tima, e explora a localidade temporal dos dados o
melhor possvel.
Essa estratgia, obviamente, no pode ser utilizada nos computadores reais. Existem
diversos algoritmos de substituio utilizados atualmente, tais como LRU, e FIFO (HENNESSY; PATTERSON, 1996). Na FIFO a linha a ser substituda sempre o que esteve
na cache por mais tempo. J no LRU, a linha a ser substituda a que foi menos utilizada
recentemente.
Felizmente, uma cache com substituio tima pode ser substituda por uma com substituio LRU sem perda da otimalidade assinttica, desde que seja permitida a mudana
dos limites de Z da cache.
Em (FRIGO et al., 1999), foi provado que um algoritmo que causa Q0 (n; Z, L) cachemisses em um problema de tamanho n usando uma cache (Z, L) tima causar Q(n; Z, L)
2Q0 (n; Z2 , L) cache-misses em uma cache (Z, L) que use uma poltica de substituio
LRU. Isso significa que, se permitirmos usar uma cache com o dobro de tamanho, a poltica LRU no gera mais que o dobro de cache-misses em relao poltica de substituio
tima.
Por consequncia, se um algoritmo satisfaz a condio de regularidade (FRIGO et al.,
1999), o nmero de cache-misses assintoticamente igual nas duas polticas, isto
QLRU (n; Z, L) = (QOP T (n; Z, L))
(2.1)
(2.2)
Nveis de Memria
Embora o modelo utilize apenas dois nveis de memria, ele prova resultados sobre
qualquer hierarquia de nveis de memria. Para tanto, a memria deve possuir a propriedade da incluso, que pode ser definida pelas seguintes caractersticas:
Um dado pode estar em uma memria de nvel i se e somente se ela est presente em
uma memria de nvel i + 1 (onde o nvel 1 o nvel mais prximo do processador).
Se dois elementos pertencem mesma linha em um nvel i, eles pertencem mesma
linha em um nvel i + 1.
19
O modelo de cache ideal tem como caracterstica ter a memria totalmente associativa,
ou seja, qualquer bloco da memria pode ser guardado em qualquer lugar da cache.
J a reposio automtica diz que quando um bloco est para ser trazido para a cache, isso automaticamente feito pelo hardware, e o algoritmo no necessita tratar essas
operaes de memria.
Nem sempre assim que a cache funciona. Para a associatividade, a cache geralmente
implementa uma associatividade limitada, significando que cada linha de cache pertence
a um agrupamento de x blocos, sendo chamada de uma cache x-associativa. A maioria
das caches variam de 1-way associativity at 8-way associativity. Sendo assim, faz-se
necessrio uma converso para algo mais realista.
Para que o modelo de cache ideal possa ser utilizado quando o sistema no gerencia
operaes de memria automaticamente, necessrio provar que se pode simular uma
cache com reposio automtica sem um acrscimo na complexidade tanto de nmero de
instrues quanto de cache-misses.
Frigo et al., em (FRIGO et al., 1999) provaram que para uma constante > 0, uma
cache LRU (Z, L) pode ser simulada em um espao O(Z) tal que cada acesso cache
tem O(1) de complexidade de tempo. Com isso, o modelo de cache ideal pode ser reduzido para utilizar uma memria 1-way associativity e um gerenciamento de memria
manual.
2.2
Algoritmos Estudados
20
Uma tcnica bastante utilizado nesses algoritmos a diviso e conquista, onde o problema recursivamente subdividido em subproblemas at que o subproblema tenha um
tamanho b e ento seja resolvido de maneira trivial. Um ponto de ajuste comum em quase
todos os algoritmos cache-oblivious de programao dinmica conhecidos a escolha de
que tamanho b deve ter. Sem o conhecimento do tamanho da cache, necessrio configurar esse tamanho ao menor possvel, realizando assim vrias subdivises desnecessrias
dentro da cache. Se soubermos o tamanho da cache, possvel escolher um b tal que
quando o subproblema couber na cache, ele ser resolvido da maneira tradicional, no
fazendo assim nenhuma subdiviso desnecessria.
A seguir apresentamos alguns problemas estudados, assim como resultados prticos
parciais das solues para esses problemas. Para avaliarmos o desempenho dos algoritmos na prtica, implementamos tanto a verso tradicional quanto a cache-oblivious.
Escolhemos aplicar uma metodologia em que nenhum conhecimento prvio da cache
conhecido. Dessa forma, o b escolhido foi sempre o menor possvel, para todos os problemas analisados.
2.2.1
Dada uma seqncia X = (x1 , ..., xn ) e uma seqncia Y = (y1 , ..., ym ), uma seqncia Z = (z1 , ..., zk ) uma subseqncia comum de X e Y se ela uma subseqncia de
X e de Y . No problema da maior subseqncia comum, deve-se achar a subseqncia
comum entre elas de maior tamanho.
Esse problema pode ser resolvido pela seguinte recorrncia, onde C(i, j) representa o
tamanho da maior subseqncia comum de X e Y :
se i = 0 ou j = 0,
0
(2.3)
C(i, j) = C(i 1, j 1) + 1
se i, j > 0 e xi = yj ,
8192
0, 680
0, 650
1, 046
16384
2, 770
2, 180
1, 270
32768
12, 920
8, 580
1, 506
65536
43, 639
39, 370
1, 108
21
O teste foi realizado com uma instncia com seqncias com 8192 a 65536 itens, escolhidos aleatoriamente entre as letras do alfabeto. Como visto na Tabela 2.1, o tempo de
execuo um pouco melhor do que o algoritmo tradicional. Todavia, a melhora no tempo
de execuo est longe do reportado em (CHOWDHURY, 2005), que alcana uma acelerao de at 2, 38. O principal motivo disso que a implementao do algoritmo tem o
caso base definido como o menor possvel, ao contrrio do ocorrido em (CHOWDHURY,
2005).
2.2.2
Multiplicao de Matrizes
Dado uma matriz A de tamanho m n e uma matriz B de tamanho n p, devese gerar uma matriz C de tamanho m p contendo a multiplicao de A por B. Essa
multiplicao pode ser definida como:
(
A(i, 1) B(1, j)
se k = 1,
C(i, j, k) =
(2.4)
C(i, j) + A(i, k) B(k, j) se i, j > 0 e k > 1.
O algoritmo para resoluo desse problema segue diretamente da definio do problema, tendo complexidade O(mpn). Entretanto, existem algoritmos com menor complexidade para esse problema. Strassen, em (STRASSEN, 1969), apresenta um algoritmo com complexidade O(nlog2 7 ) e, conforme Prokop, em (PROKOP, 1999), incorre
log 7
2
em ( nL + nL2Z ) cache misses, que timo.
O problema da multiplicao de matrizes um problema bastante conhecido, tendo o
seu algoritmo cache-oblivious apresentado por Prokop em (PROKOP, 1999). O algoritmo
divide as matrizes A e B conforme o seu tamanho, em um dos 3 casos:
A1
A1 B
B=
(2.5)
A2
A2 B
B1
A1 A2
= A1 B1 + A2 B2
(2.6)
B2
A B1 B2 = AB1 AB2
(2.7)
O primeiro caso (2.5) acontece quando m max(n, p). O segundo (2.6) quando
n max(m, p) e o terceiro (2.7), quando p max(n, m). As matrizes so divididas
dessa maneira at um caso base de tamanho b, e ento resolvidas de forma tradicional.
Tabela 2.2: Tempo de execuo do algoritmo de Multiplicao de Matrizes (em segundos)
para cada entrada do problema. A ltima linha apresenta a razo obtida (acelerao) entre
o tempo dos dois algoritmos.
Algoritmo
Tradicional (MAT-T)
Cache-Oblivious (MAT-CO)
Acelerao (MAT-T/MAT-CO)
256
0, 49
0, 53
0, 92
512
2, 78
3, 31
0, 84
1024
21, 06
25, 25
0, 83
Os resultados no chegam nem perto dos descritos em (PROKOP, 1999). A causa mais
aparente a mesma pela qual o algoritmo da Maior Subseqncia Comum no conseguiu
repetir os resultados apresentados na literatura. Por no definirmos o caso base levando
22
Gap Problem
O problema do gap (WATERMAN, 1995) uma generalizao do problema da distncia de edio (edit distance problem) (LEVENSHTEIN, 1966). Seja X e Y seqncias de
elementos de tamanho m e n, respectivamente, ao transformarmos X em Y , um gap em
X corresponde a uma seqncia de excluses consecutivas, e um gap em Y corresponde
a uma seqncia de inseres consecutivas.
Nesse problema o custo de um gap no necessariamente igual a soma dos custos
de cada excluso (ou insero). Com isso, uma funo W(i,j) definida como o custo
de excluir xi+1 , ..., xj de X, e uma funo W(i,j) definida como o custo de inserir
yi+1 , ..., yj em X. Ainda, temos o custo de substituio de um elemento de X por um
de Y, definido como S(xi , yj ). Sendo D(i,j) o custo mnimo de transformar x1 , ..., xi em
y1 , ..., yi , a seguinte recorrncia resolve o problema:
W (0, j)
D(i, j) =
W 0 (0, j)
se i, j = 0,
se i = 0, 1 j n.
se j = 0, 1 i m.
se i, j > 0.
(2.8)
onde:
E(i, j) = min {D(i, q) + W (q, j)}
0q<j
e
F (i, j) = min {D(p, j) + W 0 (p, i)}
0p<i
A soluo por programao dinmica segue pela recorrncia. Para utilizarmos a idia
de dividir o problema em subproblemas menores, at que eles caibam na cache, agora
necessrio propagar mais informaes, uma vez que agora cada D(i, j) depende, alm de
D(i 1, j 1), de D(0, j)...D(i 1, j) e D(i, 0)...D(i, j 1) tambm. Dessa forma, as
funes E(i, j) e F (i, j) tambm necessitam ser subdivididas.
Para podermos utilizar os resultados calculados de E e F , definimos funes que
propagam essas informaes de uma subdiviso para a outra, e aplicamos essas novas
funes recursivamente ao mesmo tempo em que calculamos o Gap.
Tabela 2.3: Tempo de execuo do algoritmo do Gap (em segundos) para cada entrada
do problema. A ltima linha apresenta a razo obtida (acelerao) entre o tempo dos dois
algoritmos.
Algoritmo
Tradicional (GAP-T)
Cache-Oblivious (GAP-CO)
Acelerao (GAP-T/GAP-CO)
512
0, 439
2, 36
0, 186
1024
4, 55
17, 36
0, 26
2048
44, 30
141, 89
0, 31
23
24
BIN PACKING
3.1
3.1.1
Algoritmos Exatos
25
26
PROBLEMA DA MOCHILA
4.1
Problema
27
4.2
4.2.1
Variaes
Problema Fracionrio da Mochila
Nessa variante o nmero de itens por tipo fracionrio, ou seja, possvel dividir um
item para caber dentro da mochila.
A definio em termos de programao linear a seguinte:
Maximizar
n
X
p j xj
(4.1)
i=1
Sujeito a
n
X
w i xi W
i=1
xi 0, xi R+ | i {1, ..., n}
Note que pela caracterstica fracionria, uma soluo gulosa exata possvel. Basta
W
, com todos
escolher o tipo de item i que tenha a maior razo wpii e a resposta ser xi = w
i
os outros xj , j 6= i iguais a 0.
4.2.2
Maximizar
n
X
p j xj
(4.2)
i=1
Sujeito a
n
X
w i xi W
i=1
Maximizar
n
X
p j xj
(4.3)
i=1
Sujeito a
n
X
w i xi W
i=1
28
4.3
Maximizar
n
X
p j xj
(4.4)
i=1
Sujeito a
n
X
w i xi W
i=1
xi 0, xi Z | i {1, ..., n}
Esse problema pode ser facilmente convertido para o Problema da Mochila Limitado,
W
c, i {1, ..., n}.
apenas pondo como limite de cada tipo de objeto um valor bi = b w
i
Todavia, existem algumas caractersticas desse problema que permitem otimizar a sua
soluo.
Para a resoluo desse problema, existem duas tcnicas principais utilizadas: a Programao Dinmica e o Branch & Bound. Esse trabalho tem como foco exclusivamente
a soluo por programao dinmica, tanto a verso trivial quanto a verso que utiliza algumas propriedades exclusivas do problema no limitado para acelerar o processamento
da soluo.
4.3.1
Dominncias
pi
.
pj
yj wj wi e
X
jJ
yj pj pi .
29
jJ
Figura 4.1: Todos os casos em que i dominado: (a) dominncia simples, (b) dominncia
mltipla, (c) dominncia coletiva e (d) dominncia limiar
Identificar esses tipos de dominncias nem sempre uma tarefa fcil, porm apresentamos no prximo captulo uma verso do algoritmo utilizando programao dinmica
que calcula e se aproveita da maior parte dessas dominncias em tempo de execuo,
tanto para o algoritmo que no minimiza cache-misses quanto para o que minimiza.
30
O Problema da Mochila Ilimitado tem melhores resultados quando resolvido por programao dinmica ou Branch & Bound. Nesse trabalho nos concentramos na soluo
por programao dinmica, com o intuito de minimizar o nmero de cache-misses do
algoritmo, enquanto mantendo o algoritmo cache-oblivious.
Dado um vetor de pesos w e um vetor de lucros p, pode-se definir Kp(i) como sendo
o lucro mximo obtido com uma mochila de tamanho i. Logo, Kp(i) pode ser computado
pela seguinte relao de recorrncia:
(
0
se i = 0,
Kp(i) =
(5.1)
max1jn {pj + Kp(i wj )|wj i} se i 6= 0.
Nas prximas sees, iremos descrever os algoritmos tradicionais e a verso cacheoblivious que minimiza o nmero de cache misses. Aps, veremos as verses que se
aproveitam das dominncias e ento iremos provar a complexidade de cache-misses para
cada algoritmo. Finalmente, iremos apresentar os resultados obtidos.
5.1
Soluo Tradicional
31
32
5.2
Soluo Cache-Oblivious
Uma outra opo equivalente para resolver o problema da mochila calcular os elementos de Kp da seguinte maneira: para cada tipo de item i, i {1, ..., n}, calcule o
mximo lucro obtido para cada tamanho de mochila. O algoritmo a seguir descreve essa
modificao no algoritmo original.
33
5.3
Dominncias
A fim de utilizarmos as informaes sobre dominncias explicadas na seo 4.3, necessrio fazer algumas mudanas no algoritmo. Utilizando a abordagem de programao
dinmica, trs dos quatro tipos de dominncias so testados em tempo de execuo: a
34
35
Note que o algoritmo altera os vetores de entrada. Para evitar esse problema, necessrio fazer uma cpia do vetor dos pesos e uma do vetor dos lucros durante a inicializao
do algoritmo. Alm disso, tambm necessrio guardar os ndices originais durante o
algoritmo para podermos recuperar a seqncia de itens usados na soluo.
Para podermos executar o algoritmo 5.2 sem modificaes, necessrio fazer a ordenao dos vetores w e p novamente, para podermos recuperar os itens corretos.
No algoritmo, alm de K e Kp, um vetor extra utilizado. O vetor A contm o ndice
do item na configurao de itens originais, antes de qualquer troca em decorrncia de
descobertas de itens dominados acontea. Em (9) testado se o item menor do que o
tamanho da mochila sendo analisada. Se ele for menor, se analisa o item normalmente.
Caso ele tenha o mesmo tamanho da mochila atual, ele pode ser um item dominado. Em
(14), testado justamente isso. Se o item for dominado, ele posto para fora dos itens
sendo considerados (1618), e o indicador do comeo do vetor de itens atualizado (19).
A adaptao no algoritmo 5.3 para utilizar as dominncias muito mais simples. Basta
acrescentar um teste antes de executar o lao interno, verificando se o lucro do item a ser
utilizado (pi ) maior do que o lucro j calculado para a capacidade Kp[wi ], se ele for
menor nunca ser utilizado, e se pode passar para o prximo item. A seguir apresentado
o algoritmo para essa verso.
36
5.4
Com isso, temos que para cada iterao de s em que a cache j est cheia, n ZL cache
misses ocorrero. Entretanto, a cada L iteraes, porm, todas as linhas da cache devero
j ter sido renovadas, com isso acrescenta-se n cache misses a cada L iteraes. Com
isso, aumentamos em WLn o nmero total de cache misses.
Logo, como temos no mximo W iteraes de s, teremos W (n ZL ) + WLn cachemisses ao todo. Como n ZL (n), e WLn (nW ), teremos uma complexidade
pessimista de cache-miss de (nW ).
37
38
um deslocamento entre os itens avaliados constante para cada iterao interna (como visto
na Figura 5.1), ela se aproveita da localidade da cache, dividindo todo o trabalho do
preenchimento e da atualizao da cache por L.
39
5.5
Resultados Computacionais
Instncias
Todas as instncias geradas so aleatrias, distribudas uniformemente entre um intervalo de (wmin , wmax ) para os pesos e de (pmin , pmax ) para os lucros. Os valores wmin ,
wmax , pmin e pmax so informados pelo usurio para o gerador, junto com o tamanho
da mochila W e o nmero de itens n. O gerador foi implementado em Python, utilizando o mdulo random para o gerar os nmeros aleatrios. Para esse tipo de instncia,
existem trs casos diferentes utilizados na literatura (MARTELLO; TOTH, 1990). O
primeiro o no correlacionado, onde tanto peso quanto lucro de um item so gerados
totalmente aleatrios. No segundo caso, o fracamente correlacionado, os pesos so escolhidos aleatoriamente, enquanto que os lucros so formados ao somarmos wi a um
valor aleatrio escolhido entre um intervalo [, +], para constantes e , ou seja,
pi = wi + brandom() 2c 2, onde random() tem como sada um valor aleatrio real entre [0, 1]. Finalmente, para o caso fortemente correlacionado, os pesos so
escolhidos aleatoriamente, enquanto que os lucros derivam diretamente do peso, sendo
pi wi + , para constantes e .
Figura 5.3: Item i como um ponto no plano. Qualquer ponto nas reas destacadas ou
dominam o item i ou so dominados por ele.
40
Comparaes
Neste trabalho so comparados o nmero de cache misses ocorridos para os algoritmos simples e o tempo de execuo de cada algoritmo apresentado. Na tabela 5.1, so
apresentadas as abreviaes utilizadas nas comparaes.
Tabela 5.1: Abreviaes dos Algoritmos
Abreviao
T
CO
domT
domCO
Descrio
Algoritmo Tradicional (sem Dominncias)
Algoritmo Cache-Oblivious (sem Dominncias)
Algoritmo Tradicional (com Dominncias)
Algoritmo Cache-Oblivious (com Dominncias)
Algoritmo
5.1
5.3
5.4
5.5
(Z=1024,L=32)
64, 683M
24, 899M
2, 598
(Z=2048,L=32)
56, 049M
24, 889M
2, 252
(Z=4096,L=64)
52, 577M
12, 442M
4, 226
(Z=8192,L=64)
38, 153M
12, 440M
3, 066
Ao analisarmos o nmero de cache-misses ocorridos em ambos algoritmos, podemos notar que h uma reduo muito significativa no nmero de cache-misses no algoritmo 5.3, como esperado. Outra observao necessria que o total de cache-misses do
algoritmo 5.3 (CO) diminui pela metade quando dobramos
o tamanho de L. Isso indica
que na prtica o nmero de cache-misses O nW
como
comprovado
pelo clculo da
L
complexidade de cache-misses do algoritmo.
41
Figura 5.4: Nmero de cache misses para diferentes configuraes de cache com uma
entrada de W = 250.000 e n = 10.000 para os algoritmos 5.1 (T) e 5.3 (CO)
Figura 5.5: Nmero de cache misses para as verses que utilizam Dominncia para diferentes configuraes de cache com uma entrada de W = 10.000.000 e n = 10.000 para
os algoritmos 5.1 (T) e 5.3 (CO)
Ao compararmos a Figura 5.4 com a Figura 5.5, notamos que a diferena do nmero
de cache misses aumentou muito, indicando que a adaptao para utilizao de dominncias acentua as diferenas dos algoritmos. Pela dominao dos itens, eles acabam por
ficarem muito mais espaados entre si, caindo no pior caso para o algoritmo normal (a
adaptao para utilizar dominncias tambm tem o mesmo pior caso).
Entretanto, de nada adianta o nmero de cache-misses ser menor se o tempo de execuo no obtiver nenhuma melhora. Dessa forma, foram feitos testes para medir o desempenho desses algoritmos que no utilizam informao de dominncia. Devido ao alto
42
Tabela 5.3: Nmero de cache-misses de cada algoritmo com dominncia (em milhes)
para cada configurao de cache (Z,L)
Algoritmo
T (5.1)
CO (5.3)
Fator T/CO
(2048,32)
4832.63M
703.40M
6, 87
(8192,64)
4266.48M
351.47M
12, 14
(32768,128)
3230.68M
175.14M
18, 45
(65536,256)
2236.73M
87.61M
25, 53
tempo de execuo desses algoritmos, e pelo fato deles no serem utilizados na prtica,
testes com um menor W e n foram realizados.
Figura 5.6: Tempo de execuo dos algoritmos 5.1 (T) e 5.3 (C), em escala logartmica.
Tabela 5.4: Tempo de execuo (em segundos) e Speed-Up dos algoritmos sem Dominncias.
W
0, 1 M
0, 1 M
1M
1M
10 M
10 M
n
1.000
10.000
1.000
10.000
1.000
10.000
T
0, 788
8, 960
9, 009
98, 870
100, 200
1242, 341
CO
0, 410
3, 710
3, 780
36, 820
36, 942
362, 36
Speed-Up (T/CO)
1, 92
2, 42
2, 38
2, 69
2, 71
3.43
Comparando os testes na Tabela 5.4 e no grfico da Figura 5.6, observarmos uma acelerao no tempo de execuo de at 3, 43 vezes utilizando o algoritmo 5.3 (CO). Isso
significa que o CO demora somente 29% do tempo que o algoritmo 5.1 (T) leva para
computar a sua soluo. Embora essa acelerao seja significativa, ela no ter sentido
se no se verificar uma acelerao semelhante nos algoritmos que utilizam dominncias
para a diminuio da entrada.
43
Figura 5.7: Tempo de execuo dos algoritmos 5.4 (domT) e 5.5 (domCO), em escala
logartmica.
Tabela 5.5: Tempo de execuo (em segundos) e Speed-Up dos algoritmos com Dominncias
W
1M
10 M
10 M
100 M
100 M
n
10.000
1.000
10.000
1.000
10.000
domT
1, 82
5, 55
27, 57
47, 53
304, 50
domCO
1, 21
3, 92
13, 33
30, 47
141, 36
Speed-Up (domT/domCO)
1, 50
1, 42
2, 07
1, 56
2, 15
44
CONSIDERAES FINAIS
Nesse trabalho foi apresentado um estudo sobre o modelo de cache ideal e as suas
propriedades e demonstrado que o modelo factvel com a maioria dos computadores
atuais. Tambm foram estudados e implementados algoritmos cache-oblivious propostos
na literatura, alm de apresentados resultados e limitaes desses algoritmos. Alm disso,
um novo algoritmo cache-oblivious foi proposto para o Problema da Mochila Ilimitado, e
sua complexidade pessimista de cache-misses foi analisada.
Inicialmente, foi realizada uma apresentao de conceitos bsicos sobre memrias cache e hierarquias de memria. Ento, a ttulo de comparao com o modelo de cache
ideal, foram apresentados o modelo RAM e o modelo de memria externa. Aps, foi
apresentado o modelo de cache ideal. Todos os algoritmos utilizados aqui tiveram suas
complexidades provadas utilizando esse modelo. O modelo apresenta algumas caractersticas que geralmente no so encontradas nas mquinas atuais, tais como a estratgia
de substituio tima e a cache totalmente associativa. Sendo assim, foi mostrado para
cada caso que os resultados provados para o modelo so vlidos para a grande maioria de
configuraes de cache encontradas na atualidade.
Foram apresentados algoritmos cache-oblivious propostos na literatura, expondo resultados prticos das implementaes desses algoritmos, bem como as limitaes deles.
Os algoritmos apresentados foram o da Maior Subseqncia Comum (Longest Commom
Subsequence), a Multiplicao de Matrizes e o Problema do Gap (Gap Problem). Em
todos eles ficou claro que apesar de o algoritmo ser cache-oblivious para o clculo da
complexidade, preciso quebrar o pressuposto de no ter nenhuma informao sobre a
cache para se obter resultados satisfatrios na prtica.
A seguir foi introduzido brevemente o problema do Empacotamento Unidimensional
(Bin-Packing Problem), com o intuito de dar uma motivao para a escolha do Problema
da Mochila Ilimitado para ser analisado em termos de eficincia de cache. Assim, foram
introduzidas as principais heursticas e metaheursticas para resolver o problema do binpacking, e mencionado como soluo exata a tcnica de gerao de colunas e onde que o
Problema da Mochila Ilimitado aparece nesse contexto.
Foi definido formalmente as variantes mais importantes do Problema da Mochila, comentando sobre a importncia do problema como um todo. O problema NP-Completo, e
at hoje o melhor algoritmo conhecido tem complexidade de tempo de O(nW ), que um
algoritmo pseudo-polinomial no tamanho da mochila, uma vez que a entrada (log W ).
Para o Problema da Mochila Ilimitado, em que a quantidade de cada tipo de item no limitada, o conceito de dominncia de itens, que permitem uma grande reduo no nmero
de itens computados de fato, foi apresentado, assim como o porqu dessas caractersticas
no alterarem as complexidades do problema.
O algoritmo tradicional para a soluo do Problema da Mochila Ilimitado e sua ver-
45
so cache-oblivious foi apresentada, assim como verses desses algoritmos que fazem
uso de dominncias para reduzir o nmero de itens computados. Ento foi provado a
complexidade pessimista de cache-misses tanto para o algoritmo tradicional quanto para
o algoritmo cache-oblivious.
Finalmente, foram apresentados resultados prticos para as implementaes dos algoritmos desenvolvidos. Nesses resultados, ficou claro que o algoritmo cache-oblivious
apresentou um desempenho consideralvemente melhor que o algoritmo tradicional, tanto
utilizando ou no dominncias. Outro ponto importante desse algoritmo o fato dele
ser cache-oblivious tambm na prtica, ao contrrio da maioria dos algoritmos cacheoblivious propostos na literatura. Ainda, algoritmo cache-oblivious com dominncias
extremamente mais simples do que o algoritmo tradicional com dominncias, alm de no
alterar a entrada (o que causa a necessidade de se ordenar a entrada uma segunda vez ao
trmino do algoritmo).
6.1
Trabalhos Futuros
46
REFERNCIAS
47
MARTELLO, S.; TOTH, P. Knapsack Problems. Algorithms and Computer Implementations. Chichester: John Wiley and sons, 1990. 296p.
NETHERCOTE, N.; SEWARD, J. Valgrind: a framework for heavyweight dynamic binary instrumentation. In: ACM SIGPLAN 2007 CONFERENCE ON PROGRAMMING
LANGUAGE DESIGN AND IMPLEMENTATION (PLDI 2007), 2007. Proceedings. . .
[S.l.: s.n.], 2007.
PROKOP, H. Cache-oblivious algorithms. 1999. Tese (Doutorado em Cincia da Computao) MIT.
STRASSEN, V. Gaussian elimination is not optimal. Numerische Mathematik, [S.l.],
v.14, n.3, p.354356, 1969.
VITTER, J. S. External Memory Algorithms and Data Structures: dealing with massive
data. ACM Computing Surveys, [S.l.], v.33, n.2, Feb. 2007.
WATERMAN, M. S. Introduction to Computational Biology. [S.l.]: Chapman and Hall,
London, UK, 1995.