• Nenhum resultado encontrado

5.3 M´ınimo grau

5.3.4 M´ınimo grau aproximado

Tal como o MD, o algoritmo do m´ınimo grau aproximado (AMD: approximate minimum degree) [ADD96] n˜ao utiliza a elimina¸c˜ao m´ultipla do MMD. A id´eia do AMD ´e calcular um limite superior para os graus dos n´os a serem atualizados a um custo mais baixo do que o c´alculo do grau externo correto. Este limite superior ´e definido como grau aproximado agrau e ´e usado na escolha do snode a ser eliminado.

Sabe-se que o peso de um snode consiste no n´umero de n´os indisting¨u´ıveis que comp˜oem este supernode. Pode-se definir o peso de um enode e como a soma dos pesos dos snodes adjacentes a ele no grafo quociente corrente, ou seja:

peso(e) = X

s∈sadj(e)

peso(s).

Seja r um snode cujo grau precisa ser atualizado. O grau de r n˜ao pode ser maior que a soma dos pesos de todos os snodes e enodes adjacentes a ele no grafo quociente corrente. Por´em, o conjunto dos snodes adjacentes aos enodes de eadj(r) pode se sobrepor, fazendo com que o limite se torne muito acima do real e causando um gap. Este gap pode ser reduzido calculando-se um valor dif(e) associado com cada enode para remover algumas destas sobreposi¸c˜oes nos conjuntos adjacentes.

Seja uk o n´o a ser eliminado no passo k. Ap´os absorver todos os seus enodes vizinhos,

seu novo peso torna-se a soma dos pesos de todos os snodes r ∈ alcanceGk−1(uk):

peso(uk) =

X

r∈alcanceGk−1(uk)

peso(r).

Como cada snode r no conjunto alcan¸c´avel acima ´e um vizinho do enode uk em Gk,

o valor peso(uk) ser´a adicionado ao grau aproximado de r. Assim, para todos os enodes

e ∈ eadj(r) onde e 6= uk, inclu´ımos no peso(e) apenas a contribui¸c˜ao dos pesos dos snodes

disjuntos daqueles que est˜ao no conjunto alcan¸c´avel.

A fun¸c˜ao dif(e) para enodes e ∈ eadj(alcanceGk−1(uk)) no grafo quociente Gk pode ser

definida por: dif(e) =    peso(e) se e = uk, peso(e) −P

r∈(alcanceGk−1(uk)∩sadj(e))peso(r) se e 6= uk.

O grau aproximado de r ∈ alcanceGk−1(uk) ´e calculado da seguinte forma:

agrau(r) = peso(uk) + X s∈sadj(r) peso(s) + X e∈eadj(alcance(uk)) dif(e).

O algoritmo ´e apresentado na Figura 5.24. Devido a grande dificuldade em se encontrar interse¸c˜ao entre conjuntos, a elimina¸c˜ao m´ultipla normalmente n˜ao ´e implementada no AMD. Assim, o n´umero total de itera¸c˜oes do algoritmo ´e a seguinte [HEKP01]:

O   np X k=1  |adj(uk)| + X e∈eadj(uk) |sadj(e)| + X r∈alcance(uk) |eadj(r)|    ,

onde np ´e o n´umero de supernodes eliminados (≤ n´umero de n´os do grafo) e uk corresponde

ao supernode eliminado na itera¸c˜ao k.

Na express˜ao acima, o segundo e o terceiro termos juntos possuem uma complexidade da ordem O(m). Assim, a complexidade do algoritmo AMD ´e O(n(m + m)) = O(nm), que ´e menor que a complexidade dos algoritmos MD e MMD (O(n2m)). Por isto, o AMD foi

Algoritmo AMD G0 = G;

Calcular supernodes iniciais e seus pesos; para cada snode r ∈ G0 fa¸ca

grau(r ) ← 0;

para cada snode s ∈ sadj(r) fa¸ca grau(r ) ← grau(r ) + peso(s); visita ← 0; k ← 0; t ← 0;

enquanto existem snodes em Gk fa¸ca

k ← k + 1 ;

Escolher snode de m´ınimo grau aproximado uk;

kpeso ← peso(uk);

Substituir snode uk pelo enode uk;

t ← t + 1 ; alcance ← {}; peso(uk) ← 0;

{ 1a. Incluir snodes adjacentes a uk no conjunto alcan¸c´avel }

para cada snode r ∈ sadj(uk) fa¸ca

visita(r ) ← t; alcance ← alcance ∪ r ; peso(uk) ← peso(uk) + peso(r );

sgrau(r ) ← sgrau(r ) − kpeso;

{ 1b. Incluir snodes vizinhos aos enodes adjacentes a uk no conjunto alcan¸c´avel }

para cada enode e ∈ eadj(uk) fa¸ca

para cada snode r ∈ sadj(e) com visita(r) < t fa¸ca visita(r ) ← t; alcance ← alcance ∪ r ;

peso(uk) ← peso(uk) + peso(r );

uk absorve e formando um ´unico enode;

Calcular novos supernodes; Atualizar Gk; k ← k + 1 ;

{ 2a. Calcular dif(e) para enodes adjacentes aos snodes do conjunto alcan¸c´avel } para cada snode r ∈ alcance fa¸ca

