SlideShare uma empresa Scribd logo
1 de 39
Técnicas	
  avançadas	
  de	
  u.lização	
  
de	
  GPU	
  e	
  CUDA	
  
Jose	
  Ricardo	
  da	
  Silva	
  Junior	
  
Quem	
  sou	
  
•  Bacharel	
  em	
  Análise	
  de	
  Sistemas.	
  
•  Mestre	
  em	
  Ciência	
  da	
  Computação	
  na	
  UFF	
  (Computação	
  Gráfica).	
  
•  Doutorando	
  em	
  Ciência	
  da	
  Computação	
  na	
  UFF	
  (Computação	
  
Gráfica).	
  
•  Doutorado	
  Sanduíche	
  University	
  of	
  Nebraska	
  
•  Professor	
  na	
  Faculdade	
  CCAA.	
  
•  Colaborador	
  na	
  empresa	
  Nullpointer.	
  
•  Pesquisador	
  na	
  área	
  de	
  Computação	
  Gráfica	
  e	
  GPGPU.	
  
Universidade	
  Federal	
  Fluminense	
  

Departamento de Computação com 62
professores doutores
Laboratórios de ponta em diversas áreas de
pesquisa
3	
  
Nvidia	
  Center	
  of	
  Excelence	
  

4	
  
Projetos	
  em	
  GPU	
  
•  Consórcio	
  Nacional	
  de	
  GRID	
  em	
  GPUs	
  
•  Middleware	
  de	
  distribuição	
  de	
  carga	
  entre	
  nós	
  de	
  
GPUs	
  
•  Middleware	
  para	
  o.mização	
  de	
  divergências	
  
