• Nenhum resultado encontrado

Caracterização e análise de benchmarks típicos para execução em GPUS

N/A
N/A
Protected

Academic year: 2021

Share "Caracterização e análise de benchmarks típicos para execução em GPUS"

Copied!
62
0
0

Texto

(1)

DEPARTAMENTO DE CI ˆENCIA DA COMPUTAC¸ ˜AO

Pablo Moreira Cavalcante de Carvalho

CARACTERIZAC

¸ ˜

AO E AN ´

ALISE DE BENCHMARKS

T´IPICOS PARA EXECUC

¸ ˜

AO EM GPUS

Niter´oi 2017

(2)

CARACTERIZAC

¸ ˜

AO E AN ´

ALISE DE BENCHMARKS

T´IPICOS PARA EXECUC

¸ ˜

AO EM GPUS

Monografia apresentada ao Departamento de Ciˆencia da Computac¸˜ao da Universidade Federal Fluminense como parte dos requisi-tos para obtenc¸˜ao do Grau de Bacharel em Ciˆencia da Computac¸˜ao.

Orientador: L´ucia Maria de Assumpc¸˜ao Drummond Co-orientador: Cristiana Barbosa Bentes

Niter´oi 2017

(3)

Ficha Catalográfica elaborada pela Biblioteca da Escola de Engenharia e Instituto de Computação da UFF

C331 Carvalho, Pablo Moreira Cavalcante de

Caracterização e análise de benchmarks típicos para execução em GPUS / Pablo Moreira Cavalcante de Carvalho. – Niterói, RJ : [s.n.], 2017.

60 f.

Projeto Final (Bacharelado em Ciência da Computação) – Universidade Federal Fluminense, 2017.

Orientadores: Lúcia Maria de Assumpção Drummond, Cristina Barbosa Bentes.

1. Unidade de processamento gráfico. 2. Processamento paralelo (Computador). 3. Computação de alto desempenho. I. Título.

CDD 006.6

(4)
(5)

As minhas orientadoras L´ucia Drummond e Cristiana Bentes, pela oportunidade, comprometimento e

solicitude. Aos meus professores, pela s´olida formac¸˜ao que obtive durante a graduac¸˜ao, em especial ao

professor Edson Cataldo pela valorosa contribuic¸˜ao nesse trabalho. `A minha fam´ılia, pelo suporte financeiro e motivacional.

(6)

condic¸˜oes pr´e-concebidas.” Richard P. Feynman

(7)

As unidades de processamento gr´afico s˜ao hoje uma plataforma importante para a computac¸˜ao de prop´osito geral, grac¸as ao seu alto desempenho com um baixo custo paralelo. As GPUs, en-tretanto, apresentam arquiteturas significativamente diferentes das CPUs e exigem mapeamen-tos e otimizac¸˜oes espec´ıficas para alcanc¸ar alto desempenho. Por este motivo, os conjunmapeamen-tos de benchmarksutilizados para avaliar o desempenho e a escalabilidade da GPU s˜ao diferentes dos desenvolvidos para a CPU. Como o uso da GPU para programac¸˜ao paralela de prop´osito geral ´e um fenˆomeno relativamente novo, os conjuntos de benchmarks utilizados para a sua avaliac¸˜ao, tamb´em s˜ao bastante novos. Atualmente temos os conjuntos Rodinia, Parboil e SHOC como os principais benchmarks para avaliac¸˜ao de GPUs. Este trabalho pretende realizar um estudo de-talhado destes conjuntos de benchmarks de modo a categorizar seu comportamento em termos do tipo principal de computac¸˜ao (inteiro ou ponto-flutuante), do uso da hierarquia de mem´oria e da eficiˆencia obtida pela ocupac¸˜ao do hardware. Pretendemos tamb´em avaliar a similaridade de benchmarks de diferentes conjuntos. Esta caracterizac¸˜ao ser´a ´util para a classificac¸˜ao dos benchmarkse para expor ao usu´arios como os benchmarks podem ser usados para avaliar de-terminadas caracter´ısticas do sistema.

Palavras Chave:

(8)

Graphical Processing Units are today an important plataform to general purpose computing, thanks to high performance combined with low cost. GPUs, however, present significantly dif-ferent architectures from CPUs and require specific programming and optimizations to reach high performance. Thus, benchmark suites developed to evaluate GPUs performance and sca-lability are different from suites developed for CPUs. Not only the usage of GPUs to genereal purpose parallel programming is relatively new but the suites used for their evaluation are new as well. Nowadays Rodinia, Parboil and SHOC are the main benchmark suites for evaluating GPUs. This work analyses those benchmark suites in detail and categorize their behaviors in terms of main type of computation (integer or float), usage of memory hierarchy and efficiency obtained by hardware occupancy. We intend also to evaluate similarities between those suites. The characterization will be useful to classify and show GPU users how benchmarks can be applied to evaluate systems characteristics.

Keywords:

(9)

GPU: Graphics Processing Unit CPU: Central Processing Unit SM: Stream Multiprocessor MPI: Message Passing Interface PCA: Principal Component Analysis MPS: Multi-Processor Service

(10)

CAP´ITULO 1 - INTRODUC¸ ˜AO 6

CAP´ITULO 2 - CONCEITOS B ´ASICOS 9

2.1 Principal Component Analysis -PCA . . . 9

2.1.1 C´alculo das componentes . . . 9

2.1.2 Exemplo . . . 10

2.1.3 Utilizando PCA na Linguagem R . . . 14

2.2 K-means . . . 19

CAP´ITULO 3 - PACOTES DE BENCHMARKS 22 3.1 Rodinia . . . 22

3.2 Parboil . . . 24

3.3 Scalable Heterogeneous Computing (SHOC) benchmark suite . . . 25

CAP´ITULO 4 - METODOLOGIA 27 4.1 Ferramentas e ambiente utilizado . . . 27

4.2 Aquisic¸˜ao e tratamento dos dados . . . 28

CAP´ITULO 5 - AN ´ALISE DE RESULTADOS 31 5.1 Rodinia . . . 31

5.1.1 Grupo 1 - Kernels com uso de mem´oria intensiva . . . 33

5.1.2 Grupo 2 - Kernels de pouca express˜ao . . . 34

5.1.3 Grupo 3 - Kernels com alto n´umero de operac¸˜oes de ponto flutuante de precis˜ao dupla . . . 35

(11)

5.2 Parboil . . . 37

5.2.1 Grupo 1 - Kernels com alta eficiˆencia . . . 39

5.2.2 Grupo 2 - Kernels com alta eficiˆencia e baixa ocupˆancia . . . 39

5.2.3 Grupo 3 - Kernels de execuc¸˜ao r´apida com uso intensivo de inteiros . . 40

5.2.4 Grupo 4 - Kernels de execuc¸˜ao r´apida e baixo uso de registradores . . . 40

5.2.5 Grupo 5 - Kernels pouco significativos . . . 41

5.3 SHOC . . . 41

5.3.1 Grupo 1 - Kernels com maior tempo de execuc¸˜ao e uso de mem´oria . . 43

5.3.2 Grupo 2 - kernels pouco significantes . . . 44

5.3.3 Grupo 3 - kernels de execuc¸˜ao r´apida e baixa ocupˆancia . . . 46

5.4 An´alise com todos os kernels . . . 47

5.4.1 Grupo 1 - Kernels pouco significativos . . . 49

5.4.2 Grupo 2 - Kernels robustos . . . 49

5.4.3 Grupo 3 - Kernels de comportamento neutro . . . 50

5.4.4 Grupo 4 - Kernels de baixa ocupˆancia e alta eficiˆencia . . . 51

CAP´ITULO 6 - CONCLUS ˜AO 52

(12)

Figura 1: Gr´afico exemplo . . . 11

Figura 2: Transformac¸˜ao usando apenas um autovetor . . . 13

Figura 3: Transformac¸˜ao usando dois autovetores . . . 14

Figura 4: Scatter plot . . . 15

Figura 5: variˆancias . . . 16

Figura 6: biplot . . . 17

Figura 7: biplot com classificac¸˜ao . . . 18

Figura 8: exemplo, adaptado de [13] . . . 20

Figura 9: movimentac¸˜ao dos centroides, adaptado de [13] . . . 20

Figura 10: algoritmo k-means, adaptado de [26] . . . 21

Figura 11: gr´afico exibindo duas componentes . . . 32

Figura 12: gr´afico exibindo trˆes componentes . . . 32

Figura 13: gr´afico rotacionado exibindo trˆes componentes . . . 33

Figura 14: Parboil: gr´afico com duas componentes . . . 38

Figura 15: SHOC: gr´afico com duas componentes . . . 42

Figura 16: kernels de todos os pacotes, gr´afico com duas componentes . . . 48

Figura 17: grupo 1, n´umero de kernels por pacote . . . 49

Figura 18: grupo 2, n´umero de kernels por pacote . . . 49

Figura 19: grupo 3, n´umero de kernels por pacote . . . 50

(13)

1 dados de exemplo . . . 11

2 dados centrados na m´edia . . . 12

3 GTX 980: especificac¸˜ao . . . 27 4 Descric¸˜ao de m´etricas . . . 29 5 Rodinia, grupo 1 . . . 34 6 Rodinia, grupo 2 . . . 35 7 Rodinia, grupo 3 . . . 35 8 Rodinia, grupo 4 . . . 36 9 Parboil, grupo 1 . . . 39 10 Parboil, grupo 2 . . . 39 11 Parboil, grupo 3 . . . 40 12 Parboil, grupo 4 . . . 40 13 Parboil, grupo 5 . . . 41

14 SHOC, grupo 1, parte 1 . . . 43

15 SHOC, grupo 2 . . . 44

16 SHOC, grupo 3, parte 1 . . . 45

(14)

CAP´ITULO 1 - INTRODUC

¸ ˜

AO

As Unidades de Processamento Gr´afico (GPU) tˆem obtido grande destaque nos dias de hoje na computac¸˜ao de prop´osito geral. A raz˜ao custo/desempenho dessas unidades aliada ao seu alto poder computacional vem conquistando cada vez mais usu´arios. Por esta raz˜ao os principais fabricantes de GPUs tˆem se preocupado em modificar a arquitetura, drivers e pacotes de desenvolvimento para que suas unidades combinem a facilidade de desenvolvimento e alto desempenho em aplicac¸˜oes de prop´osito geral. Atualmente os computadores mais r´apidos do mundo segundo o site Top 500 [24] s˜ao constru´ıdos utilizando clusters heterogˆeneos CPU-GPU. Devido `a crescente capacidade das GPUs atuais ´e comum que as aplicac¸˜oes n˜ao utilizem todo o potencial computacional dispon´ıvel. Al´em disso, GPUs tˆem sido utilizadas de forma compartilhada em ambientes de nuvem. Em GPUs modernas ´e poss´ıvel que uma GPU execute kernelsde diferentes processos, ou contextos, ao mesmo tempo. No entanto fica a cargo do usu´ario compreender as necessidades das aplicac¸˜oes que deseja executar e as limitac¸˜oes da GPU utilizada, para assim julgar se existe algum ganho em execut´a-las de forma concorrente.

