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

Post on 03-Jan-2019

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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/

top related