• Nenhum resultado encontrado

CAPÍTULO 5 EXPERIMENTAÇÃO E ANÁLISE DOS RESULTADOS

5.2 Metodologia de Experimentação

Seqüências biológicas referem-se ao encadeamento de resíduos que formam a estrutura

primária de determinadas macromoléculas que fazem parte do metabolismo dos seres

vivos. Elas são polímeros formados pelo encadeamento de 4 nucleotídeos ou de 20

aminoácidos. Dentre e as de maior interesse estão as proteínas e os ácidos nucléicos

(ácidos ribonucléicos - RNA - e ácidos desoxirribonucléicos - DNA). As moléculas

(seqüências) de de DNA contém subseqüencias denominadas genes que codificam a

informação necessária para a fabricação das proteínas do organismos. Várias moléculas

de DNA são agrupadas para formarem os cromossomas, e o conjunto de todos os

cromossomas formam o genoma de um organismo.

Das estatísticas publicadas pelo Swiss-Prot group (2004) sabe-se que as moléculas de

proteínas, anotadas e contidas no banco de dados Swiss-Prot, são compostas em média

por seqüências de 368 aminoácidos, sendo a menor seqüência composta por 2

aminoácidos e a maior por 8.797 aminoácidos. Veja na Figura 5.1 a seguir o gráfico da

distribuição do tamanho das seqüências de proteínas. Esses dados motivam a realização

FIGURA 5.1 - Distribuição do tamanho das seqüências de proteínas.

de experimentos para o alinhamento de seqüências biológicas relativamente pequenas.

FONTE: Adaptada de figura do Swiss-Prot group (2004).

Segundo 01) o

tamanho médio de um gene consiste do encadeamento de 3.000 bases, formando uma