Alguns pacotes de benchmarks foram criados ao longo dos anos com intuito de avaliar o desempenho de GPUs em uma s´erie de aplicac¸˜oes reais. S˜ao eles, Rodinia [22, 23], Parboil [10] e SHOC [3]. Estes benchmarks tˆem sido utilizados para avaliar aspectos de arquitetura e pa-ralelismo oferecidos pelas GPUs com o foco em determinar experimentalmente os benef´ıcios de novos projetos. Seu uso, entretanto, tem sido restrito a avaliac¸˜oes das execuc¸˜oes de cada aplicac¸˜ao isoladamente. Quando diferentes aplicac¸˜oes s˜ao executadas na mesma GPU de modo concorrente, as caracter´ısticas de cada aplicac¸˜ao em termos de tipo de computac¸˜ao, uso de mem´oria e tempo de execuc¸˜ao, determinam a interferˆencia que elas v˜ao gerar no desempenho umas das outras.

Diante deste cen´ario, ´e preciso compreender melhor o comportamento de cada aplicac¸˜ao destes benchmarks em termos de uso dos recursos da GPU para que o usu´arios possam en-tender melhor sobre a diversidade destas aplicac¸˜oes e sobre como elas se comportam quando executados concorrentemente na GPU. Al´em disso, diferentemente dos benchmarks propostos para CPUs, os benchmarks para GPU s˜ao compostos de uma s´erie de kernels. Cada kernel representa uma tarefas submetida para execuc¸˜ao macic¸amente paralela na GPU e pode possuir necessidades diferentes de uso de recursos durante sua execuc¸˜ao.

(15)

Esse trabalho tem por objetivo apresentar uma an´alise do comportamento de kernels dos trˆes principais benchmarks desenvolvidos para GPUs atrav´es da observac¸˜ao de m´etricas corres-pondentes a operac¸˜oes com inteiros e ponto flutuante de precis˜ao simples e dupla, eficiˆencia, ocupac¸˜ao e as caracter´ısticas de operac¸˜oes em mem´oria. Pela dificuldade em representar visual-mente os kernels em um espac¸o que possui n´umero de dimens˜oes igual ao n´umero de m´etricas utilizadas no estudo, recorremos a t´ecnica Principal Component analysis para reduzir a dimen-sionalidade e assim conseguirmos representar toda a informac¸˜ao em gr´aficos de espac¸os de duas e trˆes dimens˜oes sem ignorar nenhuma m´etrica. Para determinarmos os grupos utilizamos o k-means a partir da sa´ıda gerada pelo PCA.

Trabalhos de caracterizac¸˜ao de aplicac¸˜oes de pacotes de bbenchmarks j´a foram realizados para os pacotes PARSEC [4] e tamb´em para o pacote Rodinia [23], ambos usando analise das principais componentes, no entanto a diferenc¸a desse trabalho para os trabalhos citados ´e o seu objeto de an´alise, enquanto os trabalhos observavam as aplicac¸˜oes, esse trabalho analisa cada kernelde cada aplicac¸˜ao e faz uma analise sobre seu comportamento. Outros trabalhos como Kerr et al. [2], analisa aplicac¸˜oes do pacote Parboil e das aplicac¸˜oes de exemplo do CUDA SDK em termos de controle de fluxo, fluxo de dados, paralelismo e comportamento de mem´oria. No entanto o estudo n˜ao foi feito utilizando uma GPU real, e sim um simulador.

Burtscher et al. [15] realizou o estudo de 13 benchmarks irregulares em termos de irre-gularidade de controle de fluxo e irreirre-gularidade de acesso a mem´oria, ´e feita tamb´em uma comparac¸˜ao com aplicac¸˜oes do CUDA SDK. Em um trabalho posterior O’Neil e Burtscher [17] apresentam a caracterizac¸˜ao de cinco aplicac¸˜oes irregulares do pacote LonestarGPU, o estudo ´e baseado em simulac¸˜oes e tamb´em ´e focado no impacto no controle de fluxo e irregularidade no acesso a mem´oria. Bakhoda et al. [1] caracteriza 12 kernels em um simulador de GPU, o estudo ´e baseado em algumas escolhas de projeto de microarquiteturas: interconex˜ao de topo-logia, uso de cache, design do controlador de mem´oria, mecanismos paralelos de distribuic¸˜ao de workloads e requisic¸˜oes de mem´oria.

Devido ao estado atual das arquiteturas das GPUs, que a partir da arquitetura Kepler da NVIDIA permite que uma aplicac¸˜ao execute kernels concorrentemente e ainda o MPS que per-mite que kernels de mais de uma aplicac¸˜ao sejam executadas em uma mesma GPU concorren-temente [19], esse estudo traz resultados que podem ser usados para compreender uma poss´ıvel interferˆencia desses kernels quando utilizando esses recursos recentes.

Nos resultados encontrados, foi poss´ıvel identificar grupos de kernels que utilizam pouco os recursos analisados, assim como grupos que utilizavam muito diversos tipos de recursos. Tamb´em chegamos a conclus˜ao de que Rodinia e Parboil, apesar n˜ao terem sido atualizados

(16)

t˜ao recentemente quanto o SHOC, possuem aplicac¸˜oes que fazem maior uso da GPU, en-quanto o SHOC com kernels mais simples, se destaca pelo uso de concorrˆencia em uma de suas aplicac¸˜oes.

Este projeto est´a organizado em 6 cap´ıtulos, No Cap´ıtulo 2, apresentamos os m´etodos uti-lizados no trabalho para a an´alise das informac¸˜oes extra´ıdas dos kernels das aplicac¸˜oes. No cap´ıtulo 3, descrevemos cada pacote de benchmark assim como descrevemos brevemente cada uma de suas aplicac¸˜oes. No cap´ıtulo 4, descrevemos a metodologia de extrac¸˜ao de dados e o ambiente utilizado para os testes. No cap´ıtulo 5, realizamos uma analise dos dados extra´ıdos. No cap´ıtulo 6 mostramos nossas conclus˜oes sobre os dados obtidos.

(17)

CAP´ITULO 2 - CONCEITOS B ´

ASICOS

Neste capitulo apresentamos a teoria das t´ecnicas de an´alise de dados usadas para compre-ender o comportamento dos kernels.

2.1

PRINCIPAL COMPONENT ANALYSIS -PCA

O PCA ´e uma t´ecnica de an´alise multivariada, consiste em realizar uma transformac¸˜ao linear com um conjunto de dados de modo que este mesmo conjunto seja representado a par-tir de suas componentes mais importantes [9]. As componentes do PCA s˜ao nada mais que combinac¸˜oes lineares dos eixos do espac¸o que representa o conjunto de dados, dessa forma o PCA pode informar quais s˜ao os eixos onde se encontram as maiores variˆancias e assim pode-mos definir quais seriam as mais importantes e que melhor caracterizam um conjunto de dados, descartando assim as menos importantes, por essa raz˜ao o m´etodo ´e comumente utilizado para reduc¸˜ao de dimens˜oes.

2.1.1 C ´ALCULO DAS COMPONENTES

Dada uma tabela de dados com um numero qualquer de linhas e colunas, organizamos uma matriz do tipo: S=        s21 s12 s13 . . . s1n s21 s22 s23 . . . s2n .. . ... ... . .. ... sn1 sn2 sn3 . . . s2n       

A diagonal principal ´e dada pelo quadrado da variˆancia de cada coluna da tabela de dados, L´e o n´umero de linhas da tabela de dados e ¯x´e a m´edia dos valores da coluna:

s2n= L

i=1 (xin− ¯x)2 L− 1

(18)

As outras posic¸˜oes da matriz s˜ao fornecidas pela covariˆancia entre pares de colunas da tabela de dados:

si j= L ∑ xikxjk− ∑ xik∑ xjk L(L − 1)

Uma vez com a matriz formada, encontraremos seus autovalores e autovetores a partir da equac¸˜ao caracter´ıstica:

|S − λ I| = 0 Dessa forma, teremos uma matriz do tipo:

|S − λ I| =        s21− λ s12 s13 . . . s1n s21 s22− λ s23 . . . s2n .. . ... ... . .. ... sn1 sn2 sn3 . . . s2n− λ       

Encontrando o determinante dessa matriz encontraremos uma equac¸˜ao que resolvida for-nece todos os autovalores. Para encontrarmos um autovetor substitu´ımos λ por um dos auto-valores encontrados e montamos um sistema de equac¸˜oes homogˆeneas que resolvido fornecer´a um autovetor. Para encontrar todos os autovetores ´e necess´ario repetir o processo para cada autovalor.

Conhecendo todos os autovetores montamos uma matriz de transformac¸˜ao onde cada auto-vetor ser´a uma coluna da matriz. Podemos utilizar todos os autoauto-vetores encontrados no entanto isso n˜ao ´e interessante para um caso onde queremos reduzir o n´umero de dimens˜oes de um problema. O crit´erio de escolha ´e montar a matriz com autovetores gerados pelos maiores au-tovalores, o que significa escolher as componentes onde se encontram as maiores variˆancias e por sua vez diferenciam melhor os dados um dos outros.

Com a matriz de transformac¸˜ao criada o ´ultimo passo ´e obter as coordenadas do conjunto de dados original transformadas no novo sistema de coordenadas. Para isso basta que criemos uma matriz com os dados do conjunto original e fac¸amos o produto dela com a matriz de transformac¸˜ao.

2.1.2 EXEMPLO

(19)

x y 2.5 2.4 0.5 0.7 2.2 2.9 1.9 2.2 3.1 3.0 2.3 2.7 2 1.6 1 1.1 1.5 1.6 1.1 0.9

