• Nenhum resultado encontrado

Em (TRUONG,2014) foram propostas quatro implementações distintas para

GPU do algoritmo Needleman-Wunsch para o múltiplo alinhamento de pares de

sequências de DNA. As implementações estão disponíveis para download em:

http://nps.missouri.edu/nps_wiki/index.php/Code. Em todas elas foi feita a opção

pelo uso do gap linear.

As soluções adotadas nestas propostas são comparadas ao Rodinia-NW, uma implementação open-source "baixada" a partir do Rodinia Benchmark Suite (RODINIA,2015) que disponibiliza o kernel de diversos algoritmos para aplicações

HPC em plataformas GPUs e multi-core CPUs.

Os kernels das implementações propostas pelo artigo foram integrados à uma estrutura MPI para o desenvolvimento de um Cluster CPU-GPU. Esta solução distribuída focou Clusters homogêneos e heterogêneos, este último, composto por

nós com diferentes configurações de hardware e capacidades de processamento.

Na descrição do cluster, bem como, na apresentação dos resultados com ele obtidos, não foi definido qual das quatro implementações foi, de fato, a escohida para as GPUs, uma vez que, segundo o artigo, poderia ser qualquer uma delas.

Assim, será apresentada a descrição detalhada de uma destas quatro possíveis abordagens de implementação do algoritmo NW, no caso, a TiledDScan-mW.

TiledDScan-mNW

Esta implementação segue a mesma abordagem usada no Rodinia-NW. Como o cálculo de cada elemento da matriz PD utiliza três outros adjacentes, para melhorar o desempenho, a idéia foi concentrar a utilização da memória compartilhada (shared). Assim, a matriz PD é particionada em blocos (denominados

tiles) e cada tile ocupa o espaço disponibilizado pela memória compartilhada.

Operando em modo diagonal, múltiplas invocações do kernel ocorrem durante o processo de alinhamento. Para cada uma delas, múltiplas matrizes PD são processadas, concorrentemente, utilizando diferentes blocos de threads em diferentes streaming multiprocessors (SMs). A figura 3.1 apresenta esta estrutura num processo com três alinhamentos simultâneos.

Na primeira iteração, os tiles do canto superior-esquerdo das três matrizes são processados, em paralelo, por três blocos-threads que são mapeados em três

SMs. Na segunda iteração, os tiles da segunda diagonal das matrizes são,

simultaneamente, processados em seis blocos-threads mapeados do SM1 até o

SM6 e, assim, sucessivamente. Dessa forma, ocorre a exploração do paralelismo

em dois níveis: (i) através da threads dentro dos tiles e (ii) diferentes tiles na mesma diagonal são processados, concorrentemente, por blocos distintos. Threads pertencentes ao mesmo bloco utilizam, temporariamente, os dados armazenados na

figura 3.1 - Configuração TiledDScan-mNW

memória compartilhada. Ao final do processamento de um tile, os dados são enviados, em modo coalescido, à memória global.

As duas principais otimizações da implementação TiledDScan-mNW em relação à Rodinia-NW, foram:

1) Considerando m alinhamentos, o número de invocações do kernel foi reduzido de um fator m e, para cada um deles, o número de blocos-threads é acrescido de um fator m. Desta forma, ocorrem duas vantagens: (i) a redução no número de invocações do kernel, reduzindo a participação do seu overhead no tempo total de execução e (ii) um maior número de threads simultâneas implica numa maior utilização dos recursos da GPU.

2) Na implementação Rodinia-NW, a matriz PD é inicializa na CPU e, em seguida, transferida para a GPU. O que, dependendo da quantidade de sequências e de seus tamanhos, pode consumir bastante tempo. A otimização, neste caso, é inicializar a matriz na GPU.

Uma outra otimização implementada pelas quatro abordagens propostas foi a utilização da pinned memory nos processos de transferência de dados entre a

CPU (host) e a GPU.

Análise de desempenho

Para avaliar o desempenho obtido com uma única GPU, foram utilizados

diversos dispositivos classificados em dois grupos (High-end e Low-end GPUs),

conforme apresenta a Tabela 3.1.

Tabela 3.1 - High-end e Low-end GPUs

Nos experimentos, inclusive, no Cluster foi utilizado um conjunto de dados com cerca de 25.000 sequências do gene bacteriano 16S rDNA, gerados a partir do

Ribosomal Database Project (COLE,2009). Este gene, com cerca de 1.536 bps, é

bastante usado nos estudos da filogenia e taxonomia de bactérias pelo fato de estar presente em quase todas as sequências genéticas das mesmas (JANDA,2007).

A figura 3.2 apresenta os resultados referentes ao tempo de execução para 64 alinhamentos com os diferentes dispositivos da Tabela 3.1 e comparando-os com

a implementação original (Rodinia-NW).

Estrutura do Cluster

A figura 3.3 apresenta a estrutura do Cluster MPI CPU-GPU composta por um Cluster-Level Dispatcher(CLD) e um conjunto de Node-Level Dispatchers(NLDs).

Figura 3.3 - Arquitetura do Cluster

Fonte: TRUONG,2014

figura 3.2 - Gráfico comparativo de tempo de execução em relação ao Rodinia-NW

O CLD atua no cluster-level, promovendo a distribuição dos dados (work-list) para os NLDs em cada um dos nós e, no final, agrega os resultados gerados. Por sua vez, no node-level, cada NLD distribui as tarefas entre os nós das CPUs e

GPUs. Em cada nó, as CPU-workers e as GPU-workers executam o algoritmo NW.

Resultados obtidos no Cluster

Os testes foram realizados em duas diferentes estruturas de Cluster (High-

end e Low-end Cluster) cujas configurações estão resumidos na tabela 3.2. No High- end Cluster são utilizadas 4 workstations e diversas GPUs/nó; enquanto que, no Low-end Cluster são 6 desktops e uma única GPU/nó. As work-lists enviadas pelo CLD aos NLDs foram ajustadas para 5.000 pares de alinhamento para a máxima

utilização das CPUs e GPUs.

Foi instalado o CUDA 5.0 em todas as máquinas. O S.O. instalado no high-

end Cluster foi CentOS5.5/6 com g++4.1.2 e no low-end Cluster foi usado o S.O.

Ubuntu 12.04 with g++ 4.6.3. Para o MPI foi utilizado o MPICH2 (versão 1.4.1p1).

A figura 3.4 apresenta os resultados referentes ao desempenho, em número de pares alinhados/s, para as duas configurações do Cluster. Este gráfico apresenta a escalabilidade da arquitetura e o desempenho em 3 situações: (i)uso, apenas, das

CPUs, (ii) uso isolado das GPUs e (iii) uso do conjunto híbrido CPU+GPU. Tabela 3.2 - Configurações dos Clusters

3.2 G-DNA - a highly efficient multi-GPU/MPI tool for aligning nucleotide

Documentos relacionados