2. ● Apresentação
● Por que pensar em Clusters para Aplicações
Gráficas?
● Introdução ao mundo dos Aglomerados
(clusters)
● Aglomerados Gráficos
● Arquitetura de Sincronização (Cliente/Servidor)
● LibGlass (apresentação, plugins, helloworld)
2
3. Quem sou eu?
● Bolsista do CNPq
● Graduando no Instituto Federal (IFSP)
● Coordenador Geral do FliSol - Salto
● Mercado Livre na área de Prevenção a Fraude
● Colaborador de projetos como (Moodle, Debian, libGlass outros)
● Participante – Google Higly Open Contest 2009 à 2011 (Code-In)
● Colaborador com o concurso Google Summer Of Code 2009
Gsoc-br.org (FAQ em português do GSoC)
● Colaborador do projeto Debian GNU/Linux
● Colaborador do projeto - DebianZine.org
● Fiz parte do projeto Hackerteen da 4Linux
● Projeto Educação com Software Livre do MEC (ProINFO Linux 3
Educacional)
10. ● Desde os primórdios da computação gráfica
● O fator desempenho sempre mereceu grande
atenção dos desenvolvedores
● Lado-a-lado com requisitos como realismo
gráfico e ergonomia.
● Geralmente medido em número de quadros
por segundo, o desempenho tem influência
direta na qualidade de uma aplicação.
● Um baixo desempenho pode prejudicar a
usabilidade ou, em casos mais graves, até
mesmo inviabilizar a implementação de uma
boa idéia. 10
11. ● Para atingir o desempenho e qualidade gráfica
desejada, os sistemas de multiprojeção das
aplicações de RV, como os CAVEs e
PowerWall
● São tradicionalmente como núcleo gráfico
sistemas multiprocessados, também
conhecidos por sistemas fortemente
acoplados. De alto custo, o que os limitam a
grandes centros de pesquisas.
● Em contrapartida, o desempenho de
processamento e desempenho gráfico dos
computadores pessoais estão aumentando.
11
● Assim, a substituição dos sistemas
13. Os aglomerados (clusters) de computadores
são um conjunto de computadores, capazes
de compartilhar seus recursos, para um
objetivo comum .
Específicos no caso de AG que possuem
placa de vídeos ou aglomerados de
computadores convencionais (commodity
computer clusters) .
13
16. Os aglomerados utilizados pelas aplicações de RV
possuem hardware projetado específicos, como placas
gráficas.
Cada nó processa apenas os dados referentes à sua
parte de interesse, e então gera a imagem apenas
daquela parte e oferecem para nós de controles
Vantagens de uso de um AG
● Desempenho proporcional ao número de estações
utilizadas
● Podendo executar cálculos de grande complexidade
numérica, transacional e gráfica.
16
19. Data-lock ou sincronismo de dados é responsável
pela coerência dos elementos dinâmicos da cena.
Responsável informações em cada nó do
aglomerado sejam idênticas em cada instante.
Estas informações;
● Posição da câmera virtual,
● A direção que esta tem
● Movimentos da cena
● Qualquer outro atributo dinâmico da cena
19
24. O técnica sort-first realiza a
distribuição dos dados antes
do processamento
geométrico na fila de
processamento gráfica.
Cada nó do sistema é
responsável por processar
uma parte da imagem final
Para serem visualizadas uma
ao lado da outra (tiling).
24
26. A técnica sort-last realiza
a distribuição de pixels
depois da rasterização
(sintetização).
Este método permite uma
subdivisão das tarefas
muito refinada, o que
assegura um melhor
balanceamento de carga
entre os nós.
26
29. Os estímulos do nó Mestre são transmitidos para os nós Escravos do
aglomerado gráfico (arquitetura com replicação).
Quando o usuário gera um estímulo, eg, movimenta o mouse ou
pressiona uma tecla, este estímulo é enviado para todos os nós
Escravos.
Ao recebê-lo, os nós executam as rotinas de tratamento para atualização
dos dados e geração das imagens;
Primitivas de Controle
29
30. Os estímulos são tratados localmente pelo nó Mestre, sendo os
resultados enviados para os nós Escravos, que geram e apresentam as
imagens (arquitetura sem Replicação).
Esta abordagem é geralmente utilizada quando o problema envolve
muitos cálculos que resultam em poucos dados, como em
simuladores de vôos. Assim, o meio de comunicação do aglomerado
gráfico é utilizado apenas para transmitir os resultados dos cálculos
Primitivas Gráficas
30
35. ● Node management
● It manages all the applications Clients
(connection and disconnection) and
communication messages (sending and
receiving)
● Retrieves disconnections
● Future support for peer-to-peer
● All transmitted messages are filtered by the
server in order to reduce redundant updates
35
36. #include "libglass.h"
...
int main(int argc, char **argv) {
// Declarou uma variavel g do tipo Glass (Objetivo de instanciar um nó)
Glass *g;
// Se não receber nenhum parametro instância do tipo Server
if (argc == 1) {
g = new GlassServer(...);
// Senão será uma instância do tipo Cliente
}else {
g = new GlassClient(...);
}
...
//Instância finalizada
delete g;
return 0;
}
show eg. aroundsimple and helloworld
36
38. ● Barrier: when you need to
synchronize everybody (eg.
datalock, swaplock)
● Shared: share your variables
● Alias: same variable, different
values, set remotely (eg. CAVE,
Multiprojection)
38
40. Uso das barreiras de sincronização
eg. Data-Lock, Swap-Lock/Frame-lock
#include "libglass.h"
int main () {
...
// declaração da barreira
Barrier b = Barrier(1);
// sincronização da barreira b
b->sync();
...
return 0;
}
show eg. aroundsimple and helloworld
40
41. Resultados
● Utilizando-se um protocolo unicast TCP, cujo
desempenho é inferior ao de um protocolo
broadcast, como o UDP, ou multicast, como o
XTP resultados suficiente para as aplicações
que requerem sincronizações constantes
● Com 5 nós, foi possível fazer 2400
sincronizações por segundo − o requerido
pelas aplicações varia de 30 a 120
sincronizações por segundo.
41
43. Support types (floats, inteiros, string and others)
#include "libglass.h"
...
int main() {
...
// declaração da variável
Shared<float>*teste=new Shared<float>("teste");
...
// atribuição do valor 1234 para a variável teste
*teste = 1234;
...
// envio da atualização da variável
// compartilhada
teste->sendUpdate();
...
// atualização da variável
teste->getUpdate();
...
// Imprime a variável
printf("%dn",teste->getData());
...
return 0;
}
43
show eg. aroundsimple and helloworld
44. ● Compartilhamento, o crescimento obtido foi
linear, devido às propriedades do protocolo
TCP/IP.
● Próximos gráficos mostrará o tempo de
sincronização de uma variável compartilhada
(Shared) em cada nó 1000 vezes, variando o
número de nós de 1 até 5, e o tamanho das
mensagens de 1 kb até 4096 kb.
44
48. #include "libglass.h"
void frente(int a) // frente
{}
void esquerda(int a)
{glRotated(90, 0, -1, 0);}
void direita(int a) {
{glRotated(90, 0, 1, 0);}
...
int main(int argc, char **argv) {
// declaração e cria uma intância no novo alias
Alias<void (*)(int)> *assoc
assoc = new Alias<void (*)(int)>("frente", frente);
// adição do método no alias
assoc->addAlias((const char *)"frente", frente);
assoc->addAlias((const char *)" esquerda ", esquerda);
assoc->addAlias((const char *)" direita ", direita);
// associação do nó ao método
assoc->associate(firstId+1, " frente ");
assoc->associate(firstId+2, "esquerda");
assoc->associate(firstId+3, "direita");
...
return 0;
}
show eg. aroundsimple and helloworld 48