Tabela 1: dados de exemplo

Figura 1: Gr´afico exemplo

O PCA pode indicar uma variˆancia muito maior em uma coluna devido a diferenc¸a de escalas com as vari´aveis envolvidas, o que em muitos casos n˜ao ´e desej´avel, por isso algumas vezes ´e necess´ario padronizar os dados. A padronizac¸˜ao consiste em subtrair cada item de uma coluna pela m´edia e dividir o resultado pelo desvio padr˜ao, para o exemplo dado n˜ao

(20)

h´a necessidade de dividir pelo desvio padr˜ao j´a que as colunas usam a mesma escala, assim subtra´ımos apenas a m´edia, o resultado ser´a:

x y 0.69 0.49 -1.31 -1.21 0.39 0.99 0.9 0.29 1.29 1.09 0.49 0.79 0.19 -0.31 -0.81 -0.81 -0.31 -0.31 -0.71 -1.01

Tabela 2: dados centrados na m´edia

Com os dados padronizados, podemos calcular a matriz de transformac¸˜ao:

S= "

0.6165556 0.6154444 0.6154444 0.7165556 #

Para encontrar os autovalores basta resolver o determinante da matriz:

|S − λ I| = " 0.6165556 − λ 0.6154444 0.6154444 0.7165556 − λ # = 0

Os valores de λ encontrados foram λ1= 0.490833989 e λ2= 1.28402771. Substituindo λ na matriz por 0.490833989 e depois por 1.28402771 e resolvendo os sistemas de equac¸ ˜oes homogˆeneas, encontraremos os autovetores:

A= "

−0.677873399 −0.735178656 −0.735178696 0.677873399

#

com o intuito de reduzir dimens˜oes vamos utilizar apenas um autovetor, e faremos o produto com os dados padronizados em uma matriz, o resultado desse produto ser´a uma matriz coluna contendo as coordenadas :

(21)

                       0.69 0.49 −1.31 −1.21 0.39 0.99 0.9 0.29 1.29 1.09 0.49 0.79 0.19 −0.31 −0.81 −0.81 −0.31 −0.31 −0.71 −1.01                        " −0.677873399 −0.735178696 # =                        −0.827970186 1.77758033 −0.992197494 −0.274210416 −1.67580142 −0.912949103 0.0991094375 1.14457216 0.438046137 1.22382056                       

(22)

                       0.69 0.49 −1.31 −1.21 0.39 0.99 0.9 0.29 1.29 1.09 0.49 0.79 0.19 −0.31 −0.81 −0.81 −0.31 −0.31 −0.71 −1.01                        " −0.677873399 −0.735178656 −0.735178696 0.677873399 # =                        −0.827970186 −0.175115307 1.77758033 0.142857227 −0.992197494 0.384374989 −0.274210416 0.130417207 −1.67580142 −0.209498461 −0.912949103 0.175282444 0.0991094375 −0.349824698 1.14457216 0.0464172582 0.438046137 0.0177646297 1.22382056 −0.162675287                       

Assim, cada linha da matriz seria uma coordenada transformada para o novo espac¸o.

Figura 3: Transformac¸˜ao usando dois autovetores

2.1.3 UTILIZANDO PCA NA LINGUAGEM R

Utilizaremos como exemplo o conjunto de dados Iris [20], trata-se de um conjunto com 50 amostras de cada um dos trˆes tipo de flores do gˆenero Iris, totalizando assim 150 amostras. O

(23)

conjunto Iris j´a est´a inclu´ıdo nos pacotes do R, assim, para carreg´a-lo basta usar o comando: d a t a ( i r i s )

O conjunto de dados ´e composto de 5 colunas, sendo elas Sepal.Length, Sepal.Width, Pe-tal.Lenght, Petal.Width e Species, sendo os quatro primeiros as medidas que nos interessam e Species a classificac¸˜ao de cada flor. Por enquanto vamos separar os dados da classificac¸˜ao para uso posterior:

d a t a s e t <− i r i s [ , 1 : 4 ]

Podemos visualizar os dados atrav´es do scatter plot, uma representac¸˜ao de todos os pares de eixos do conjunto de dados atrav´es do comando

p l o t ( d a t a s e t , c o l = i r i s $ S p e c i e s )

Passamos no segundo parˆametro a classificac¸˜ao presente no conjunto assim teremos uma representac¸˜ao por cores da classificac¸˜ao de cada flor, o resultado ser´a:

Figura 4: Scatter plot

Atrav´es dessa representac¸˜ao ´e poss´ıvel notar que alguns pares de eixos diferenciam melhor esses conjuntos. Utilizando o PCA poderemos confirmar quais desses realmente diferenciam

(24)

e ter maior noc¸˜ao de em quais se concentram a maior variˆancia. Assim, utilizamos a func¸˜ao princomp passando como parˆametro o conjunto de dados:

i r i s . p c a <− p r i n c o m p ( d a t a s e t )

N˜ao h´a necessidade de centrar os dados na m´edia antes de usar a func¸˜ao devido ao modo como a func¸˜ao calcula as componentes. Nesse conjunto de dados tamb´em n˜ao existe a neces-sidade de corrigir o problema das escalas pois o conjunto de dados usa a mesma escala, caso existisse a necessidade, bastaria usar a func¸˜ao scale da seguinte forma :

d a t a s e t <− s c a l e ( d a t a s e t , s c a l e = TRUE , c e n t e r = TRUE )

A linguagem R possui tamb´em em seus pacotes a func¸˜ao prcomp para c´alculo das principais componentes, a diferenc¸a entre princomp e prcomp est´a na forma como as componentes s˜ao calculadas. Enquanto princomp utiliza autovetores e autovalores para calcular as componentes [6], t´ecnica mostrada na sec¸˜ao anterior, prcomp utiliza decomposic¸˜ao em valores singulares [7] devido a maior precis˜ao num´erica.

A partir do resultado do PCA, precisamos analis´a-lo e definir quais componentes possuem maior peso, dessa forma podemos visualizar graficamente o resultado:

p l o t ( i r i s . p c a )

O resultado ser´a um gr´afico com a variˆancia de cada componente:

(25)

Pelo gr´afico podemos observar que boa parte do peso se encontra na primeira componente, ent˜ao para montarmos uma representac¸˜ao gr´afica certamente essa componente estar´a inclu´ıda, incluiremos tamb´em a segunda componente. Para representar graficamente o PCA com duas dimens˜oes utilizaremos o biplot [8], dessa forma al´em dos pontos transformados para o novo sistema de coordenadas, tamb´em teremos inclu´ıdos os vetores com os pesos de cada eixo do sistema anteriormente utilizado. A implementac¸˜ao de biplot utilizada n˜ao faz parte dos pacotes padr˜ao do R, a biblioteca utilizada chama-se ggbiplot:

g <− g g b i p l o t : : g g b i p l o t ( i r i s . pca , c h o i c e s = c ( 1 , 2 ) , o b s . s c a l e = 1 , v a t . s c a l e = 1 , e l l i p s e = TRUE , c i r c l e = TRUE )

p l o t ( g )

A sa´ıda ser´a um gr´afico do tipo:

Figura 6: biplot

´

E poss´ıvel observar um grupo se formando mais isolado, a esquerda do c´ırculo, j´a no caso do . A sa´ıda do PCA pode ser utilizada como entrada para um algoritmo de classificac¸˜ao, no caso o conjunto j´a possui uma classificac¸˜ao, ent˜ao, para visualiz´a-la apenas inclu´ımos mais um parˆametro na func¸˜ao ggbiplot, sendo um vetor contendo a classificac¸˜ao de cada ponto:

(26)

v a t . s c a l e = 1 , e l l i p s e = TRUE , c i r c l e = TRUE , g r o u p s = i r i s $ S p e c i e s )

p l o t ( g )

Figura 7: biplot com classificac¸˜ao

O gr´afico gerado pelo biplot fornece algumas informac¸˜oes interessantes principalmente quando combinado ao resultado de algum algoritmo de agrupamento, o resultado ajuda a com-preender quais s˜ao as caracter´ısticas mais marcantes de um grupo. Para isso, deve-se ter atenc¸˜ao ao tamanho dos vetores, a sua direc¸˜ao, as posic¸˜oes dos grupos e a variˆancia das componentes. Em relac¸˜ao ao tamanho, ele indica a importˆancia daquela caracter´ıstica para os elementos em geral, a sua direc¸˜ao e sentido indicam a relac¸˜ao de importˆancia para um grupo. Observar os dados originais ´e fundamental, pois quando temos v´arios vetores apontando para um grupo e v´arios em sentido contr´ario ´e poss´ıvel que alguns desses n˜ao caracterizem o grupo. A variˆancia de uma componente pode informar muito sobre a importˆancia de uma caracter´ıstica, uma carac-ter´ıstica paralela a uma componente de alta variˆancia dependendo do tamanho do m´odulo pode indicar que a caracter´ıstica tem uma alta variˆancia para o conjunto de dados e ´e altamente im-portante, assim como uma caracter´ıstica paralela a uma componente de variˆancia muito baixa tem pouca importˆancia. Pode haver casos onde uma parte do grupo tem valores muito altos para uma caracter´ıstica e outra parte do grupo valores muito altos para outra, tendo assim duas

(27)

caracter´ısticas que unem o grupo mas que n˜ao necessariamente tem valores muito altos para todos os elementos, ou mesmo muito baixos.

Na Figura, observamos que as esp´ecies versicolor e virginica apesar de possu´ırem alguns pontos afastados, em sua maioria as caracter´ısticas Petal.Width e Petal.Lenght aparentam ter um peso maior para esses grupos, a esp´ecie virginica pelo que se observa ´e o que tem essas carac-ter´ısticas com maior peso, em segundo a esp´ecie versicolor, esses dados se confirmam quando observamos o conjunto de dados. Tamb´em pela observac¸˜ao das mesmas caracter´ısticas, perce-bemos que o grupo setosa ´e o que possui os menores valores para Petal.Width e Petal.Lenght. Com relac¸˜ao as outras caracter´ısticas, Sepal.Length tem um peso alto para as esp´ecies versi-color e virginica enquanto ´e baixo para a esp´ecie setosa. Quanto a Sepal.Width, o tamanho do vetor e a direc¸˜ao mais pr´oxima a PC2, componente com peso muito baixo, indica que essa caracter´ıstica n˜ao possui grande variˆancia em relac¸˜ao as outras e por isso n˜ao ´e t˜ao eficaz em diferenciar os grupos.