•  COLATUS:	
  expansão	
  de	
  par[culas	
  cosmológicas	
  
•  DOMINOES	
  
•  Gerencia	
  de	
  versões	
  em	
  vídeo	
  e	
  imagens	
  
•  Simulação	
  de	
  transito	
  usando	
  autômatos	
  finitos	
  
•  Ray-­‐tracing	
  Hibrido	
  CUDA/OPENGL/Op.X	
  
5	
  
Obje=vo	
  
•  Apresentação	
  de	
  tópicos	
  avançados	
  em	
  CUDA	
  
através	
  da	
  u.lização	
  de	
  um	
  estudo	
  de	
  caso.	
  
–  Simulação	
  de	
  fluidos	
  incompressíveis	
  

•  Equação	
  governante	
  de	
  fluidos	
  de	
  Navier-­‐
Stokes	
  
⎛ ∂v
⎞
ρ ⎜ + v.∇v ⎟ = −∇p + ρg + µ∇ 2v
⎝ ∂t
⎠

∂ρ
+ ∇.( ρv) = 0
∂t

6	
  
Simulação	
  de	
  fluidos	
  
•  Métodos	
  Eulerianos	
  
–  Domínio	
  da	
  simulação	
  discre.zado	
  em	
  grade	
  fixa	
  
–  Computação	
  efetuada	
  em	
  posições	
  fixa	
  da	
  célula	
  
–  O	
  material	
  simulado	
  desloca-­‐se	
  sobre	
  a	
  grade	
  

•  Métodos	
  Lagrangeanos	
  
–  Material	
  se	
  move	
  com	
  o	
  fluido	
  
–  Variáveis	
  de	
  campo	
  calculadas	
  no	
  próprio	
  material	
  
–  Discre.zadas	
  em	
  par[culas	
  ou	
  malhas	
  
7	
  
Simulação	
  de	
  fluidos	
  

8	
  
Smoothed	
  Par=cle	
  Hydrodynamics	
  

•  Método	
  Lagrangeano	
  baseado	
  em	
  par[culas	
  
•  Sem	
  informação	
  de	
  conec.vidade	
  

•  Desenvolvido	
  por	
  Lucy	
  e	
  Gingold/Monaghan	
  para	
  
simulação	
  de	
  fenômenos	
  astroisicos	
  
•  U.liza	
  método	
  de	
  interpolação	
  para	
  integração	
  
de	
  variáveis	
  de	
  campo	
  
9	
  
Smoothed	
  Par=cle	
  Hydrodynamics	
  
•  Fórmula	
  geral	
  
Aj
As (r) = ∑ m j W (r − rj , h)
j
ρj

∇As (r ) = ∑ j m j
2

Aj

ρj

∇ As (r ) = ∑ j m j

∇W ( r − r j , h )

Aj

ρj

∇ 2W (r − rj , h)

10	
  
Simulação	
  de	
  Fluído	
  

11	
  
Estrutura	
  de	
  dados	
  
•  U.lização	
  de	
  uma	
  grade	
  regular	
  baseada	
  em	
  
tabela	
  hash	
  para	
  classificação	
  das	
  par[culas	
  
–  Grade	
  com	
  tamanho	
  de	
  célula	
  com	
  o	
  dobro	
  do	
  
raio	
  da	
  par[cula	
  
–  Processamento	
  de	
  27	
  células	
  em	
  3D	
  

	
  
1

12	
  
Versão	
  1	
  
•  Processamento	
  de	
  cada	
  par[cula	
  do	
  fluido	
  em	
  
memória	
  global.	
  
Classificar	
  
Par[culas	
  
Calcular	
  Densidade	
  
Calcular	
  Forças	
  
Internas	
  
Calcular	
  Forças	
  
Externas	
  
Integrar	
  

...	
  
while	
  (!quit){	
  
	
  	
  k_classifyPar.cles<<<>>>();	
  //	
  hash	
  genera.on	
  
	
  	
  cudaThreadSynchronize();	
  
	
  	
  k_calculateDensity<<<>>>();	
  
	
  	
  cudaThreadSynchronize();	
  
	
  	
  k_calculateInternalForces<<<>>>();	
  
	
  cudaThreadSynchronize();	
  
	
  	
  k_calculateExternalForces<<<>>>();	
  
	
  cudaThreadSynchronize();	
  
	
  	
  k_integrate<<<>>>();	
  
}	
  
...	
  
	
  

13	
  
Versão	
  1	
  
•  O	
  acesso	
  à	
  memória	
  global	
  é	
  extremamente	
  lento.	
  
–  Para	
  cada	
  par[cula	
  na	
  mesma	
  célula	
  da	
  grid,	
  os	
  mesmos	
  
dados	
  dos	
  vizinhos	
  são	
  lidos	
  várias	
  vezes	
  da	
  memória	
  
global.	
  

•  G80	
  suporta	
  86.4Gb/s	
  de	
  acesso	
  à	
  memoria	
  global.	
  
–  Ponto	
  flutuante	
  de	
  precisão	
  simples	
  =	
  4	
  bytes.	
  
–  Neste	
  caso	
  não	
  podemos	
  carregar	
  mais	
  que	
  86.4	
  /	
  4	
  =	
  21.6	
  
giga	
  data	
  de	
  ponto	
  flutuante	
  simples	
  por	
  segundo.	
  
–  Vale	
  lembrar	
  que	
  teoricamente	
  a	
  performance	
  de	
  uma	
  
G80	
  é	
  367	
  Gflops!	
  
14	
  
Performance	
  

15	
  
Versão	
  2	
  
Área	
  de	
  processamento	
  da	
  par[cula	
  2	
  
1
2

Área	
  de	
  processamento	
  da	
  par[cula	
  1	
  
Área	
  comum	
  entre	
  par[culas	
  1	
  e	
  2	
  
(memória	
  compar.lhada)	
  

Supondo	
  que	
  cada	
  célula	
  armazene	
  2	
  parMculas,	
  qual	
  a	
  taxa	
  de	
  acesso	
  à	
  memória	
  
global	
  sem	
  o	
  compar=lhamento	
  da	
  área	
  comum?	
  
16	
  
Versão	
  2	
  
•  U=lização	
  de	
  memória	
  compar=lhada	
  para	
  redução	
  do	
  acesso	
  à	
  memória	
  global.	
  
	
  
U=lizando	
  memória	
  global:	
  
Par$cula	
  1:	
  9	
  células:	
  18	
  acessos	
  à	
  MG.	
  
	
  
Par$cula	
  2:	
  9	
  células:	
  18	
  acessos	
  à	
  MG.	
  
36	
  acessos	
  
	
  
	
  
U=lizando	
  memória	
  compar=lhada:	
  
Par.cula	
  1:	
  5	
  células:	
  	
  10	
  acessos	
  à	
  MG.	
  
	
  
Par.cula	
  :	
  5	
  células:	
  10	
  acessos	
  à	
  MG.	
  
28	
  acessos	
  
	
  
Área	
  comum:	
  4	
  células:	
  8	
  acessos	
  à	
  MG.	
  
	
  
	
  
17	
  
Versão	
  2	
  
•  U.lização	
  de	
  memória	
  compar.lhada:	
  
–  Para	
  cada	
  conjunto	
  de	
  células,	
  carregar	
  dados	
  de	
  par[culas	
  de	
  células	
  compar.lhadas	
  
na	
  memória	
  compar.lhada,	
  reu.lizando	
  os	
  mesmos	
  para	
  várias	
  par[culas.	
  	
  

void	
  k_processDensity(){	
  
	
  	
  ...	
  
	
  	
  for	
  each	
  cell	
  in	
  grid	
  {	
  
	
  	
  	
  	
  loadPar.cles();	
  
	
  	
  	
  	
  synchronize();	
  
	
  	
  	
  	
  d_processDensity(par.cle);	
  
	
  	
  }	
  
	
  	
  ...	
  
}	
  

•  Obje.vo:	
  reu.lizar	
  ao	
  máximo	
  dados	
  na	
  memória	
  compar.lhada	
  (mesmo	
  
que	
  isso	
  implique	
  em	
  mais	
  re-­‐processamento!)	
  
18	
  
Versão	
  2	
  
•  Algumas	
  etapas	
  durante	
  o	
  processo	
  de	
  
simulação	
  de	
  fluidos	
  podem	
  ser	
  executadas	
  
em	
  paralelo	
  na	
  GPU.	
  

•  A	
  arquitetura	
  FERMI	
  introduziu	
  a	
  possibilidade	
  
de	
  execução	
  de	
  kernels	
  simultâneos.	
  
–  Verificar	
  problemas	
  de	
  dependência	
  entre	
  dados	
  
para	
  kernels	
  diferentes.	
  
19	
  
Versão	
  3	
  
Classificar	
  
Par[culas	
  

Classificar	
  
Par[culas	
  

Calcular	
  Densidade	
  

Calcular	
  
Densidade	
  

syncronize()	
  
Calcular	
  Forças	
  
Internas	
  

Calcular	
  Forças	
  
Internas	
  

Calcular	
  Forças	
  
Externas	
  

Calcular	
  Forças	
  
Externas	
  
Integrar	
  

syncronize()	
  
Integrar	
  

•  Não	
  existe	
  dependendência	
  de	
  dados	
  entre	
  cálculo	
  de	
  forças	
  internas	
  e	
  
externas.	
  
•  Deve-­‐se	
  u.lizar	
  espaços	
  de	
  memórias	
  diferentes	
  para	
  o	
  armazenamento	
  dos	
  
resultados.	
  

20	
  
Versão	
  3	
  
•  A	
  sincronização	
  de	
  kernel	
  simultâneo	
  deve	
  ser	
  
realizada	
  a	
  nível	
  de	
  CPU.	
  
...	
  
while	
  (!quit){	
  
	
  	
  k_classifyPar.cles<<<>>>();	
  //	
  hash	
  genera.on	
  
	
  	
  cudaThreadSynchronize();	
  
	
  	
  k_calculateDensity<<<>>>();	
  
	
  	
  cudaThreadSynchronize();	
  
	
  	
  k_calculateInternalForces<<<>>>();	
  
	
  	
  k_calculateExternalForces<<<>>>();	
  
	
  cudaThreadSynchronize();	
  
	
  	
  k_integrate<<<>>>();	
  
}	
  
...	
  
	
  

21	
  
Paralelismo	
  Dinâmico	
  
•  Habilidade	
  de	
  geração	
  de	
  novos	
  grids	
  pela	
  
GPU.	
  
–  Dinâmico.	
  
–  Simultâneamente.	
  
–  Independente.	
  
–  Introduzido	
  na	
  arquitetetura	
  Kepler.	
  

CPU	
  

GPU	
  

CPU	
  

GPU	
  

22	
  
Paralelismo	
  Dinâmico	
  
•  Programa	
  paralelo	
  simples:	
  

23	
  
Paralelismo	
  Dinâmico	
  
•  Programa	
  paralelo	
  simples:	
  

24	
  
Paralelismo	
  Dinâmico	
  
•  Programa	
  paralelo	
  simples:	
  

25	
  
Paralelismo	
  Dinâmico	
  
•  Programa	
  paralelo	
  simples:	
  

26	
  
Paralelismo	
  Dinâmico	
  
•  Possibilidade	
  de	
  paralelismo	
  dinâmico.	
  

27	
  
Paralelismo	
  Dinâmico	
  
CPU

GPU

GPU	
  as	
  Co-­‐Processor
	
  

CPU

GPU

Autonomous,	
  Dynamic	
  Parallelism
	
  

28	
  
Paralelismo	
  Dinâmico	
  
Coarse grid

Fine grid

Dynamic grid

Higher Performance
Lower Accuracy

Lower Performance
Higher Accuracy

Target performance where
accuracy is required
29	
  
Paralelismo	
  Dinâmico	
  (Programação)	
  
int main() {
float *data;
setup(data);
A <<< ... >>> (data);
B <<< ... >>> (data);
C <<< ... >>> (data);

CPU
main

cudaDeviceSynchronize();
return 0;

GPU

}

A

X

X <<< ... >>> (data);
Y <<< ... >>> (data);
Z <<< ... >>> (data);
cudaDeviceSynchronize();

B

Y

do_more_stuff(data);

C

Z

__global__ void B(float *data)
{
do_stuff(data);

}

30	
  
Paralelismo	
  Dinâmico	
  (Decomposição	
  
LU)	
  

LU decomposition (Fermi)

memcpy
dlaswap<<<>>>
dtrsm<<<>>>
dgemm<<<>>>
next j
}

dgetrf(N, N) {
dgetrf<<<>>>
idamax();
dswap();

CPU	
  is	
  Free	
  

dgetrf(N, N) {
for j=1 to N
for i=1 to 64
idamax<<<>>>
memcpy
dswap<<<>>>
memcpy
dscal<<<>>>
dger<<<>>>
next i

LU decomposition (Kepler)

dscal();
dger();

dlaswap();

dgetrf(N, N) {
for j=1 to N
for i=1 to 64
idamax<<<>>>
dswap<<<>>>
dscal<<<>>>
dger<<<>>>
next i
dlaswap<<<>>>
dtrsm<<<>>>
dgemm<<<>>>
next j
}

synchronize();
}

dtrsm();
dgemm();

CPU Code

GPU Code

CPU Code

GPU Code
31	
  
GPU	
  Direct	
  
•  Nome	
  fornecido	
  à	
  um	
  conjunto	
  de	
  o.mizações	
  de	
  
transferência	
  de	
  dados	
  entre	
  GPU’s.	
  
System
Memory

CPU

GDDR5
Memory

GDDR5
Memory

GDDR5
Memory

GPU1 GPU2

GPU2 GPU1

PCI-e

System
Memory

CPU

PCI-e

Network
Card

Server 1

GDDR5
Memory

Network

Network
Card

Server 2

32	
  
GPU	
  Direct	
  v1	
  
•  Introduziu	
  a	
  capacidade	
  de	
  u.lização	
  da	
  mesma	
  memória	
  

page-­‐locked	
  no	
  host	
  pelos	
  drivers	
  da	
  GPU	
  e	
  Infiniband.	
  
•  Removeu	
  a	
  necessidade	
  de	
  cópia	
  dos	
  dados	
  da	
  GPU	
  para	
  CPU.	
  

33	
  
GPU	
  Direct	
  v2	
  
•  Introduziu	
  a	
  capacidade	
  de	
  acesso	
  e	
  transferência	
  de	
  dados	
  

entre	
  memórias	
  de	
  GPU	
  no	
  mesmo	
  nó	
  sem	
  a	
  necessidade	
  de	
  
cópias	
  para	
  a	
  CPU.	
  

34	
  
GPU	
  Direct	
  v3	
  
•  Introduziu	
  a	
  capacidade	
  de	
  transferência	
  de	
  dados	
  entre	
  duas	
  GPU’s	
  em	
  nós	
  

diferentes	
  u.lizando	
  rede	
  Infiniband,	
  sem	
  necessidade	
  de	
  u.lização	
  de	
  
memória	
  do	
  host	
  (RDMA).	
  

35	
  
Orientação	
  à	
  Objetos	
  
•  Suporte	
  a	
  orientação	
  à	
  objetos	
  
•  Herança	
  
•  Polimorfismo	
  

class	
  Veiculo{	
  
public:	
  
	
  	
  __host__	
  __device__	
  	
  	
  Veiculo(){}	
  
	
  	
  __host__	
  __device__	
  	
  	
  Veiculo(int	
  id){	
  
	
  	
  	
  	
  ID	
  	
  	
  	
  	
  =	
  id	
  +	
  11;	
  	
  
	
  	
  }	
  
	
  
	
  	
  int	
  ID;	
  
};	
  

class	
  Carro	
  :	
  public	
  Veiculo{	
  
public:	
  
	
  	
  	
  __host__	
  __device__	
  	
  	
  Carro(){};	
  
	
  	
  	
  __host__	
  __device__	
  	
  	
  Carro(int	
  id){	
  
	
  	
  	
  	
  	
  vMax	
  =	
  28;	
  	
  
	
  	
  	
  }	
  
	
  	
  	
  	
  
	
  	
  	
  float	
  vMax;	
  
};	
  

36	
  
Orientação	
  à	
  Objetos	
  
__global__	
  	
  
void	
  meuKernel(	
  Veiculo	
  *vet	
  ){	
  
	
  
	
  	
  	
  int	
  indice	
  =	
  blockDim.x	
  *	
  blockIdx.x	
  +	
  threadIdx.x;	
  
	
  	
  	
  	
  
	
  	
  	
  if	
  (threadIdx.x	
  ==	
  0)	
  
	
  	
  	
  	
  	
  	
  vet[indice]	
  =	
  Carro(indice);	
  
	
  	
  	
  else	
  
	
  	
  	
  	
  	
  	
  vet[indice]	
  =	
  Onibus(indice);	
  
}	
  

37	
  
Outras	
  Funcionalidades	
  
•  Operações	
  Atômicas	
  
•  Stream	
  
•  Alocação	
  dinâmica	
  de	
  memória	
  
•  Pilha	
  e	
  Recursão	
  
•  Dire.vas	
  OpenACC	
  

38	
  
Técnicas	
  avançadas	
  de	
  u.lização	
  
de	
  GPU	
  e	
  CUDA	
  
Jose	
  Ricardo	
  da	
  Silva	
  Junior	
  

Mais conteúdo relacionado

Mais procurados

Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...EUBrasilCloudFORUM .
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosEiti Kimura
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Filipo Mór
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open sourceRodrigo Aurélio
 
Apresentacao Cassandra
Apresentacao CassandraApresentacao Cassandra
Apresentacao CassandraPeslPinguim
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLLeonardo Cezar
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Rodrigo Campos
 
Alta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdAlta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdFrederico Madeira
 
Linux Network Fault Tolerance
Linux Network Fault ToleranceLinux Network Fault Tolerance
Linux Network Fault ToleranceFrederico Madeira
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesJoao Galdino Mello de Souza
 
Cluster de Alta Disponibilidade em Linux
Cluster de Alta Disponibilidade em LinuxCluster de Alta Disponibilidade em Linux
Cluster de Alta Disponibilidade em LinuxFrederico Madeira
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linuxelliando dias
 
Cluster de Alta disponibilidade
Cluster de Alta disponibilidadeCluster de Alta disponibilidade
Cluster de Alta disponibilidadeMarcelo Garcia
 

Mais procurados (20)

Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
Um Mecanismo de Auto Elasticidade com base no Tempo de Resposta para Ambiente...
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
 
ARTIGO CLUSTER DE ALTA DISPONIBILIDADE EM SISTEMAS LINUX
ARTIGO CLUSTER DE ALTA DISPONIBILIDADE EM SISTEMAS LINUXARTIGO CLUSTER DE ALTA DISPONIBILIDADE EM SISTEMAS LINUX
ARTIGO CLUSTER DE ALTA DISPONIBILIDADE EM SISTEMAS LINUX
 
GlusterFs
GlusterFsGlusterFs
GlusterFs
 
Bancos de dados open source
Bancos de dados open sourceBancos de dados open source
Bancos de dados open source
 
Apresentacao Cassandra
Apresentacao CassandraApresentacao Cassandra
Apresentacao Cassandra
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQL
 
Replicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManagerReplicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManager
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
 
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86Desempenho e Escalabilidade de Banco de Dados em ambiente x86
Desempenho e Escalabilidade de Banco de Dados em ambiente x86
 
Alta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e DrbdAlta Disponibilidade em Linux com Heartbeat e Drbd
Alta Disponibilidade em Linux com Heartbeat e Drbd
 
Linux Network Fault Tolerance
Linux Network Fault ToleranceLinux Network Fault Tolerance
Linux Network Fault Tolerance
 
Clusters
ClustersClusters
Clusters
 
Virtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno DominguesVirtualização de Banco de Dados por Bruno Domingues
Virtualização de Banco de Dados por Bruno Domingues
 
Cluster de Alta Disponibilidade em Linux
Cluster de Alta Disponibilidade em LinuxCluster de Alta Disponibilidade em Linux
Cluster de Alta Disponibilidade em Linux
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linux
 
Cluster de Alta disponibilidade
Cluster de Alta disponibilidadeCluster de Alta disponibilidade
Cluster de Alta disponibilidade
 

Semelhante a Técnicas avançadas de utilização de GPU e CUDA

PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Serverpichiliani
 
Análise de interfaces para a programação paralela e distribuída
Análise de interfaces para a programação paralela e  distribuídaAnálise de interfaces para a programação paralela e  distribuída
Análise de interfaces para a programação paralela e distribuídaHelton Ritter
 
Modelos de computação distribuída no Hadoop
Modelos de computação distribuída no HadoopModelos de computação distribuída no Hadoop
Modelos de computação distribuída no HadoopBig Data Week São Paulo
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLJohnes Castro
 
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBRAvaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBRJulio Viegas
 
Sistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação ParalelaSistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação ParalelaAdriano Teixeira de Souza
 
Sistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoSistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoAdriano Teixeira de Souza
 
Paralelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto EscalarParalelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto EscalarWendel Oliveira
 
JVM and Tools - ESIG Academy
JVM and Tools - ESIG AcademyJVM and Tools - ESIG Academy
JVM and Tools - ESIG AcademyGleydson Lima
 
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi
 
Cap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfCap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfHurgelNeto
 

Semelhante a Técnicas avançadas de utilização de GPU e CUDA (20)

Palestra
PalestraPalestra
Palestra
 
Gridcomputacionais
GridcomputacionaisGridcomputacionais
Gridcomputacionais
 
Mini-curso CUDA
Mini-curso CUDAMini-curso CUDA
Mini-curso CUDA
 
CUDA/Open CL
CUDA/Open CLCUDA/Open CL
CUDA/Open CL
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Server
 
Análise de interfaces para a programação paralela e distribuída
Análise de interfaces para a programação paralela e  distribuídaAnálise de interfaces para a programação paralela e  distribuída
Análise de interfaces para a programação paralela e distribuída
 
Modelos de computação distribuída no Hadoop
Modelos de computação distribuída no HadoopModelos de computação distribuída no Hadoop
Modelos de computação distribuída no Hadoop
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQL
 
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBRAvaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
 
TCC Apresentacao Final
TCC Apresentacao FinalTCC Apresentacao Final
TCC Apresentacao Final
 
Apresentação sobre o kernel Linux v2.0
Apresentação sobre o kernel Linux v2.0Apresentação sobre o kernel Linux v2.0
Apresentação sobre o kernel Linux v2.0
 
Sistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação ParalelaSistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação Paralela
 
Sistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoSistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - Introdução
 
Paralelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto EscalarParalelização de Algoritmo do Produto Escalar
Paralelização de Algoritmo do Produto Escalar
 
JVM and Tools - ESIG Academy
JVM and Tools - ESIG AcademyJVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
 
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3
 
Cap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfCap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdf
 
Inpe
InpeInpe
Inpe
 

Último

Treinamento de Avaliação de Desempenho HBB
Treinamento de Avaliação de Desempenho HBBTreinamento de Avaliação de Desempenho HBB
Treinamento de Avaliação de Desempenho HBBDiegoFelicioTexeira
 
Como fazer um Feedback Eficaz - Comitê de Gestores
Como fazer um Feedback Eficaz - Comitê de GestoresComo fazer um Feedback Eficaz - Comitê de Gestores
Como fazer um Feedback Eficaz - Comitê de GestoresEu Prefiro o Paraíso.
 
Peixeiras da Coruña. O Muro da Coruña. IES Monelos
Peixeiras da Coruña. O Muro da Coruña. IES MonelosPeixeiras da Coruña. O Muro da Coruña. IES Monelos
Peixeiras da Coruña. O Muro da Coruña. IES MonelosAgrela Elvixeo
 
arte retrato de um povo - Expressão Cultural e Identidade Nacional
arte retrato de um povo - Expressão Cultural e Identidade Nacionalarte retrato de um povo - Expressão Cultural e Identidade Nacional
arte retrato de um povo - Expressão Cultural e Identidade Nacionalidicacia
 
FORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de históriaFORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de históriaBenigno Andrade Vieira
 
Cruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegyptiCruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegyptiMary Alvarenga
 
autismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entenderautismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entenderLucliaResende1
 
Poema sobre o mosquito Aedes aegipyti -
Poema sobre o mosquito Aedes aegipyti  -Poema sobre o mosquito Aedes aegipyti  -
Poema sobre o mosquito Aedes aegipyti -Mary Alvarenga
 
Aula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptxAula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptxMarceloDosSantosSoar3
 
Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024gilmaraoliveira0612
 
A CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARX
A CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARXA CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARX
A CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARXHisrelBlog
 
Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...
Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...
Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...Colaborar Educacional
 
Poder do convencimento,........... .
Poder do convencimento,...........         .Poder do convencimento,...........         .
Poder do convencimento,........... .WAGNERJESUSDACUNHA
 
PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...
PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...
PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...Colaborar Educacional
 
Ressonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptxRessonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptxPatriciaFarias81
 
Caça palavras - BULLYING
Caça palavras  -  BULLYING  Caça palavras  -  BULLYING
Caça palavras - BULLYING Mary Alvarenga
 
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdfARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdfItaloAtsoc
 

Último (20)

Treinamento de Avaliação de Desempenho HBB
Treinamento de Avaliação de Desempenho HBBTreinamento de Avaliação de Desempenho HBB
Treinamento de Avaliação de Desempenho HBB
 
Boletim informativo Contacto - março 2024
Boletim informativo Contacto - março 2024Boletim informativo Contacto - março 2024
Boletim informativo Contacto - março 2024
 
Como fazer um Feedback Eficaz - Comitê de Gestores
Como fazer um Feedback Eficaz - Comitê de GestoresComo fazer um Feedback Eficaz - Comitê de Gestores
Como fazer um Feedback Eficaz - Comitê de Gestores
 
Peixeiras da Coruña. O Muro da Coruña. IES Monelos
Peixeiras da Coruña. O Muro da Coruña. IES MonelosPeixeiras da Coruña. O Muro da Coruña. IES Monelos
Peixeiras da Coruña. O Muro da Coruña. IES Monelos
 
arte retrato de um povo - Expressão Cultural e Identidade Nacional
arte retrato de um povo - Expressão Cultural e Identidade Nacionalarte retrato de um povo - Expressão Cultural e Identidade Nacional
arte retrato de um povo - Expressão Cultural e Identidade Nacional
 
FORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de históriaFORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de história
 
Cruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegyptiCruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegypti
 
autismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entenderautismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entender
 
Abordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdf
Abordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdfAbordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdf
Abordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdf
 
Poema sobre o mosquito Aedes aegipyti -
Poema sobre o mosquito Aedes aegipyti  -Poema sobre o mosquito Aedes aegipyti  -
Poema sobre o mosquito Aedes aegipyti -
 
Aula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptxAula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptx
 
Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024
 
A CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARX
A CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARXA CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARX
A CONCEPÇÃO FILO/SOCIOLÓGICA DE KARL MARX
 
Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...
Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...
Apresente de forma sucinta as atividades realizadas ao longo do semestre, con...
 
Poder do convencimento,........... .
Poder do convencimento,...........         .Poder do convencimento,...........         .
Poder do convencimento,........... .
 
Abordagem 1. Análise textual (Severino, 2013).pdf
Abordagem 1. Análise textual (Severino, 2013).pdfAbordagem 1. Análise textual (Severino, 2013).pdf
Abordagem 1. Análise textual (Severino, 2013).pdf
 
PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...
PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...
PROJETO DE EXTENSÃO - SEGURANÇA, INOVAÇÃO E SUSTENTABILIDADE PARA O BEM COMUM...
 
Ressonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptxRessonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptx
 
Caça palavras - BULLYING
Caça palavras  -  BULLYING  Caça palavras  -  BULLYING
Caça palavras - BULLYING
 
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdfARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
 

Técnicas avançadas de utilização de GPU e CUDA

  • 1. Técnicas  avançadas  de  u.lização   de  GPU  e  CUDA   Jose  Ricardo  da  Silva  Junior  
  • 2. Quem  sou   •  Bacharel  em  Análise  de  Sistemas.   •  Mestre  em  Ciência  da  Computação  na  UFF  (Computação  Gráfica).   •  Doutorando  em  Ciência  da  Computação  na  UFF  (Computação   Gráfica).   •  Doutorado  Sanduíche  University  of  Nebraska   •  Professor  na  Faculdade  CCAA.   •  Colaborador  na  empresa  Nullpointer.   •  Pesquisador  na  área  de  Computação  Gráfica  e  GPGPU.  
  • 3. Universidade  Federal  Fluminense   Departamento de Computação com 62 professores doutores Laboratórios de ponta em diversas áreas de pesquisa 3  
  • 4. Nvidia  Center  of  Excelence   4  
  • 5. Projetos  em  GPU   •  Consórcio  Nacional  de  GRID  em  GPUs   •  Middleware  de  distribuição  de  carga  entre  nós  de   GPUs   •  Middleware  para  o.mização  de  divergências   •  COLATUS:  expansão  de  par[culas  cosmológicas   •  DOMINOES   •  Gerencia  de  versões  em  vídeo  e  imagens   •  Simulação  de  transito  usando  autômatos  finitos   •  Ray-­‐tracing  Hibrido  CUDA/OPENGL/Op.X   5  
  • 6. Obje=vo   •  Apresentação  de  tópicos  avançados  em  CUDA   através  da  u.lização  de  um  estudo  de  caso.   –  Simulação  de  fluidos  incompressíveis   •  Equação  governante  de  fluidos  de  Navier-­‐ Stokes   ⎛ ∂v ⎞ ρ ⎜ + v.∇v ⎟ = −∇p + ρg + µ∇ 2v ⎝ ∂t ⎠ ∂ρ + ∇.( ρv) = 0 ∂t 6  
  • 7. Simulação  de  fluidos   •  Métodos  Eulerianos   –  Domínio  da  simulação  discre.zado  em  grade  fixa   –  Computação  efetuada  em  posições  fixa  da  célula   –  O  material  simulado  desloca-­‐se  sobre  a  grade   •  Métodos  Lagrangeanos   –  Material  se  move  com  o  fluido   –  Variáveis  de  campo  calculadas  no  próprio  material   –  Discre.zadas  em  par[culas  ou  malhas   7  
  • 9. Smoothed  Par=cle  Hydrodynamics   •  Método  Lagrangeano  baseado  em  par[culas   •  Sem  informação  de  conec.vidade   •  Desenvolvido  por  Lucy  e  Gingold/Monaghan  para   simulação  de  fenômenos  astroisicos   •  U.liza  método  de  interpolação  para  integração   de  variáveis  de  campo   9  
  • 10. Smoothed  Par=cle  Hydrodynamics   •  Fórmula  geral   Aj As (r) = ∑ m j W (r − rj , h) j ρj ∇As (r ) = ∑ j m j 2 Aj ρj ∇ As (r ) = ∑ j m j ∇W ( r − r j , h ) Aj ρj ∇ 2W (r − rj , h) 10  
  • 12. Estrutura  de  dados   •  U.lização  de  uma  grade  regular  baseada  em   tabela  hash  para  classificação  das  par[culas   –  Grade  com  tamanho  de  célula  com  o  dobro  do   raio  da  par[cula   –  Processamento  de  27  células  em  3D     1 12  
  • 13. Versão  1   •  Processamento  de  cada  par[cula  do  fluido  em   memória  global.   Classificar   Par[culas   Calcular  Densidade   Calcular  Forças   Internas   Calcular  Forças   Externas   Integrar   ...   while  (!quit){      k_classifyPar.cles<<<>>>();  //  hash  genera.on      cudaThreadSynchronize();      k_calculateDensity<<<>>>();      cudaThreadSynchronize();      k_calculateInternalForces<<<>>>();    cudaThreadSynchronize();      k_calculateExternalForces<<<>>>();    cudaThreadSynchronize();      k_integrate<<<>>>();   }   ...     13  
  • 14. Versão  1   •  O  acesso  à  memória  global  é  extremamente  lento.   –  Para  cada  par[cula  na  mesma  célula  da  grid,  os  mesmos   dados  dos  vizinhos  são  lidos  várias  vezes  da  memória   global.   •  G80  suporta  86.4Gb/s  de  acesso  à  memoria  global.   –  Ponto  flutuante  de  precisão  simples  =  4  bytes.   –  Neste  caso  não  podemos  carregar  mais  que  86.4  /  4  =  21.6   giga  data  de  ponto  flutuante  simples  por  segundo.   –  Vale  lembrar  que  teoricamente  a  performance  de  uma   G80  é  367  Gflops!   14  
  • 16. Versão  2   Área  de  processamento  da  par[cula  2   1 2 Área  de  processamento  da  par[cula  1   Área  comum  entre  par[culas  1  e  2   (memória  compar.lhada)   Supondo  que  cada  célula  armazene  2  parMculas,  qual  a  taxa  de  acesso  à  memória   global  sem  o  compar=lhamento  da  área  comum?   16  
  • 17. Versão  2   •  U=lização  de  memória  compar=lhada  para  redução  do  acesso  à  memória  global.     U=lizando  memória  global:   Par$cula  1:  9  células:  18  acessos  à  MG.     Par$cula  2:  9  células:  18  acessos  à  MG.   36  acessos       U=lizando  memória  compar=lhada:   Par.cula  1:  5  células:    10  acessos  à  MG.     Par.cula  :  5  células:  10  acessos  à  MG.   28  acessos     Área  comum:  4  células:  8  acessos  à  MG.       17  
  • 18. Versão  2   •  U.lização  de  memória  compar.lhada:   –  Para  cada  conjunto  de  células,  carregar  dados  de  par[culas  de  células  compar.lhadas   na  memória  compar.lhada,  reu.lizando  os  mesmos  para  várias  par[culas.     void  k_processDensity(){      ...      for  each  cell  in  grid  {          loadPar.cles();          synchronize();          d_processDensity(par.cle);      }      ...   }   •  Obje.vo:  reu.lizar  ao  máximo  dados  na  memória  compar.lhada  (mesmo   que  isso  implique  em  mais  re-­‐processamento!)   18  
  • 19. Versão  2   •  Algumas  etapas  durante  o  processo  de   simulação  de  fluidos  podem  ser  executadas   em  paralelo  na  GPU.   •  A  arquitetura  FERMI  introduziu  a  possibilidade   de  execução  de  kernels  simultâneos.   –  Verificar  problemas  de  dependência  entre  dados   para  kernels  diferentes.   19  
  • 20. Versão  3   Classificar   Par[culas   Classificar   Par[culas   Calcular  Densidade   Calcular   Densidade   syncronize()   Calcular  Forças   Internas   Calcular  Forças   Internas   Calcular  Forças   Externas   Calcular  Forças   Externas   Integrar   syncronize()   Integrar   •  Não  existe  dependendência  de  dados  entre  cálculo  de  forças  internas  e   externas.   •  Deve-­‐se  u.lizar  espaços  de  memórias  diferentes  para  o  armazenamento  dos   resultados.   20  
  • 21. Versão  3   •  A  sincronização  de  kernel  simultâneo  deve  ser   realizada  a  nível  de  CPU.   ...   while  (!quit){      k_classifyPar.cles<<<>>>();  //  hash  genera.on      cudaThreadSynchronize();      k_calculateDensity<<<>>>();      cudaThreadSynchronize();      k_calculateInternalForces<<<>>>();      k_calculateExternalForces<<<>>>();    cudaThreadSynchronize();      k_integrate<<<>>>();   }   ...     21  
  • 22. Paralelismo  Dinâmico   •  Habilidade  de  geração  de  novos  grids  pela   GPU.   –  Dinâmico.   –  Simultâneamente.   –  Independente.   –  Introduzido  na  arquitetetura  Kepler.   CPU   GPU   CPU   GPU   22  
  • 23. Paralelismo  Dinâmico   •  Programa  paralelo  simples:   23  
  • 24. Paralelismo  Dinâmico   •  Programa  paralelo  simples:   24  
  • 25. Paralelismo  Dinâmico   •  Programa  paralelo  simples:   25  
  • 26. Paralelismo  Dinâmico   •  Programa  paralelo  simples:   26  
  • 27. Paralelismo  Dinâmico   •  Possibilidade  de  paralelismo  dinâmico.   27  
  • 28. Paralelismo  Dinâmico   CPU GPU GPU  as  Co-­‐Processor   CPU GPU Autonomous,  Dynamic  Parallelism   28  
  • 29. Paralelismo  Dinâmico   Coarse grid Fine grid Dynamic grid Higher Performance Lower Accuracy Lower Performance Higher Accuracy Target performance where accuracy is required 29  
  • 30. Paralelismo  Dinâmico  (Programação)   int main() { float *data; setup(data); A <<< ... >>> (data); B <<< ... >>> (data); C <<< ... >>> (data); CPU main cudaDeviceSynchronize(); return 0; GPU } A X X <<< ... >>> (data); Y <<< ... >>> (data); Z <<< ... >>> (data); cudaDeviceSynchronize(); B Y do_more_stuff(data); C Z __global__ void B(float *data) { do_stuff(data); } 30  
  • 31. Paralelismo  Dinâmico  (Decomposição   LU)   LU decomposition (Fermi) memcpy dlaswap<<<>>> dtrsm<<<>>> dgemm<<<>>> next j } dgetrf(N, N) { dgetrf<<<>>> idamax(); dswap(); CPU  is  Free   dgetrf(N, N) { for j=1 to N for i=1 to 64 idamax<<<>>> memcpy dswap<<<>>> memcpy dscal<<<>>> dger<<<>>> next i LU decomposition (Kepler) dscal(); dger(); dlaswap(); dgetrf(N, N) { for j=1 to N for i=1 to 64 idamax<<<>>> dswap<<<>>> dscal<<<>>> dger<<<>>> next i dlaswap<<<>>> dtrsm<<<>>> dgemm<<<>>> next j } synchronize(); } dtrsm(); dgemm(); CPU Code GPU Code CPU Code GPU Code 31  
  • 32. GPU  Direct   •  Nome  fornecido  à  um  conjunto  de  o.mizações  de   transferência  de  dados  entre  GPU’s.   System Memory CPU GDDR5 Memory GDDR5 Memory GDDR5 Memory GPU1 GPU2 GPU2 GPU1 PCI-e System Memory CPU PCI-e Network Card Server 1 GDDR5 Memory Network Network Card Server 2 32  
  • 33. GPU  Direct  v1   •  Introduziu  a  capacidade  de  u.lização  da  mesma  memória   page-­‐locked  no  host  pelos  drivers  da  GPU  e  Infiniband.   •  Removeu  a  necessidade  de  cópia  dos  dados  da  GPU  para  CPU.   33  
  • 34. GPU  Direct  v2   •  Introduziu  a  capacidade  de  acesso  e  transferência  de  dados   entre  memórias  de  GPU  no  mesmo  nó  sem  a  necessidade  de   cópias  para  a  CPU.   34  
  • 35. GPU  Direct  v3   •  Introduziu  a  capacidade  de  transferência  de  dados  entre  duas  GPU’s  em  nós   diferentes  u.lizando  rede  Infiniband,  sem  necessidade  de  u.lização  de   memória  do  host  (RDMA).   35  
  • 36. Orientação  à  Objetos   •  Suporte  a  orientação  à  objetos   •  Herança   •  Polimorfismo   class  Veiculo{   public:      __host__  __device__      Veiculo(){}      __host__  __device__      Veiculo(int  id){          ID          =  id  +  11;        }        int  ID;   };   class  Carro  :  public  Veiculo{   public:        __host__  __device__      Carro(){};        __host__  __device__      Carro(int  id){            vMax  =  28;          }                float  vMax;   };   36  
  • 37. Orientação  à  Objetos   __global__     void  meuKernel(  Veiculo  *vet  ){          int  indice  =  blockDim.x  *  blockIdx.x  +  threadIdx.x;                if  (threadIdx.x  ==  0)              vet[indice]  =  Carro(indice);        else              vet[indice]  =  Onibus(indice);   }   37  
  • 38. Outras  Funcionalidades   •  Operações  Atômicas   •  Stream   •  Alocação  dinâmica  de  memória   •  Pilha  e  Recursão   •  Dire.vas  OpenACC   38  
  • 39. Técnicas  avançadas  de  u.lização   de  GPU  e  CUDA   Jose  Ricardo  da  Silva  Junior