dados do Human Genome Mangement Information System (1992 e 20

seqüência primária. O maior gene humano conhecido, o dystrophin, é composto por 2,4

milhões de bases. As moléculas de DNA no genoma humano são arranjadas em 24

cromossomas distintos com tamanhos variando de 50 a 250 milhões de pares de bases.

Os genomas dos diferentes organismos possuem uma grande variação em tamanho, o

menor genoma conhecido contêm cerca de 600 mil pares de bases (bactéria), enquanto

os genomas do rato e do homem contêm cerca de 3 bilhões de pares de bases. Esses

dados motivam a realização de experimentos para o alinhamento de seqüências

biológicas relativamente grandes, pois já se fala em comparação de genomas inteiros.

Foi adotada nesse trabalho uma posição semelhante àquela adotada por Tarnas e

Hughey (1998), pag. 404: “... Para SAM rodando numa workstation, foi decidido que o

algoritmo de nível , que reduz o uso de espaço pela raiz quadrada do

comprimento da seqüência, deveria ser suficiente ...”. Pois experimentos, para a análise

de performance a posteriori, com algoritmos de PD com 2-níveis de checkpoints,

permitirão comparações com a análise de performance a posteriori já realizadas e

relatadas por Grice et al. (1995 e 1997), Tarnas e Hughey (1998) e Wheeler e Hughey

(2000).

2

=

L

Tendo como base os relatos em Grice et al. (1995 e 1997), Tarnas e Hughey (1998) e

Wheeler e Hughey (2000) e a pesquisa efetuada nesse trabalho, pode-se concluir que,

quando o interesse reside justamente na utilização dos algoritmos de PD de L-níveis de

checkpoints em computações que exijam retrocedimento completo, a escolha deve

recair naqueles com checkpoints unidimensionais por linhas ou por colunas. Isto é o

melhor que se pode vislumbrar até o momento, a não ser que alguma percepção nova

lance luz sobre o assunto, pois as demais versões são mais dispendiosas em termos de

espaço e de tempo – exigem o dobro de memória e adicionam mais complexidade no

tratamento e armazenagem dos checkpoints e nas re-computações das seções da matriz

de PD. Entretanto, os resultados da análise a priori dos algoritmos de L-níveis de

checkpoints bidimensionais indicam que esses assintoticamente requerem menos espaço

do que os algirmos de checkpoints por linhas e apresentam menor queda de

desempenho.

Desta forma os experimentos para análise de performance a posteriori se concentraram

somente nos algoritmos de Viterbi com L-níveis de checkpoints, particularmene nos de

2-níveis de checkpoints.

Os algorimos de PD que adotam o paradigma de checkpoints como estratégia, ou

método de economia de espaço, permitem uma amplitude de escolhas dentro do

intervalo de espaço disponível, que possibilitam fazer o balanceamento (tradeoff) entre

requerimentos de espaço e de tempo para computar uma determinada matriz de PD.

Para HMMs com um determinado número de nós e tamanhos de seqüências a serem

analisadas, a penalidade de performance pode ser escolhida, conforme o número níveis

de checkpoints adotados, levando-se em consideração toda a hierarquia de memória e,

principalmente, a quantidade de memória de trabalho disponível – primariamente a

memória RAM e secundariamente a memória cache.

Os experimentos objetivaram comparar o desempenho dos seguintes algoritmos, no

alinhamento de seqüências biológicas pequenas (seqüências de proteínas com tamanho

médio de 368 símbolos e um alfabeto de 20 símbolos) e grandes (seqüências de DNA

contendo milhôes de símbolos e um alfabeto de 4 símbolos): o de Viterbi básico; o de

Viterbi com 2-níveis de checkpoints por linhas e particionamento móvel de memória; o

de Viterbi com 2-níveis de checkpoints bidimensionais por linhas e colunas com

retrocedimento restrito e particionamento fixo de memória; e o de Viterbi com 2-níveis

de checkpoints por diagonais com retrocedimento restrito e particionamento móvel de

memória.

No alinhamentos de seqüências grandes pretendeu-se verificar como os algoritmos

desempenham até o início de paginação. Também pretendeu-se verificar para que

tamanhos de seqüências esses algoritmos causam paginação excessiva num PC típico,

inviabilizando a obtenção de resultados para seqüência acima deste tamanho.

Finalmente, verificar se o algoritmo de Viterbi com checkpoints bidimensionais por

linhas e colunas com retrocedimento restrito e particionamento fixo de memória utiliza

eficientemente o sistema de memória, particularmente no uso da memória cache.

Entretanto o interesse maior residiu justamente na comparação entre o algoritmo de

Viterbi com 2-níveis de checkpoints bidimensionais por linhas e colunas com

retrocedimento restrito e particionamento fixo de memória e o algoritmo de Viterbi com

2-níveis de checkpoints por diagonais com retrocedimento restrito e particionamento

móvel de memória.

Para uma melhor discriminação na comparação entre esses dois algoritmos de interesse

primário nos experimentos foram utilizadas duas configurações de requerimentos de

memória. Primeiro, foi utilizada, pelo menos em suposição, uma mesma quantidade de

memória para os dois algoritmos, justamente a quantidade mínima de memória

requerida pelo algoritmo de Viterbi com 2-níveis de checkpoints por diagonais com

retrocedimento restrito e particionamento móvel de memória. Segundo, a memória do

algoritmo de Viterbi com 2-níveis de checkpoints bidimensionais por linhas e colunas

com retrocedimento restrito e particionamento fixo de memória será reduzida pela

metade.

Esperou-se mostrar com os experimentos, que o algoritmo de Viterbi com 2-níveis de

checkpoints bidimensionais por linhas e colunas com retrocedimento restrito e

particionamento fixo de memória seja mais rápido, também em aplicações práticas, que

o algoritmo de Viterbi com checkpoints por diagonais com retrocedimento restrito e

particionamento móvel de memória tanto para o alinhamento seqüências pequenas, com

tamanhos médios de cerca de 368 resíduos (proteínas), quanto para seqüências de

comprimentos variando de 2.000 a centenas de milhares de resíduos (DNAs,

cromossomas, genomas).

Foram realizados três conjuntos de experimentos com esses algoritmos, nos quais são

considerados os tempos de CPU e os tempos totais de execução (wall time). No

primeiro experimento foi considerado um HMM com 2.000 nós e seqüências de de

comprimentos crescentes, dados por uma progressão aritmética com razão 2.000,

iniciando-se com uma seqüência de 2.000 resíduos. No segundo experimento foi

considerado um HMM com 2.000 nós e seqüências com comprimentos crescentes,

dados por uma progressão geométrica de razão 2, iniciando-se com uma seqüência de

2.000 resíduos. No terceiro experimento foi considerado um HMM com 368 nós e

seqüências com comprimentos crescentes de 100 a 1000 símbolos, dados por uma

progressão aritmética com razão 100.

Pode ser considerado a possibilidade do encadeamento ou concatenação de várias

seqüências de proteínas para serem comparadas de uma única vez a um HMM,

formando assim uma seqüência grande de resíduos de aminoácidos. Desta forma,

unicamente para facilitar e simplificar a programação e a experimentação foi

considerado nesses experimentos somente o alfabeto de aminoácidos, contendo 20

símbolos. Os dados usados como amostras nesses experimentos foram gerados

aleatoriamente com um alfabeto composto de 20 símbolos, de forma semelhante àqueles

dados dos experimentos efetuados por Powell et al. (1999). As strings para o

treinamento dos HMMs foram geradas da seguinte forma: primeiro uma string A foi

gerada aleatoriamente com probabilidades dadas pelas freqüências f(i) (freqüências de

Dayhoff) de occorrência dos 20 aminoácidos (função massa de probabilidade para

aminoácidos) obtidas do Banco de Dados SwissProt 34, considerando 21.210.388

raidicais (Eddy, 2003) e, então, as demais strings, as strings Bs, foram geradas de A

com probabilidades fixas de 0,2 para mudança, de 0,1 para inserção e de 0,1 para

remoção (serão permitidas discordâncias para o mesmo caractere).

As strings usadas nos experimentos para alinhamento contra os HMMs foram geradas

aleatoriamente com probabilidades dadas pelas freqüências f(i) (freqüências de

Dayhoff) de occorrência dos 20 aminoácidos (função massa de probabilidade para

aminoácidos) obtidas do Banco de Dados SwissProt 34, considerando 21.210.388

raidicais (Eddy, 2003).

Foi realizado, também, uma simulação do comportamento assintótico dos requerimentos

de espaço dos algoritmos considerados nos conjuntos de experimentos 1 e 2.

Os experimentos deste trabalho foram realizados num PC rodando o sistema

operacional Linux Slackware 9.1, sob o ambiente KDE 3.1, com processador Atlhom

K7 de 800 MHz , 512 Mb de RAM, 256 Kb de cache L2 e 64 Kb de cache L1 – 32 Kb

para dados e 32 Kb para instruções, e com espaço reservado para swap limitado em

2.048 Mb. Os programas foram escritos em C ANSI e compilados usando a versão

3.2.2 do Compilador GCC da GNU.

Documentos relacionados