2.2

K-MEANS

K-means ´e um m´etodo de agrupamento que consiste em encontrar grupos em meio a dados n˜ao classificados. A classificac¸˜ao consiste na escolha aleat´oria de posic¸˜oes para um n´umero n de centroides passados como parˆametro para o m´etodo, a cada iterac¸˜ao calcula-se a distˆancia eucli-diana de um centroide a cada ponto, os dados, e identifica um grupo de pontos mais pr´oximos a ele do que ao centro de qualquer outro grupo, o segundo passo ´e calcular a m´edia de cada carac-ter´ıstica para os pontos do grupo em quest˜ao, essa m´edia ser´a a nova posic¸˜ao do centroide. Os dois passos ser˜ao repetidos at´e que haja convergˆencia. [25] Como exemplo, temos um conjunto de dados representado em um gr´afico de duas dimens˜oes exibido na figura 8, ao aplicarmos o k-means nos dados temos a sa´ıda representada na figura 9, a figura demonstra tamb´em a movimentac¸˜ao dos centroides a cada iterac¸˜ao partindo do ponto inicial ao ponto final.

(28)

Figura 8: exemplo, adaptado de [13]

(29)
(30)

CAP´ITULO 3 - PACOTES DE BENCHMARKS

Benchmarks s˜ao programas desenvolvidos com intuito de analisar sistemas computacio-nais, com o estudo da execuc¸˜ao desses programas atrav´es de m´etricas bem definidas ´e poss´ıvel aprender sobre o funcionamento de uma arquitetura espec´ıfica, identificar gargalos na execuc¸˜ao de programas e comparar a diferenc¸a entre arquiteturas diferentes [4]. Em situac¸˜oes onde se deseja testar o comportamento de um programa espec´ıfico que est´a implementado apenas em uma arquitetura, ´e interessante que se utilize um benchmark com caracter´ısticas mais pr´oximas o poss´ıvel do programa em quest˜ao, assim se evitariam custos para implementar o c´odigo em outras arquiteturas [5]. Em qualquer caso de uso de um benchmark ´e fundamental que tais pro-gramas estejam preparados para colocar em teste todos os recursos do hardware no qual ser˜ao executados.

Diferente dos benchmarks popularmente associados a GPUs como 3DMark, o intuito deste trabalho ´e avaliar os benchmarks desenvolvidos para computac¸˜ao de prop´osito geral, sem neces-sariamente estarem associados a tarefas que envolvem computac¸˜ao gr´afica, mas que tenham as respectivas implementac¸˜oes para GPUs. Os benchmarks analisados, Rodinia, Parboil e SHOC possuem implementac¸˜oes para diversos tipos de hardware, no entanto nosso objetivo ´e estudar seu comportamento em GPUs especificamente.

3.1

RODINIA

O Pacote de benchmarks Rodinia disponibilizado em 2009, hoje encontra-se em sua vers˜ao 3.1, tem por foco a an´alise de sistemas heterogˆeneos e possui implementac¸˜oes em CUDA, OpenCL e OpenMP. O pacote, composto inicialmente de 8 aplicac¸˜oes, hoje possui vinte e trˆes aplicac¸˜oes nas quais a escolha foi inspirada na taxonomia de an˜oes de Berkley [11]

• Leukocyte - A partir de um v´ıdeo capturado por meio de um microsc´opio, a aplicac¸˜ao detecta as c´elulas em um primeiro frame e ap´os isso acompanha seu movimento.

