balanceamento de carga - puc-rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho...

31
Balanceamento de Carga aplicações paralelas (… spmd)

Upload: phungnhan

Post on 03-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Balanceamento de Carga

aplicações paralelas (… spmd)

Page 2: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Distribuição de Carga

• continua valendo: carga = ?• processos a serem executados• processos em execução (migração)• dados descrevendo tarefas

• mas é muito comum ocorrer um balanceamentointerno aos processos (devido ao custo de criação)• spmd: dados descrevendo tarefas

Page 3: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Classificação - critérios

• estática x dinâmica

• se dinâmica: sob demanda ou por transferência

Page 4: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

mecanismos

• índices de carga interna• trabalho interno à aplicação• em geral qtde de tarefas por realizar

• índices de carga externa• tempo de execução da última tarefa

» relação com sob demanda» exige conhecimento sobre trabalho exigido pela tarefa

Page 5: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

critérios - continuação

• utilização de índices: integradas X isoladas

• escopo: globais X locais• locais: particionados e por vizinhança

• exec do algoritmo: centralizada X distribuída• distribuídos: síncronos X assíncronos

• ativação: periódica X por evento• eventos: sobrecarga, subcarga

• alvo do algoritmo: individual X coletivo

• direção de transfs: receptoras X transmissoras

Page 6: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

sistemas com suporte a BC

• frameworks X bibliotecas

• samba

• charm++

• easygrid

Page 7: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

SAMBA

Page 8: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

SAMBA

• biblioteca com 9 algoritmos de balanceamento decarga• estático• sob demanda• distribuído, síncrono global, coletivo, por evento, isolado• centralizado, global, por evento, coletivo, isolado• distribuído, assíncrono, global, não-cego• ...

• algum suporte ao desenvolvimento de outrosalgoritmos de BC

Page 9: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

SAMBA

Page 10: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

charm++

• linguagem baseada em C++

• chares provêm abstração para tarefas• processos instanciados a partir de

• comunicação entre chares por chamadas remotasassíncronas

• suporte a balanceamento de carga

Page 11: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

categorias de objetos de charm++

• objetos sequenciais

• chares (objetos concorrentes)

• grupos de chares (objetos replicados)

• arrays de chares (coleções indexadas)

• mensagens (objetos de comunicação)• chamadas assíncronas (chamadas de envios de mensagens)

Page 12: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

exemplo - interface charm++

pontos para invocação remota(assíncrona)

Page 13: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

.h gerado pelo tradutor

Page 14: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

.C escrito pelo programador

Page 15: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

.C (cont)

Page 16: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

escalonamento configurável

• a ordem de processamento das mensagens pode seralterada• cada mensagem pode estar associada a uma política• CkSetQueueing(MsgType message, int queueingtype) ondequeueingtype é uma das constantes abaixo:

» CK_QUEUEING_FIFO» CK_QUEUEING_LIFO» CK_QUEUEING_IFIFO» CK_QUEUEING_ILIFO» CK_QUEUEING_BFIFO» CK_QUEUEING_BLIFO

Page 17: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Marshalling e unmarshalling

class point3d { public: double x,y,z; … void pup(PUP::er &p) { p|x; p|y; p|z; } };

• programador deve definir método pup (pack&unpack)para tipos definidos por ele

Page 18: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Chares

• objetos concorrentes (processos)• idéia é encapsular unidades de trabalho de grão médio

• alocados automaticamente em algum processador• só alguns chares especiais migram depois de alocados• opcionalmente, programador pode especificar alocação

• cada entry é executado sem interrupção até o final• modelo básico: apenas uma mensagem processada por vez• chamadas remotas são tipicamente assíncronas• entries retornam• chamadas síncronas precisam ser realizadas a partir de

thread secundário

Page 19: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

criação de chares

• uso de construtores como em C++

• retorno de um proxy para o chare

Cproxy_C chareProxy = Cproxy_C:: ckNew(parameters [, proc]);…chareProxy.EntryMethod(parameters)

Page 20: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Arrays

• coleções de chares de tamanho arbitrário• cada processador pode receber qq quantidade de elementos

