• Nenhum resultado encontrado

2. MENSURAÇÃO DO CONSUMO ENERGÉTICO

6.3. Benchmark

Apenas o algoritmo FT, da suíte NPB, e o algoritmo Leukocyte, da suíte Rodinia, foram utilizados para mensuração do consumo energético e do tempo de execução. Os algoritmos da suíte SHOC foram utilizados apenas para mensurar o desempenho dos dispositivos, pois executam em sequência e de forma muito rápida, o que dificultaria a distinção do consumo energético de cada uma de suas etapas, podendo causar inconsistência.

Para cada algoritmo executado foi calculada uma média referente a dez execuções do mesmo, para que os dados obtidos não ficassem suscetíveis à intervenção de alguma tarefa que o sistema pudesse estar executando no momento. Desta forma, ampliamos a confiabilidade dos resultados obtidos.

Ambos os algoritmos foram compilados apenas uma vez para cada dispositivo a ser utilizado. Ou seja, as suítes de benchmark foram compiladas três vezes durante os testes, para que fosse certificado que cada compilação utilizasse as bibliotecas corretas fornecidas pelo fabricante do dispositivo em questão.

Os benchmarks utilizados nos testes foram o Scalable HetorOgeneous Computing Benchmark Suite (SHOC), versão 1.1.4, o SNU NPB, versão 1.0.2, e o Rodinia Benchmark Suite, versão 2.1. A escolha do SHOC se dá pela gama de opções de testes oferecidas pelo mesmo, sendo utilizado para testar capacidades do dispositivo como largura de banda de memória e do barramento. O NPB será utilizado para testes de desempenho e consumo dos dispositivos.

6.3.1. Scalable HeterOgeneous Computing Benchmark Suite

O Scalable Heterogeneous Computing Benchmark Suite (SHOC) é uma coleção de programas de benchmark para testar o desempenho e estabilidade de sistemas utilizando dispositivos de computação com arquiteturas não-tradicionais de coputação de propósito geral e o software usado para programá-los. Seu foco inicial é em sistemas que contenham unidades de processamento gráfico (GPUs) e processadores multi-core, e sobre o padrão de programação OpenCL. Ele pode ser usado em conjuntos, bem como hospedeiros individuais.

O SHOC é dividido em diversos subprogramas que testam diferentes aspectos do sistema. Os que foram utilizados mensuram a largura de banda do barramento de conexão do dispositivo, largura de banda de memória do dispositivo, velocidade de compilação do kernel, pico máximo em MFLOPS1, e a demora em inicializar o kernel no dispositivo, ambos descritos a seguir:

• Velocidade do barramento: Mede a largura de banda do barramento de interligação entre o processador hospedeiro e o dispositivo OpenCL (tipicamente o barramento PCIe) fazendo por várias vezes a transferência de dados de vários tamanhos para e a partir do dispositivo.

• Largura de banda da memória do dispositivo: mede a largura de banda para todos os espaços de endereço da memória do dispositivo, incluindo global, local, constante, e as memórias de imagem. O espaço de memória global é testado usando acessos coalescentes quanto não-coalescentes à memória. Em todos os casos, cada segmento gera 16 pedidos de memória independentes.

• Compilação do Kernel: Kenels OpenCL são compilados em tempo de execução, e este benchmark mede com média a velocidade e despesas gerais para compilação kernels de diferentes complexidades.

• Pico em MFLOPS: Medida da quantidade de operações de ponto flutuante (precisão simples ou dupla) por segundo, utilizando uma carga de trabalho sintética simpático projetado para para exercitar completamente as unidades funcionais do dispositivo. Taxas de execução são computadas para diferentes combinações de operações aritméticas, como 1) adições apenas, 2) apenas multiplicação, 3) um número igual de multiplicações e adições, 4) um mix composto de multiplicações e adições em uma proporção de 2 para 1. • Atraso de enfileiramento: Mede a sobrecarga de

lançamento de um kernel no sistema de filas do OpenCL.

(DANALIS, ROTH, et al., 2010)

6.3.2. SNU NPB

O SNU NPB é nada mais que uma adaptação dos algoritmos do NAS

1

Parallel Benchmarks, desenvolvidos pela NASA utilizando a linguagem Fortran, portados para OpenCL, OpenMP e C.

O NAS Parallel Benchmarks (NPB) é um pequeno conjunto de programas destinados a ajudar a avaliar o desempenho dos supercomputadores paralelos. Os pontos de referência são derivados da dinâmica de fluidos computacional (CFD) e aplicações consistem em cinco núcleos e três pseudo-aplicações, na especificação original "lápis e papel" (NPB 1). O pacote de benchmark foi estendido para incluir novos padrões de malha adaptativa desestruturada, I/O paralelo, aplicações multi-zona e grades computacionais. Tamanhos de problema do NPB são predefinidos e indicado como classes diferentes. Implementações de referência do NPB estão disponíveis em modelos de programação mais usadas como MPI e OpenMP (NPB 2 e NPB 3).