• Heart Wall - Faz a reconstruc¸˜ao aproximada das paredes do corac¸˜ao de um rato `a partir da detecc¸˜ao dos movimentos do corac¸˜ao em uma sequˆencia de imagens de ultrassom.

(31)

• MUMmerGPU - Aplicac¸˜ao de alinhamento de sequˆencias de DNA.

• CFD Solver - Aplicac¸˜ao de dinˆamica de fluidos que consiste em resolver equac¸˜oes de Euler em trˆes dimens˜oes.

• LU Decomposition - Implementac¸˜ao de algoritmo para calcular soluc¸˜oes de equac¸˜oes lineares.

• HotSpot - Resolve equac¸˜oes diferenciais para estimar a temperatura de um processador com base na planta e medidas de consumo de energia.

• Back Propagation - Implementac¸˜ao do algoritmo de aprendizado de m´aquina.

• Needleman-Wunsch - Um m´etodo de otimizac¸˜ao global n˜ao linear para alinhamento de sequˆencias de DNA.

• Kmeans - Aplicac¸˜ao que implementa o algoritmo de agrupamento. • Breadth-First Search - Implementac¸˜ao do cl´assico algoritmo de busca.

• SRAD - Aplicac¸˜ao para remoc¸˜ao de ru´ıdos conhecidos como speckles de aplicac¸˜oes de imagens de ultrassom e radar.

• Streamcluster - Implementac¸˜ao originalmente do pacote de benchmarks Parsec. ´E basi-camente um m´etodo de agrupamento.

• Particle Filter - Aplicac¸˜ao de filtro de part´ıculas, um estimador estat´ıstico para busca de um objeto, otimizado para encontrar c´elulas.

• PathFinder - Aplicac¸˜ao para encontrar o caminho mais curto entre dois pontos.

• Gaussian Elimination - Resolve um sistema de equac¸˜oes lineares pelo m´etodo de eliminac¸˜ao de Gauss.

• k-Nearest Neighbors - M´etodo de agrupamento que utiliza a distˆancia euclidiana entre pontos para agrup´a-los.

• LavaMD2 - Aplicac¸˜ao para c´alculo de interac¸˜ao de part´ıculas. • Myocyte - Aplicac¸˜ao de modelagem de c´elulas card´ıacas. • B+ Tree - Implementac¸˜ao de busca em ´arvores B+.

(32)

• Hybrid Sort - Algoritmo de ordenac¸˜ao que usa bucketsort ou quicksort para dividir uma lista em sublistas a serem ordenadas em paralelo usando merge-sort.

• Hotspot3D - sem informac¸˜oes. • Huffman - sem informac¸˜oes.

3.2

PARBOIL

O pacote Parboil foi desenvolvido em 2008 para testar e demonstrar a capacidade da pri-meira gerac¸˜ao de GPUs com a tecnologia CUDA. Segundo o conceito de seu desenvolvimento, a composic¸˜ao do pacote foi pensada para n˜ao entregar vers˜oes completamente otimizadas em baixo n´ıvel para um determinado dispositivo e nem vers˜oes completas de aplicac¸˜oes que aca-bem por desencorajar modificac¸˜oes[10]. Atualmente o Parboil ´e composto de 11 aplicac¸˜oes de diversas ´areas:

• Breadth-First Search (BFS) - Implementac¸˜ao de busca em largura.

• Distance-Cutoff Coulombic Potential (CUTCP) - Utilizada para modelagem molecular, essa aplicac¸˜ao computa uma pequena faixa de componentes em um mapa de campo ele-trost´atico produzido por ´atomos distribu´ıdos em um volume.

• Saturating Histogram (HISTO) - Conta o n´umero de ocorrˆencias de certos valores em uma base de dados.

• Boltzmann Method Fluid Dynamics (LBM) - Implementac¸˜ao do m´etodo de Lattice-Boltzmann para soluc¸˜ao de equac¸˜oes diferenciais parciais orientadas a dinˆamica de flui-dos.

• Magnteic Resonance Imaging Gridding ( MRI-GRIDDING ) - Aplicac¸˜ao do m´etodo grid-dingde reconstruc¸˜ao de imagens para ressonˆancia magn´etica.

• Magnetic Resonance Imaging Q (MRI-Q) - Usado em algoritmos reconstruc¸˜ao de ima-gens de ressonˆancia magn´etica, computa uma matriz Q que representa a configurac¸˜ao dos dados de calibragem de um scanner.

• Sum of Absolute Differences (SAD) - Algoritmo usado em compress˜ao de v´ıdeos para estimar movimento comparando blocos de um quadro em outro quadro de referˆencia afim de encontrar o bloco mais similar.

(33)

• Dense Matrix-Matrix Multiply (SGEMM) - Aplicac¸˜ao que realiza a operac¸˜ao de multiplicac¸˜ao entre matrizes com ponto flutuante de precis˜ao simples.

• Sparse-Matrix Dense-Vector Multiplication (SPVM) - Multiplicac¸˜ao otimizada para ma-trizes onde a maior parte dos elementos ´e zero.

• 3-D Stencil Operation (STENCIL) - Aplicac¸˜ao que resolve uma equac¸˜ao de calor em um gridestruturado 3D utilizando o m´etodo iterativo de Jacobi.

• Two Point Angular Correlation Function (TPACF) - A aplicac¸˜ao faz uma medida de distribuic¸˜ao de corpos massivos no espac¸o, a sa´ıda ´e um histograma de distˆancias an-gulares entre todos os pares de objetos observados.

3.3

SCALABLE HETEROGENEOUS COMPUTING (SHOC) BENCHMARK

SUITE

Concebido para GPUs e processadores com v´arios n´ucleos, o pacote de benchmarks SHOC implementa paralelismo para o caso da utilizac¸˜ao de mais de uma GPU utilizando MPI. O SHOC est´a organizado em trˆes n´ıveis, o primeiro sendo o n´ıvel zero, composto de aplicac¸˜oes que medem caracter´ısticas de hardware em baixo n´ıvel. O n´ıvel 0 utiliza kernels artificiais e foi projetado para ter consistˆencia a fim de que al´em de um teste de performance, tamb´em tenha outros usos como detectar problemas no hardware. O n´ıvel um implementa algoritmos que realizam tarefas frequentemente encontradas em aplicac¸˜oes paralelas reais como o Fast Fourrier Transform[3]. O n´ıvel dois ´e composto de aplicac¸˜oes reais de fato [21].

• N´ıvel zero:

– BusSpeedDownload e BusSpeedReadback: medem a largura de banda do barra-mento PCI-express conectando o hospedeiro e o dispositivo para transferir dados de tamanho vari´avel.

– Device Memory: Mede a largura de banda para todos os espac¸os de enderec¸amento incluindo mem´oria global, local, constante e de imagem.

– Kernel Compilation: Aplicac¸˜ao para medir tempo de compilac¸˜ao de um kernel. – MaxFlops : Executa kernels sint´eticos para atingir o numero m´aximo de operac¸˜oes

de ponto flutuante poss´ıvel com o hardware utilizado.

(34)

• N´ıvel um:

– BFS: Implementac¸˜ao de busca em largura.

– FFT: Implementac¸˜ao do algoritmo Fast Fourrier Transform.

– MD: Aplicac¸˜ao de dinˆamica molecular, computa a acelerac¸˜ao de uma particula ba-seada no campo potˆencial gearado por todas as particulas em uma ´area determinada. – Reduction: Aplicac¸˜ao que implementa o algoritmo de reduc¸˜ao de soma

– Scan : Implementac¸˜ao do algoritmo de soma cumulativa.

– GEMM : Aplicac¸˜ao que faz multiplicac¸˜ao de matrizes utilizando BLAS.

– Sort : Implementac¸˜ao de algoritmo radix sort onde a chave do par ´e um n´umero inteiro.

– Spmv : Multiplicac¸˜ao otimizada para matrizes onde a maior parte dos elementos ´e zero.

– Stencil2D : Implementac¸˜ao do Stencil para um espac¸o 2D com nove pontos. – Triad : Implementac¸˜ao do produto escalar para vetores.

• N´ıvel dois:

– S3D : Aplicac¸˜ao que calcula taxa de reac¸˜oes qu´ımicas.

– QTC : Implementac¸˜ao de m´etodo de agrupamento similar ao k-means que n˜ao ne-cessita de ter como entrada o n´umero de grupos desejado.

(35)

CAP´ITULO 4 - METODOLOGIA

Este cap´ıtulo apresenta a metodologia empregada para analisar os kernels dos pacotes de benchmarks

4.1

FERRAMENTAS E AMBIENTE UTILIZADO

Para os testes foi utilizada uma GTX 980 com a especificac¸˜ao a seguir [18] [14]

CUDA Cores 2048

Base Clock 1126 MHz

GPU Boost Clock 1216 MHz

GFLOPs 4612

Compute Capability 5.2

SMs 16

Shared Memory / SM 96KB Register File Size / SM 256KB Active Blocks / SM 32

Texture Units 128

Texel fill-rate 144.1 Gigatexels/s

Memory 4096MB

Memory Clock 7010 MHz

Memory Bandwidth 224.3 GB/sec

ROPs 64 L2 Cache Size 2048KB TDP 165 Watts Transistors 5.2 billion Die Size 398 mm2 Manufacturing Process 28 nm Tabela 3: GTX 980: especificac¸˜ao

(36)

GPUs modernas da NVIDIA, O computador utilizado utilizava o sistema operacional Ubuntu na vers˜ao 14.04. Para compilar e executar os benchmarks utilizamos a vers˜ao 7.5 do CUDA. Quanto a utilizac¸˜ao dos m´etodos de an´alise, utilizamos a linguagem R com os seguintes pacotes :

• primcomp - pacote para calculo das principais componentes usando autovetores e auto-valores.

• prcomp - pacote para calculo das principais componentes usando decomposic¸˜ao vetorial. • rgl - pacote para plotar gr´aficos 3D.

• ggbiplot - pacote que implementa biplots.

4.2

AQUISIC

¸ ˜

AO E TRATAMENTO DOS DADOS

A priori, dado um pacote de benchmarks, todas as aplicac¸˜oes foram executadas e extra´ımos as m´etricas utilizando o nvprof, ferramenta disponibilizada pela NVIDIA para medir o desem-penho das aplicac¸˜oes. Na execuc¸˜ao foram utilizados dois modos para adquirir os dados, gpu-trace e metrics, onde cada modo era utilizado em execuc¸˜oes separadas. As m´etricas extra´ıdas no modo metrics est˜ao descritas na tabela 4.

Algumas m´etricas usadas fazem referˆencia a warps e para entendˆe-los ´e necess´ario antes conhecer o conceito de blocos e algumas outras abstrac¸˜oes que envolve o desenvolvimento vol-tado a GPUs e sua arquitetura. Kernels s˜ao o equivalente a func¸˜oes de um programa normal, no entanto ser˜ao executados pela GPU. A execuc¸˜ao de um kernel possui uma abstrac¸˜ao que se chama thread. Um bloco ´e uma abstrac¸˜ao para um conjunto de threads, o n´umero de threads em um bloco pode variar mas existe um limite estabelecido para cada arquitetura. Cada bloco ´e executado em um SM (stream multiprocessor), dessa forma todas as threads de um bloco s˜ao executadas no mesmo SM, no entanto um SM n˜ao executa um bloco de uma s´o vez, os SM executam conjuntos de 32 threads chamadas warps e como exibido na Tabela 3, existe um n´umero m´aximo de warps que podem ser executados em um mesmo SM. Existem crit´erios para execuc¸˜ao simultˆanea de warps no mesmo SM associados a uso de recursos e dependˆencia de dados, assim pode acontecer de warps associados a um SM ficarem esperando por um determi-nado recurso, portanto n˜ao estariam ativos. [16]

(37)

M´etrica Descric¸˜ao

sm efficiency porcentagem de tempo em que pelo menos um warp esta ativo em um multiprocessador em relac¸˜ao a todos os multi-processadores da GPU

achieved occupancy taxa de warps ativos em um SM em relac¸˜ao ao n´umero m´aximo de warps ativos suportados pelo SM

shared load transactions contagem de operac¸˜oes de leitura na mem´oria comparti-lhada

shared store transactions contagem de operac¸˜oes de escrita na mem´oria comparti-lhada

local store transactions contagem de operac¸˜oes de escrita na mem´oria local local load transactions contagem de operac¸˜oes de leitura na mem´oria local gld transactions contagem de operac¸˜oes de leitura na mem´oria global gst transactions contagem de operac¸˜oes de escrita na mem´oria global inst fp 32 operac¸˜oes de ponto flutuante de precis˜ao simples realizadas inst fp 64 operac¸˜oes de ponto flutuante de precis˜ao dupla realizadas inst integer operac¸˜oes com inteiros realizadas

Tabela 4: Descric¸˜ao de m´etricas

O nvprof retorna valores m´aximos, m´edios e m´ınimos para cada m´etrica apresentada, utili-zamos apenas os valores m´edios de cada m´etrica. A partir dos dados extra´ıdos, somamos

sha-red load transactionse shared store transactions, chamamos o resultado de shared total transactions, a soma entre local load transactions e local store transactions foi nomeada local total transactions, do mesmo modo a soma entre gld transactions e gsd transactions foi chamada de global total -transactions. Uma vez com os dados das m´etricas foi necess´ario organizar as sa´ıdas do nvprof em uma tabela onde cada kernel foi identificado por uma letra correspondente a aplicac¸˜ao da qual fazia parte junto a um n´umero que o diferenciava dos kernels da mesma aplicac¸˜ao.

Devido a variac¸˜ao nas grandezas das m´etricas, algumas eram porcentagens enquanto outras tratavam-se de contagem de eventos que algumas vezes chegavam a milh˜oes, foi necess´ario centrar e normalizar os dados uma vez que essa diferenc¸a entre as m´etricas influenciaria os resultados do PCA. Outro ponto ´e que algumas m´etricas precisaram ser exclu´ıdas da an´alise nos casos onde os valores medidos para todos os kernels eram zero, j´a que tal fato impossibilitaria o uso do PCA.

(38)

Nas primeiras an´alises utilizando o PCA junto a observac¸˜ao dos dados, era vis´ıvel que haviam kernels de pouca importˆancia para a nossa an´alise e que acabavam por influenciar o resultado do PCA. Assim definimos um crit´erio para remover os kernels pouco importantes para as aplicac¸˜oes, o crit´erio trata-se do seguinte, dado uma aplicac¸˜ao e o conjunto de kernels que a comp˜oe, utilizamos o tempo m´edio de execuc¸˜ao de cada kernel e calculamos a porcentagem do tempo de execuc¸˜ao do kernel em relac¸˜ao ao tempo de execuc¸˜ao da aplicac¸˜ao. Dados de tempo de execuc¸˜ao dos kernels, n´umero de execuc¸˜oes e n´umero de registradores, tamb´em inclu´ıdo na tabela de entrada para o PCA, foram extra´ıdos usando o modo gpu-trace do nvprof. Caso um kerneltivesse a porcentagem do tempo de execuc¸˜ao menor do que o tempo m´edio de execuc¸˜ao dos outros kernels da mesma aplicac¸˜ao subtra´ıdo do desvio padr˜ao, o kernel era cortado da analise. Assim, ap´os o corte dos kernels de baixa importˆancia, o PCA era executado novamente. Ap´os o tratamento dos dados, observamos o peso das componentes dado pelo PCA, assim, de acordo com um gr´afico que exibia a variˆancia de cada componente. Conforme a variac¸˜ao do peso das componentes, decidimos se utilizar´ıamos duas ou trˆes dimens˜oes.

Com os dados do PCA, utilizamos o k-means para determinar os grupos. O n´umero de grupos foi obtido experimentalmente e com variac¸˜oes para cada pacote de benchmark. Assim, a partir das diferentes sa´ıdas que obtivemos de cada pacote analisamos como as m´etricas se comportavam para um dado grupo, quando haviam grupos onde as m´etricas se comportavam de maneira muito semelhante,n´os utiliz´avamos o k-means com um n´umero menor de grupos at´e que tiv´essemos um n´umero de grupos onde cada grupo tivesse m´etricas que variavam de forma semelhante dentro do grupo e de forma distinta em relac¸˜ao aos outros grupos.

Obtidos os dados do K-means junto aos do PCA, analisamos cada grupo gerado em termos das m´etricas e categorizamos esses grupos a partir de suas caracter´ısticas. Tamb´em observamos o comportamento de cada aplicac¸˜ao e a poss´ıvel presenc¸a dos kernels em grupos de carac-ter´ısticas diferentes.

(39)

CAP´ITULO 5 - AN ´

ALISE DE RESULTADOS

Neste cap´ıtulo apresentamos os resultados dos experimentos realizados com os pacotes de benchmarks e interpretac¸˜oes para esses resultados. Nas an´alises dos grupos encontrados em cada pacote, para que fosse poss´ıvel distinguir os kernels nos gr´aficos sem comprometer a visi-bilidade, usamos uma codificac¸˜ao que consiste em um par formado por uma letra e um n´umero, assim cada kernel ganhou um c´odigo composto por uma letra que corresponde a aplicac¸˜ao na qual pertence e um n´umero para distingui-lo dos outros kernels da mesma aplicac¸˜ao. Devido a criac¸˜ao da codificac¸˜ao foi necess´ario apresentamos tabelas, algumas muito extensas, associando esses c´odigos `as aplicac¸˜oes e aos kernels.