• elementos de arrays podem ser criados, migrados, e destruídosdinamicamente

• podem realizar reduções

//no arquivo .ciarray [1D] A { entry A (parameters1); entryB (parameters2);}

Cproxy_A a1 = Cproxy_A:: ckNew(parameters , numelements);…a1[1].A(); // chamada só em um elementoa1.A(); // broadcast para todos os elementos

Page 21: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

arrays: criação dinâmica de elems

• por default mensagem para elemento inexistente éerro• programador tem que tomar cuidado com ordem de criações e

destruições

• atributo [createhere] ou [createhome] em métododetermina criação por demanda

Page 22: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

arrays: migração

• para que elementos possam migrar, programador deveimplementar método pup• independentemente de elementos de array serem passados

como argumentos//In the .h file: class A2 : public CBase A2 { private: //My data members: int nt; unsigned char chr; float flt[7]; int numDbl; double *dbl; public: //...other declarations virtual void pup(PUP::er &p); }; //In the .C file: void A2::pup(PUP::er &p) { CBase A2::pup(p); //<- MUST call superclassユs pup routine p|nt; p|chr; p(flt,7); p|numDbl; if (p.isUnpacking()) dbl=new double[numDbl]; p(dbl,numDbl); }

Page 23: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Grupos

• previamente chamados de branched chares

• um elemento criado por processador disponível

//no arquivo .cigroup G { entry G(parameters1 ); entry void EM(parameters2 ); };

CProxy_G groupProxy = CProxy_G::ckNew(parameters1);gP[Processor].EM (parameters); // msg para 1 elemento gP.EM (parameters ); // bradcast para todos

Page 24: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Grupos de nós

• diferença para demais grupos apenas em máquinasmultiprocessadoras

• disparo de um chare por máquina

• execução em apenas um dos processadores

• idéia de coordenação de atividades no nó

Page 25: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Balanceamento de Carga

• Charm++ insere monitoramento e implementa diversasestratégias alternativas• RefineLB: Move ob jects away from the most overloaded processors

to reach average, limits the number of objects migrated; ・• RefineCommLB: Same idea as in RefineLB, but take communication

into account; ・• RandCentLB: Randomly assigns objects to processors;• RecBisectBfLB: Recursively partition with Breadth first enumeration;• MetisLB: Use Metis(tm) to partition object communication graph;• GreedyLB: Use greedy algorithm, always pick the heaviest ob ject to

the least loaded processor.• GreedyCommLB: Greedy algorithm which also takes communication

graph into account;• ComboCentLB: A special load balancer that can be used to combine

any number of above centralized load balancers;

Page 26: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Previsão de Carga

• programador pode redefinir função de previsão de carga futura

class LBPredictorFunction { public: int num_params; virtual void initialize_params(double *x); virtual double predict(double x, double *params) =0; virtual void print(double *params) {PredictorPrintf("LB: unknown model¥n");}; virtual void function(double x, double *param, double &y, double *dyda) =0; };

Page 27: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

Balanceamento e Arrays

• integração: migração de elementos

• diferentes APIs determinam possíveis momentos demigração• periódico• automático - migração liberada com chamadas a Sync• manual - migração disparada por chamadas a StartLB

Page 28: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

outras camadas

• frameworks para classes de aplicações específicas• FEM - finite element method• busca combinatória• …

• bibliotecas e linguagens• AMPI - adaptive MPI• Jade• Parallel Java

Page 29: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

SGA - easygrid

• motivação: computação em grades

• suporte específico a aplicações escritas em MPI

• uso de wrappers para funções MPI

Visão Centrada na Aplicação

Page 30: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

arquitetura SGA

Page 31: Balanceamento de Carga - PUC-Rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho interno à aplicação •em geral qtde de tarefas por realizar •índices de carga

referências

• Developing SPMD Applications with Load Balancing.A. Plastino, C. C. Ribeiro e N. Rodriguez. ParallelComputing, v.29, 2003.

• http://charm.cs.uiuc.edu/• manual charm++

• http://easygrid.ic.uff.br/