para cada enode e ∈ eadj(r), sendo e 6= uk fa¸ca

se visita(e) < t ent˜ao

dif (e) ← peso(e) − peso(r ); visita(e) ← t; sen˜ao dif (e) ← dif (e) − peso(r );

{ 2b. Calcular grau aproximado dos snodes pertencentes ao conjunto alcan¸c´avel } para cada snode r ∈ alcance fa¸ca

agrau(r ) ← grau(r ) + peso(uk) − peso(r );

para cada enode e ∈ eadj(r), sendo e 6= uk fa¸ca

agrau(r ) ← agrau(r ) + dif (e); np ← k ;

Influˆencia da reordena¸c˜ao no

CCCG(η)

Este cap´ıtulo tem como finalidade analisar a influˆencia da reordena¸c˜ao de matrizes es- parsas no desempenho m´etodo CCCG(η). O efeito de reordena¸c˜oes sobre m´etodos iterativos precondicionados tem sido discutido por muitos artigos. Normalmente, a primeira escolha baseia-se em algoritmos que s˜ao especializados na redu¸c˜ao do preenchimento criado pelo precondicionador. Entretanto, como pode ser visto em [DM89], os algoritmos que reduzem a largura de banda da matriz tamb´em podem acelerar a convergˆencia da solu¸c˜ao, apesar de demandarem um maior espa¸co de armazenamento. Desta forma, pretende-se verificar situa¸c˜oes onde um determinado tipo de reordena¸c˜ao torna o CCCG(η) mais eficiente.

6.1

Descri¸c˜ao da implementa¸c˜ao

O sucesso de algoritmos para computa¸c˜ao de matrizes esparsas depende crucialmente da qualidade de sua implementa¸c˜ao. Por este motivo, estes algoritmos foram analisados detalhadamente nos cap´ıtulos anteriores. Toda a implementa¸c˜ao foi feita usando a lingua- gem FORTRAN-77 [Ltd90], j´a que o objetivo do trabalho ´e incorporar os algoritmos de reordena¸c˜ao ao c´odigo original do CCCG(η) escrito em FORTRAN e disponibilizado pelo autor [Cam95]. Como esta linguagem foi projetada para c´alculos matem´aticos (suporta n´umeros complexos), torna-se muito eficiente no contexto de algoritmos num´ericos. Al´em disto, existem muitos c´odigos dispon´ıveis escritos em FORTRAN e muitas bibliotecas di- gitais. Com este ganho em eficiˆencia, foi poss´ıvel realizar testes com matrizes de grande porte.

O algoritmo de contagem de colunas, o qual utiliza o n´umero de elementos n˜ao nulos de cada coluna para realizar a ordena¸c˜ao, foi o mais simples de ser implementado. Como a estrutura de dados utilizada pelo CCCG(η) ´e a coluna esparsa compactada (se¸c˜ao 4.1.2), a maior dificuldade encontrada na implementa¸c˜ao do algoritmo foi contar os elementos da parte triangular superior da matriz. Estes elementos n˜ao s˜ao armazenados pela estrutura e foi necess´ario descobrir a informa¸c˜ao da sua coluna atrav´es da sua simetria com os elementos da matriz triangular inferior para fazer a contagem.

Em rela¸c˜ao ao m´ınimo grau aproximado, foi utilizado o c´odigo AMDBAR que se encontra dispon´ıvel no reposit´orio da NETLIB [DADR]. Esta implementa¸c˜ao ´e muito conhecida pela sua eficiˆencia. Foi necess´ario fazer uma adapta¸c˜ao entre este c´odigo e o CCCG(η), j´a que suas estruturas de armazenamento eram completamente diferentes. Enquanto o CCCG(η) utiliza a coluna esparsa compactada, o AMDBAR utiliza uma estrutura que armazena todos os elementos n˜ao nulos da matriz, com exce¸c˜ao da diagonal. Devido ao tamanho das matrizes de testes, esta montagem da nova estrutura a partir do formato CCCG foi feita buscando minimizar ao m´aximo a quantidade de mem´oria necess´aria.

Quanto ao Cuthill-McKee reverso, o Instituto de Pesquisa European Synchrotron Radi- ation Facility [PD] disponibiliza o c´odigo CUTCHO que usa a mesma heur´ıstica estudada na se¸c˜ao 5.2. Da mesma forma que o m´ınimo grau, foi necess´ario montar a estrutura utilizada pelo CUTCHO a partir do CCCG, j´a que todos os elementos n˜ao nulos da matriz s˜ao utilizados no caminhamento proposto no Cuthill-McKee reverso.

Finalmente, a partir do vetor de ordena¸c˜ao resultante destes trˆes algoritmos, foi necess´ario criar uma vers˜ao especial do Quicksort n˜ao recursivo para reordenar a matriz, tal como foi visto na se¸c˜ao 4.3. A dificuldade em se reordenar os elementos na estrutura de coluna esparsa compactada est´a na mudan¸ca de posi¸c˜ao entre os elementos da parte triangular inferior para a parte triangular superior da matriz e vice-versa. O Quicksort teve que ser adaptado para prever a posi¸c˜ao exata onde cada elemento deveria ficar, armazenando somente a parte inferior da nova matriz no final da reordena¸c˜ao.

Documentos relacionados