5.1

RODINIA

Comec¸amos com cinquenta e oito kernels de vinte e duas aplicac¸˜oes, assim detectamos kernelsde pouca express˜ao que consumiam poucos recursos e eram executados em um tempo muito baixo. Esses kernels pouco expressivos dificultavam a an´alise visual e assim utilizamos o crit´erio descrito no cap´ıtulo 4 para removˆe-los. Ap´os a remoc¸˜ao dos kernels, ficamos com um total de quarenta e quatro, nenhuma aplicac¸˜ao teve todos os seus kernels cortados.

Tivemos problemas para extrac¸˜ao de m´etricas da aplicac¸˜ao CFD e por isso tivemos que retir´a-la da an´alise. Tamb´em removemos para esse caso a m´etrica de contagem para operac¸˜oes na mem´oria local devido ao baixo uso por parte de todos os kernels da aplicac¸˜ao, o que tornava a m´etrica pouco importante para observac¸˜ao das variˆancias.

Talvez pela ´epoca em que foram desenvolvidas, com excec¸˜ao da aplicac¸˜ao Huffman in-clu´ıda na vers˜ao 3.0 de 2015, as aplicac¸˜oes do pacote Rodinia n˜ao fazem uso de paralelismo no que se refere a criac¸˜ao de mais de uma stream, o que faz com que kernels da mesma aplicac¸˜ao possam ser executados de forma concorrente. Talvez exista a possibilidade de otimizac¸˜ao de algumas aplicac¸˜oes do pacote ao usarem essa tecnologia, no entanto isso traria a necessidade de reimplementac¸˜ao de alguns algoritmos.

Nesse caso utilizamos trˆes componentes do PCA como entrada para o k-means devido a distribuic¸˜ao das variˆancias mas representamos esse resultado tanto em um gr´afico tridimensional

(40)

quanto um gr´afico bidimensional.

Figura 11: gr´afico exibindo duas componentes

(41)

Figura 13: gr´afico rotacionado exibindo trˆes componentes

A direc¸˜ao dos vetores nos gr´aficos nos fornece algumas informac¸˜oes interessantes no caso do Rodinia, a maioria dos kernels observados que fazem transac¸˜oes na mem´oria global tamb´em fazem transac¸˜oes na mem´oria compartilhada, indicando que a maior parte das transac¸˜oes de mem´oria acontecem entre esses dois tipos. Outro caso ´e a associac¸˜ao de ocupˆancia, n´umero de instruc¸˜oes com inteiros e eficiˆencia.

5.1.1 GRUPO 1 - KERNELS COM USO DE MEM ´ORIA INTENSIVA Grupo composto pelos kernels a seguir:

(42)

c´odigo aplicac¸˜ao kernel

B1 backprop bpnn layerforward CUDA

D1 dwt2d fdwt97Kernel

D2 dwt2d fdwt97Kernel

D3 dwt2d fdwt97Kernel

D4 dwt2d c CopySrcToComponents I1 huffman vlc encode kernel sm64huff

J4 hybridsort bucketsort

J7 hybridsort bucketcount

N2 lud lud perimeter

N3 lud lud internal

R1 nw needle cuda shared 1

R2 nw needle cuda shared 2

U1 pathfinder dynproc kernel

W2 srad-v1 reduce

Tabela 5: Rodinia, grupo 1

Pelo posicionamento do grupo nos gr´aficos, observamos a tendˆencia do mesmo para realizac¸˜ao de operac¸˜oes em mem´oria sendo essa sua caracter´ıstica mais marcante. No entanto h´a outras caracter´ısticas interessantes quando observamos o gr´afico com trˆes componentes e os dados originais, o grupo n˜ao faz operac¸˜oes com ponto flutuante de precis˜ao dupla, tem ocupˆancia vari´avel enquanto sua eficiˆencia ´e alta para a grande maioria dos integrantes, boa parte tamb´em faz operac¸˜oes com inteiros.

O grupo possui alguns elementos mais afastados da maioria, caso de R1 e R2 devido a sua baixa ocupˆancia, pr´oxima de 6%, o que significa que durante a execuc¸˜ao desses kernels, haviam poucos warps ativos em relac¸˜ao a capacidade m´axima do SM. O kernel J4 tamb´em tem caracter´ıstica similar adicionada ao fato de que n˜ao faz operac¸˜oes com inteiros.

5.1.2 GRUPO 2 - KERNELS DE POUCA EXPRESS ˜AO O grupo ´e identificado pelos kernels a seguir:

(43)

c´odigo aplicac¸˜ao kernel

E2 gaussian Fan1

N1 lud lud diagonal

P1 myocyte 10 kernel

S2 particlefilter-float likelihood kernel S3 particlefilter-float normalize weights kernel

Tabela 6: Rodinia, grupo 2

Apesar do crit´erio de corte descrito nesse trabalho, alguns poucos kernels passaram pelo crit´erio e acabaram por integrar esse grupo. Atrav´es da observac¸˜ao dos dados junto a representac¸˜ao visual chegamos a conclus˜ao de que o grupo tem pouca relevˆancia em termos de uso de recur-sos, assim como seu tempo de execuc¸˜ao ´e ´ınfimo quando comparado aos kernels das aplicac¸˜oes das quais fazem parte. Um ponto importante a ser levantado ´e a aplicac¸˜ao myocite s´o estar pre-sente nesse grupo, demonstrando que para os crit´erios que observamos a aplicac¸˜ao tem pouca relevˆancia.

5.1.3 GRUPO 3 - KERNELS COM ALTO N ´UMERO DE OPERAC¸ ˜OES DE PONTO FLU-TUANTE DE PRECIS ˜AO DUPLA

c´odigo aplicac¸˜ao kernel F1 heartwall kernel H1 hotspot calculate temp L1 lavaMD kernel gpu cuda M2 leukocyte IMGVF kernel X1 srad-v2 srad cuda 1 X2 srad-v2 srad cuda 2

Tabela 7: Rodinia, grupo 3

Esse grupo ´e caracterizado por operac¸˜oes com ponto flutuante de precis˜ao dupla, essa carac-ter´ıstica o diferencia dos demais grupos ainda que tamb´em realize um alto n´umero de operac¸˜oes de ponto flutuante de precis˜ao simples. Observando as assinaturas dos kernels dessas aplicac¸˜oes s´o encontramos vari´aveis do tipo double no kernel da aplicac¸˜ao lavaMD, o que se confirma em seu c´odigo fonte. Quanto as outras aplicac¸˜oes, assim como suas assinaturas sugerem, o c´odigo fonte dos kernels n˜ao faz uso de vari´aveis do tipo double, o que parece contrariar os resultados

(44)

mostrados pelo nvprof para a m´etrica em quest˜ao, isso tamb´em pode ser observado em casos isolados nos outros grupos.

5.1.4 GRUPO 4 - ALTA OCUP ˆANCIA E OPERAC¸ ˜OES COM INTEIROS

c´odigo aplicac¸˜ao kernel

A1 b+tree findRangeK

A2 b+tree findK

B2 backprop bpnn adjust weights cuda

C1 bfs Kernel

C2 bfs Kernel2

E1 gaussian Fan2

G1 hotspot3d hotspotOpt1

J5 hybridsort mergeSortPass

K1 kmeans invert mapping

K2 kmeans kmeansPoint

O1 mummergpu mummergpuKernel

O2 mummergpu printKernel

Q1 nn euclid

S4 particlefilter-float find index kernel T1 particlefilter-naive kernel

V1 sc gpu kernel compute cost

W3 srad-v1 srad2

W5 srad-v1 prepare

W6 srad-v1 srad

Tabela 8: Rodinia, grupo 4

O grupo mais populoso dos quatro, a posic¸˜ao dos integrantes do grupo oposta aos vetores de operac¸˜ao em mem´oria nos d´a a informac¸˜ao que se confirma nos dados originais de que os kernels desse grupo n˜ao realizam operac¸˜oes na mem´oria compartilhada e nem na mem´oria global. Sua posic¸˜ao ´e tamb´em justificada pela proximidade dos vetores de ocupˆancia, eficiˆencia, operac¸˜oes com inteiros e a porcentagem do tempo de execuc¸˜ao dos kernels, apesar desse grupo de vetores caracterizarem o grupo, isso n˜ao necessariamente significa que todos os integrantes tem valores altos para todas essas caracter´ısticas, mas que para a maioria delas isso se confirma.

(45)

5.2

PARBOIL

Para essa an´alise, retiramos a contagem de operac¸˜oes com vari´aveis de ponto flutuante de precis˜ao dupla em raz˜ao dos kernels n˜ao realizarem esse tipo de operac¸˜ao segundo os dados do nvprof, logo n˜ao havia variˆancia. Outro corte realizado foi em relac¸˜ao aos kernels, dos vinte e seis originais ao utilizarmos o crit´erio de corte ficamos com vinte e quatro. Os kernels cortados pertenciam as aplicac¸˜oes MRI-Q e SAD, n˜ao eram os ´unicos kernels dessas aplicac¸˜oes, assim n˜ao foram completamente descartadas.

De todos os pacotes analisados, o Parboil ´e o mais antigo, n˜ao existem aplicac¸˜oes nele que fac¸am uso de v´arias streams, assim, n˜ao possui uso de concorrˆencia em uma mesma aplicac¸˜ao. Quanto ao uso do PCA, as duas primeiras componentes possuem mais de 50% da variˆancia, assim nesse caso optamos pela abordagem com duas dimens˜oes. O baixo n´umero de kernels com relac¸˜ao aos outros pacotes tamb´em dificultou a analise com k-means, assim utilizamos a sa´ıda do m´etodo apenas como um ponto de partida e modificamos o agrupamento inicial atrav´es da comparac¸˜ao entre os elementos dos grupos.

(46)

Figura 14: Parboil: gr´afico com duas componentes

