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 GPU e CUDA para simulação avançada de fluidos

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 GPU e CUDA para simulação avançada de fluidos (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

Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaaulasgege
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxBiancaNogueira42
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresaulasgege
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOInvestimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOMarcosViniciusLemesL
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfEditoraEnovus
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPanandatss1
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfIedaGoethe
 
A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxfabiolalopesmartins1
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfHenrique Pontes
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 

Último (20)

Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autores
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANOInvestimentos. EDUCAÇÃO FINANCEIRA 8º ANO
Investimentos. EDUCAÇÃO FINANCEIRA 8º ANO
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdf
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SP
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
 
A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptx
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 

GPU e CUDA para simulação avançada de fluidos

  • 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