balanceamento de carga - puc-rionoemi/cd-06/cd10.pdf · •índices de carga interna •trabalho...
TRANSCRIPT
Balanceamento de Carga
aplicações paralelas (… spmd)
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
Classificação - critérios
• estática x dinâmica
• se dinâmica: sob demanda ou por transferência
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
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
sistemas com suporte a BC
• frameworks X bibliotecas
• samba
• charm++
• easygrid
SAMBA
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
SAMBA
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
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)
exemplo - interface charm++
pontos para invocação remota(assíncrona)
.h gerado pelo tradutor
.C escrito pelo programador
.C (cont)
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
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
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
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)
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
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
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); }
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
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ó
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;
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; };
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
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
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
arquitetura SGA
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/