A direc¸˜ao dos vetores no gr´afico indicam a associac¸˜ao entre o n´umero de transac¸˜oes com a mem´oria compartilhada e o total de operac¸˜oes com n´umeros de ponto flutuante, assim como a correlac¸˜ao desse par com o n´umero de registradores utilizados pelos kernels em uma execuc¸˜ao. Tamb´em nota-se a relac¸˜ao entre transac¸˜oes na mem´oria global e a eficiˆencia dos SMs.

(47)

5.2.1 GRUPO 1 - KERNELS COM ALTA EFICI ˆENCIA

c´odigo aplicac¸˜ao kernel

B1 cutcp cuda cutoff potential lattice6overlap

D1 lbm performStreamCollide kernel

E2 mri-gridding splitRearrange

E8 mri-gridding splitSort

F1 mri-q ComputeQ GPU

G2 sad mb sad calc

G3 sad larger sad calc 8

I1 spmv spmv jds

E7 mri-gridding gridding GPU

H1 sgemm mysgemmNT

Tabela 9: Parboil, grupo 1

S˜ao os Kernels mais representativos do Parboil, sua caracter´ıstica principal ´e a alta eficiˆencia, o que indica baixa ociosidade por parte dos SMs. A posic¸˜ao dos seus elementos no gr´afico aponta que o grupo ´e uma combinac¸˜ao de kernels que fazem operac¸˜oes com mem´oria com-partilhada ou global, ou ainda os dois tipos simultaneamente. O kernel E7 esta visivelmente mais afastado do grupo, isso deve-se ao n´umero de operac¸˜oes com inteiros que faz, na ordem de bilh˜oes, seu n´umero de transac¸˜oes na mem´oria compartilhada tamb´em ´e bem alto, o kernel apenas se sobressai mas segue as caracter´ısticas do grupo.

5.2.2 GRUPO 2 - KERNELS COM ALTA EFICI ˆENCIA E BAIXA OCUP ˆANCIA

c´odigo aplicac¸˜ao kernel

A1 bfs BFS kernel multi blk inGPU J1 stencil block2D hybrid coarsen x

Tabela 10: Parboil, grupo 2

Os Kernels desse grupo s˜ao ´unicos para suas respectivas aplicac¸˜oes, uma das caracter´ısticas que definem a posic¸˜ao do grupo no gr´afico, no entanto o que os torna uma excec¸˜ao em relac¸˜ao aos kernels de outros grupos ´e a forma como os SMs s˜ao utilizados, a alta eficiˆencia se deve ao fato dos warps estarem sendo utilizados na maior parte do tempo, a baixa ocupˆancia indica que os SMs n˜ao est˜ao sendo pouco utilizados. Especificamente esse caso indica que sempre h´a

(48)

warpsnos SMs, por outro lado h´a um n´umero bem mais baixo de warps do que a capacidade total dos SMs.

5.2.3 GRUPO 3 - KERNELS DE EXECUC¸ ˜AO R ´APIDA COM USO INTENSIVO DE IN-TEIROS

c´odigo aplicac¸˜ao kernel

C1 histo histo prescan kernel

C2 histo histo main kernel

C3 histo histo final kernel

C4 histo histo intermediates kernel E9 mri-gridding scan L1 kernel

G1 sad larger sad calc 16

Tabela 11: Parboil, grupo 3

A posic¸˜ao desse grupo, com o vetor correspondente a m´etrica de porcentagem do tempo apontando em direc¸˜ao oposta, indica que os integrantes tem baixa porcentagem de tempo quando comparados aos kernels das aplicac¸˜oes das quais fazem parte. Outra de suas caracter´ısticas s˜ao as operac¸˜oes com n´umeros inteiros, a contagem n˜ao ´e t˜ao elevada quanto o primeiro grupo, no entanto ´e alta se comparada com os outros. Tamb´em ´e vis´ıvel que a posic¸˜ao dos integrantes desse grupo se op˜oem ao vetor de instruc¸˜oes com ponto flutuante de precis˜ao simples, o pouco uso dessas instruc¸˜oes ´e algo recorrente para praticamente todos os integrantes. Quanto as outras m´etricas o grupo se comporta de maneira irregular, o que de fato contribuiu para sua posic¸˜ao mais centralizada.

5.2.4 GRUPO 4 - KERNELS DE EXECUC¸ ˜AO R ´APIDA E BAIXO USO DE REGISTRA-DORES

c´odigo aplicac¸˜ao kernel E1 mri-gridding reorder kernel E4 mri-gridding uniformAdd E6 mri-gridding binning kernel

Tabela 12: Parboil, grupo 4

O grupo composto apenas de Kernels da aplicac¸˜ao mri-gridding, sua posic¸˜ao ´e explicada pela sua baixa porcentagem de tempo, uso de baixo n´umero de registradores, caracter´ıstica

(49)

crucial para diferenci´a-lo dos demais grupos. Observa-se tamb´em uma grande quantidade de operac¸˜oes com inteiros e operac¸˜oes na mem´oria global. Eficiˆencia e ocupˆancia s˜ao m´edias para E4, o que explica o fato de estar um pouco mais afastado de E1 e E6.

5.2.5 GRUPO 5 - KERNELS POUCO SIGNIFICATIVOS

c´odigo aplicac¸˜ao assinatura do kernel

A2 bfs BFS in GPU kernel

K1 tpacf gen hists

Tabela 13: Parboil, grupo 5

O grupo ´e constitu´ıdo basicamente de kernels que passaram no crit´erio de corte mas tem usam pouco os recursos analisados em relac¸˜ao aos que constituem as outras aplicac¸˜oes do pa-cote.

5.3

SHOC

Dos pacotes analisados, o SHOC, ´e o que recebeu atualizac¸˜oes mais recentemente, muito provavelmente por esse motivo encontramos aplicac¸˜oes que fazem uso massivo de m´ultiplas streams, sendo elas S3D e Triad, assim existe concorrˆencia entre kernels diferentes sendo exe-cutados simultaneamente. Uma caracter´ıstica da implementac¸˜ao das aplicac¸˜oes do SHOC, que o diferencia dos demais pacotes, ´e ter kernels bem r´apidos, e que s˜ao executados muitas vezes, aplicac¸˜oes compostas de apenas um kernel s˜ao raras.

Quanto a an´alise realizada, n˜ao foi poss´ıvel extrair m´etricas para algumas aplicac¸˜oes do chamado n´ıvel zero do SHOC, portanto decidimos cortar esse n´ıvel da an´alise, a proposta desse n´ıvel tamb´em teve peso consider´avel nesse corte por se tratar de um conjunto de aplicac¸˜oes com kernels artificiais para testar nuances de baixo n´ıvel do hardware assim como a detecc¸˜ao de defeitos. Restaram um total de cento e seis kernels onde quarenta e sete pertenciam ao n´ıvel um e cinquenta e nove kernels do n´ıvel dois. N˜ao foi utilizado o crit´erio de corte apresentado no cap´ıtulo 4, primeiro pelo grande n´umero de kernels do pacote, segundo por que a maior parte da diversidade do pacote encontra-se nos kernels que seriam hipoteticamente cortados, j´a que s˜ao integrantes do n´ıvel um desse pacote.

(50)

Figura 15: SHOC: gr´afico com duas componentes