(NASA, 2012)

A adaptação que será utilizada foi desenvolvida pelo Center for Manycore Programming (CMP) da Seoul National University (SNU) - Korea.

Segundo a SNU (2011) “SNU NPB Suite é um conjunto de benchmarks paralelos NAS (NPB) implementados em C, OpenMP C e OpenCL. Atual SNU NPB Suite consiste de quatro diferentes implementações”.

Essa suíte de benchmarks foi escolhida porque, segundo Saphir, Woo e Yarrow (1996) “Enquanto a suíte NPB foi desenhada para comparar diferentes tipos de computadores, ela pode ser usada também para mostrar pequenas diferenças em um único tipo de computador”.

A suíte possui diversos algoritmos diferentes, porém, foi utilizado apenas o algoritmo FT, que é a implementação do algoritmo Fast Fourier Transform (FFT), que calcula de forma eficiente a Transformada Discreta de Fourrier (DFT).

A transformada de Fourier vem em três variedades: a boa e velha transformada de Fourier, a série de Fourier e transformada de Fourier discreta. Mas é a transformada de Fourier discreta, ou DFT, que representa o renascimento de Fourier. Em 1965, os cientistas da computação James Cooley e John Tukey descreveram um algoritmo chamado de transformação rápida de Fourier, o que tornou muito mais fácil de calcular DFTs em um computador. De repente, a DFT se tornou uma maneira prática para processar sinais digitais.

(HARDESTY, 2009)

A DFT faz matematicamente o que o ouvido humano faz fisicamente: decompor um sinal em suas frequências componentes. Ao

contrário do sinal analógico de, digamos, um aparelho de som, o sinal digital a partir de um leitor de MP3 é apenas uma série de números, cada um representando um ponto em um rabisco. Colete pontos suficientes, e você produzir um fac-símile razoável de um sinal contínuo: com qualidade de CD de gravação digital de áudio, por exemplo, recolhe 44.100 amostras por segundo. Se extrair um número de valores consecutivos de um sinal digital, - 8, ou 128, ou 1000 - o DFT representa como a soma ponderada de um número equivalente de frequências. ("Ponderada" apenas significa que algumas das frequências contam mais do que outros em relação ao total).

(HARDESTY, 2009)

6.3.3. Rodinia Benchmark Suite

As cargas de trabalho do Rodínia são selecionados e projetado para plataformas de computação heterogênea, incluindo ambos os CPUs e dispositivos, como GPUs e FPGAs [10].

Rodínia abrange não só as aplicações de domínios emergentes tais como bioinformática, mineração de dados e processamento de imagem, mas também inclui as implementações de algoritmos clássicos importantes, como decomposição LU e travessia de gráfico. A taxonomia Dwarf de Berkeley[1] foi inicialmente utilizada como uma diretriz para escolher aplicações para o Rodínia, a fim de evitar a perda de importantes padrões paralelos.

(CHE, SHEAFFER, et al., 2009)

O algoritmo desta suíte que foi escolhido para ser utilizado foi o Leukocyte, que detecta e rastreia glóbulos brancos microscópicos em vasos sanguíneos. A velocidade dos leucócitos fornece informações importantes sobre o processo de inflamação, o que ajuda pesquisadores no desenvolvimento de medicamentos anti-inflamatórios. Este algoritmo foi escolhido principalmente por fazer uso apenas de cálculos de ponto flutuante com precisão simples.

Na aplicação, as células são detectadas no primeiro fotograma e então rastreado através de quadros subsequentes. A detecção é feita através do cálculo para cada pixel no quadro inverso a pontuação do Coeficiente Máximo da Gradiente de Variação (GICOV) em uma série de elipses possíveis. A pontuação GICOV para uma elipse é a magnitude do gradiente médio ao longo da elipse, dividido pelo desvio padrão da magnitude do gradiente. A matriz de pontuação GICOV é então dilatado para simplificar o processo de encontrar máximos locais. Para cada um máximo local, um algoritmo de contorno ativo é utilizada para determinar com mais precisão a forma da célula.

O rastreamento é conseguido através de computação, em primeiro lugar, na área em torno de cada célula, uma matriz do Movimento do Fluxo do Vetor Gradiente (MGVF). O MGVF é um campo gradiente enviesada na direcção do fluxo de sangue, e é calculado usando um procedimento iterativo solução Jacobiana. Depois de calcular o MGVF, um contorno activo é utilizado, uma vez mais para refinar a forma e determinar a localização de cada nova célula.

Documentos relacionados