Para o gr´afico escolhemos utilizar duas componentes, devido as duas primeiras componen-tes deterem mais de 60% da variˆancia. O gr´afico mostra uma forte correlac¸˜ao entre a porcen-tagem de tempo e o n´umero de operac¸˜oes na mem´oria compartilhada, enquanto as operac¸˜oes em mem´oria global est˜ao associadas `a eficiˆencia. Tamb´em h´a uma certa proximidade entre as operac¸˜oes com n´umeros inteiros e as de ponto flutuante de precis˜ao simples. De resto, as m´etricas est˜ao bem distribu´ıdas.

(51)

5.3.1 GRUPO 1 - KERNELS COM MAIOR TEMPO DE EXECUC¸ ˜AO E USO DE MEM ´ORIA

c´odigo aplicac¸˜ao kernel

D3 FFT FFT512 device

D4 FFT IFFT512 device

D5 FFT IFFT512 device

D6 FFT FFT512 device

E1 GEMM maxwell sgemm 128x64 nn

E2 GEMM gemm kernel2x2 tile multiple core

E3 GEMM maxwell sgemm 128x64 nt

E4 GEMM void gemm kernel2x2 tile multiple core

F1 MD5Hash FindKeyWithDigest Kernel

G1 MD compute lj force

H3 NeuralNet axpy kernel val

H7 NeuralNet kernelBackprop1

H8 NeuralNet gemm kernel1x1 core

I1 Reduction reduce

I2 Reduction reduce

J1 Scan reduce

J2 Scan reduce

J3 Scan bottom scan

J6 Scan bottom scan

K2 Sort findRadixOffsets

K3 Sort radixSortBlocks

K5 Sort reorderData

L1 Spmv void spmv csr vector kernel

L7 Spmv void spmv csr vector kernel

M1 Stencil2D void StencilKernel

M2 Stencil2D void StencilKernel

N1 Triad triad

O1 QtClustering QTC device

Tabela 14: SHOC, grupo 1, parte 1

O grupo ´e composto praticamente todo de aplicac¸˜oes do n´ıvel um, o que faz com que seja o grupo mais diverso. Entre suas caracter´ısticas est˜ao, a porcentagem de tempo alta em relac¸˜ao

(52)

aos outros grupos, alto n´umero de operac¸˜oes nas mem´orias global e compartilhada, ocupˆancia m´edia. As operac¸˜oes mais realizadas pelo grupo s˜ao as com n´umeros inteiros.

5.3.2 GRUPO 2 - KERNELS POUCO SIGNIFICANTES

c´odigo aplicac¸˜ao kernel

C1 BFS BFS kernel warp H1 NeuralNet kernelFeedForward3 H2 NeuralNet kernelBackprop3b H4 NeuralNet kernelBackprop3a H5 NeuralNet kernelInitNablaB H6 NeuralNet kernelBackprop2

H9 NeuralNet kernelInitNablaW(float*, int)

J4 Scan scan single block

J5 Scan void scan single block

K1 Sort scan K4 Sort vectorAddUniform4 L2 Spmv zero L3 Spmv zero L4 Spmv spmv ellpackr kernel L5 Spmv spmv csr scalar kernel L6 Spmv spmv ellpackr kernel L8 Spmv spmv csr scalar kernel

O2 QtClustering reduce card device O4 QtClustering trim ungrouped pnts indr array O5 QtClustering update clustered pnts mask

Tabela 15: SHOC, grupo 2

A posic¸˜ao do grupo afastada nos gr´aficos e oposta ao sentido dos vetores das m´etricas indica que esse grupo ´e pouco significante, usa pouco os recursos analisados. Apresenta ape-nas uma porcentagem de tempo bem diversa entre seus elementos, o que contribuiu para essa representac¸˜ao.

(53)

c´odigo aplicac¸˜ao kernel

D1 FFT chk512 device

D2 FFT chk512 device

G2 MD compute lj force

O3 QtClustering compute degrees

P1 s3d rdsmh kernel P2 s3d rdwdot10 kernel P3 s3d qssab kernel P4 s3d ratt kernel P5 s3d rdwdot2 kernel P6 s3d rdwdot3 kernel P7 s3d rdwdot6 kernel P8 s3d rdwdot7 kernel P9 s3d rdwdot8 kernel P10 s3d rdwdot9 kernel P11 s3d qssa2 kernel P12 s3d ratx2 kernel P13 s3d rdwdot kernel P14 s3d ratx4 kernel J1 Scan reduce J2 Scan reduce

J3 Scan bottom scan

J6 Scan bottom scan

K2 Sort findRadixOffsets K3 Sort radixSortBlocks K5 Sort reorderData L1 Spmv spmv csr vector kernel L7 Spmv spmv csr vector kernel M1 Stencil2D StencilKernel M2 Stencil2D StencilKernel N1 Triad triad O1 QtClustering QTC device Tabela 16: SHOC, grupo 3, parte 1

(54)

5.3.3 GRUPO 3 - KERNELS DE EXECUC¸ ˜AO R ´APIDA E BAIXA OCUP ˆANCIA P15 s3d ratt10 kernel P25 s3d ratt9 kernel P26 s3d qssa kernel P27 s3d rdsmh kernel P28 s3d rdwdot10 kernel P29 s3d qssab kernel P30 s3d ratt kernel P31 s3d rdwdot2 kernel P32 s3d rdwdot3 kernel P33 s3d rdwdot6 kernel P34 s3d rdwdot7 kernel P35 s3d rdwdot8 kernel P36 s3d rdwdot9 kernel P37 s3d qssa2 kernel P38 s3d ratx2 kernel P39 s3d rdwdot kernel P40 s3d ratx4 kernel P41 s3d ratxb kernel P42 s3d ratxb kernel P43 s3d ratt2 kernel P44 s3d ratt10 kernel P45 s3d ratt3 kernel P46 s3d ratx kernel P47 s3d ratt4 kernel P48 s3d ratt5 kernel P49 s3d ratt6 kernel P50 s3d ratx kernel P51 s3d ratt7 kernel P52 s3d ratt8 kernel P53 s3d ratt9 kernel P54 s3d qssa kernel Tabela 17: SHOC, grupo 3, parte 2

(55)

Grupo composto basicamente por Kernels da aplicac¸˜ao s3d. Especificamente no caso dos kernelsdo s3d, observamos uma baixa porcentagem de tempo e baixa ocupˆancia, uma carac-ter´ıstica das aplicac¸˜oes que utilizam concorrˆencia, kernels r´apidos cujo os warps n˜ao consomem todo o SM, dando assim espac¸o para que warps de outros kernels sejam executados. A alta eficiˆencia e o n˜ao uso da mem´oria compartilhada tamb´em s˜ao caracter´ısticas do grupo. Mais uma observac¸˜ao entre as aplicac¸˜oes do s3d, ´e que mesmo entre elas vemos dois grupos se for-mando, e isso se deve ao fato de que um subgrupo realiza um n´umero alto de operac¸˜oes com n´umeros de ponto flutuante de precis˜ao dupla, enquanto o outro subgrupo n˜ao faz nenhuma operac¸˜ao desse tipo. No caso de D1 e D2, eles seguem a mesma caracter´ıstica geral do grupo mas tem eficiˆencia bem menor que os outros kernels, por isso sua posic¸˜ao separada dos demais.

5.4

AN ´

ALISE COM TODOS OS KERNELS

Nesta an´alise unimos todos os kernels dos pacotes estudados, reunimos um total de cento e setenta e trˆes kernels que foram divididos em quatro grupos, utilizamos as duas primeiras componentes, PC1 e PC2, para visualizac¸˜ao assim como para entrada do k-means. A motivac¸˜ao para essa analise ´e mostrar a semelhanc¸as e diferenc¸as entre as aplicac¸˜oes dos pacotes de bench-marks. Por se tratar dessa vez de uma comparac¸˜ao entre pacotes, decidimos por n˜ao explicitar os kernels que integram cada grupo, no entanto apresentaremos o n´umero de kernels de cada pacote nos grupos encontrados.

(56)

Figura 16: kernels de todos os pacotes, gr´afico com duas componentes

Comparando a direc¸˜ao dos vetores das m´etricas desse gr´afico com o gr´afico do SHOC, ´e percept´ıvel que devido ao seu grande n´umero de kernels, esse pacote acabou por influen-ciar a posic¸˜ao de alguns vetores como a porcentagem de tempo de execuc¸˜ao e a contagem de instruc¸˜oes de ponto flutuante de precis˜ao dupla, o angulo entre esses vetores ´e praticamente o mesmo. Algumas correlac¸˜oes entre m´etricas feitas para o SHOC com a presenc¸a de kernels mais diversos tamb´em diminuiu.

(57)

5.4.1 GRUPO 1 - KERNELS POUCO SIGNIFICATIVOS

Rodinia Parboil SHOC

0 5 10 15 20 n ´umero de k ernels

Figura 17: grupo 1, n ´umero de kernels por pacote

O grupo ´e uma combinac¸˜ao dos grupos de kernels de baixa importˆancia, usam pouco os recursos analisados, encontrados nas an´alises individuais dos pacotes. A maior presenc¸a de kernelsdo pacote SHOC ´e resultado do crit´erio de corte utilizado nos outros pacotes, com os quatorze kernels cortados do Rodinia somados aos elementos desse grupo, haveria um empate com o SHOC, Parboil teve poucos kernels cortados, apenas dois, ent˜ao n˜ao influenciaria no resultado.

5.4.2 GRUPO 2 - KERNELS ROBUSTOS

Rodinia Parboil SHOC

0 5 10 n ´umero de k ernels

Figura 18: grupo 2, n ´umero de kernels por pacote

O grupo ´e formado por kernels que possuem alta eficiˆencia, fazem muitas operac¸˜oes com n´umeros inteiros e com n´umeros de ponto flutuante de precis˜ao simples, tem ocupˆancia m´edia

(58)

por volta de 70%. De todos os grupos analisados, ´e o que mais utiliza os recursos da GPU. As proporc¸˜oes de kernels por pacote nesse grupo junto as informac¸˜oes do grupo 1, mostram que Rodinia e Parboil possuem kernels que exploram mais a capacidade da GPU do que o pacote SHOC, ainda que esse tipo de kernel n˜ao seja maioria para Rodinia e Parboil.

5.4.3 GRUPO 3 - KERNELS DE COMPORTAMENTO NEUTRO

Rodinia Parboil SHOC

0 5 10 15 20 25 n ´umero de k ernels

Figura 19: grupo 3, n ´umero de kernels por pacote

O grupo tem caracter´ısticas similares ao grupo dois, alto n´umero de operac¸˜oes com inteiros, ocupˆancia m´edia por volta de 60%. Em termos de porcentagem de tempo tamb´em fica atr´as do grupo dois mas a frente de todos os outros. A eficiˆencia ´e alta mas n˜ao tanto quanto os grupos dois e quatro. Excluindo o n´umero de operac¸˜oes com ponto flutuante de precis˜ao dupla, operac¸˜ao que em geral o grupo faz muito pouco, o resto das m´etricas se distribui sem gerar n´umeros que superem o grupo dois e nem qualquer caracter´ıstica forte de outro grupo, assim esse grupo se caracteriza mais pelo equil´ıbrio de seus kernels. Vale observar que entre todos, ´e o grupo mais equilibrado tratando-se do n´umero de kernels que representa cada pacote.

(59)

5.4.4 GRUPO 4 - KERNELS DE BAIXA OCUP ˆANCIA E ALTA EFICI ˆENCIA

Rodinia Parboil SHOC

0 20 40 60 n ´umero de k ernels

Figura 20: grupo 4, n ´umero de kernels por pacote

Grupo composto de sessenta e nove kernels, caracterizados pela alta ocupˆancia, baixa eficiˆencia e baixa porcentagem do tempo de execuc¸˜ao, o que se justifica por sua composic¸˜ao ser majoritariamente de kernels da aplicac¸˜ao s3d do pacote SHOC, a aplicac¸˜ao tem caracter´ısticas bem distintas das aplicac¸˜oes de todos os outros pacotes e inclusive do pr´oprio pacote a qual per-tence, cinquenta e quatro kernels dessa aplicac¸˜ao fazem parte desse grupo. Outra caracter´ıstica ´e o n´umero de operac¸˜oes com inteiros mais baixo que os outros grupos, mesmo assim todos os elementos desse grupo fazem esse tipo de operac¸˜ao. N˜ao h´a kernels do Parboil nesse grupo, al´em disso h´a apenas trˆes do pacote Rodinia. De todos os grupos ´e o que tem a maior m´edia de uso de registradores.

Referências

Documentos relacionados

[r]

Há centralidade na linguagem e na capacidade de conseguir compre- endê-la e utilizá-la de forma adequada (SÃO PAULO, 2010). Além disso, este princípio responsabiliza to-.. dos

A Psicologia, por sua vez, seguiu sua trajetória também modificando sua visão de homem e fugindo do paradigma da ciência clássica. Ampliou sua atuação para além da

A inscrição do imóvel rural após este prazo implica na perda do direito de manter atividades agropecuárias em áreas rurais consolidadas em APP e Reserva Legal, obrigando

A apixaba- na reduziu o risco de AVE e embolismo sistêmico em mais de 50%: houve 51 eventos entre os pacientes do grupo apixabana versus 113 no grupo do AAS

17 CORTE IDH. Caso Castañeda Gutman vs.. restrição ao lançamento de uma candidatura a cargo político pode demandar o enfrentamento de temas de ordem histórica, social e política

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

De acordo com estes resultados, e dada a reduzida explicitação, e exploração, das relações que se estabelecem entre a ciência, a tecnologia, a sociedade e o ambiente, conclui-se