Algoritmos de Escalonamento

Propaganda
Algoritmos de Escalonamento
Grupo 9
Luiz Otávio Duarte
Marcelo Carvalho Sacchetin
Orientação: Prof. Dr. Norian Marranghello
Sumário
1. Algoritmo Genético
1.1. Escalonamento de tarefas de Multiprocessadores usand Algoritmo Genético
1.1.1. Resumo
1.1.2. Introdução
1.1.3 Escalonamento de multiprocessador
1.2. Escalonamneto para sisstemas de processadores paralelos
1.2.1. Resumo
1.2.2.Introdução
1.3. Algoritmos Genéticos
1.3.1. Resumo
1.3.2. Introdução
1.3.3. O Algoritmo:
1.3.4. Cruzamento (ou crossover)
1.3.5. Mutação
1.3.6. Como algoritmos genéticos s diferenciam de outras técnicas de procura
2. Algoritmo de Busca Tabu
2.1. Uma breve introdução
2.2. O uso da memória.
2.2.1. Dimensão de Qualidade
2.2.2. Dimensão de Influência
2.2.3. Dimensão de Novidade
2.2.4. Dimensão de Freqüência
2.2.5. Memória Explicita
2.2.6. Memória Atributiva
2.3. Intensificação e diversificação
2.3.1. Estratégia de intensificação
2.3.2. Estratégia de diversificação
2.4 Utilização de busca Tabu em escalonamento
2.4.1. Escalonamento para minimizar o tempo de comunicação em um
sistema de multiprocessadores.
2.4.2. Escalonando tarefas de Multiprocessadores com Programas
paralelos
2.4.3. Escalonando tarefas em Multiprocessadores usando busca tabu
paralela.
3. Outros Algoritmos: Algoritmo de Programação Linear
4. Bibliografia
2
1.1
ESCALONAMENTO DE TAREFAS DE MULTIPROCESSADORES
USANDO ALGORITMO GENÉTICO
1.1.1 Resumo: No problema de escalonamento para multiprocessadores, um dado
programa deve ser escalonado em um dado sistema multiprocessador no qual o tempo de
execução deve ser minimizado. Tem sido difícil encontrar uma solução exata para esse tipo
de problema, existem muitos métodos heurísticos para encontrar um escalonamento quase
ótimo. É proposto uma combinação, onde algoritmos genéticos são melhorados com a
introdução de alguns conhecimentos sobre problemas de escalonamento representados pelo
uso de uma lista de heurística nos operadores genéticos de crossover e mutação. Resultados
de experimentos mostram que o uso dessa metodologia produz resultados bem melhores em
termos de qualidade das soluções, apesar de ser lento em termos de tempo de execução.
1.1.2 Introdução: Em um sistema de multiprocessadores, cada processador tem sua
própria memória e cada par de processadores comunicam-se exclusivamente por mensagens
que trafegam através de uma rede de interconecção. Dado programa paralelo composto por
tarefas de comunicações a serem executadas sob várias restrições de precedência. Para cada
tarefa é associado um tempo de execução. Na ordem para ser executada, cada tarefa de um
dado programa paralelo deve ser escalonada para algum processador de um dado sistema de
multiprocessadores. Consequentemente, tarefas que se comunicam no programa paralelo
devem ser escalonadas para diferentes processadores, que fazem esses processos se
comunicarem durante a execução do programa paralelo. Essas comunicações diminuem a
velocidade da execução do programa paralelo. Considerando essas comunicações e
restrições de precedência entre tarefas, nos leva ao fato de que diferentes escalonamentos
de cada tarefas satisfazendo as restrições de prioridade geram diferentes tempos de
execução do programa paralelo.
O problema de escalonamento de multiprocessadores consiste em encontrar o
escalonamento de tarefas que minimize o tempo de execução dos programas paralelos e o
números de processadores requeridos. No nosso caso, trataremos de uma versão mais
simples do problemas, onde o número de processadores é fixo. Desde que uma busca
exaustiva é impraticável, tem sido feito muito trabalho em métodos heurísticos rápidos para
se encontrar soluções próximas da ótima. A maioria dos estudos de métodos heurísticos
para escalonamento de multiprocessadores são chamados de lista de heurísticos.
Um outro método heurístico usado no contexto do problema de escalonamento é o metaheurístico conhecido como algoritmo genético. Um algoritmo genético é um método de
procura aleatória guiada onde os elementos (chamados indivíduos) em um dado conjunto de
soluções (chamado população) são aleatoriamente combinadas (crossover) e modificadas
(mutação) até que se atinja uma condição de parada. A população envolve iterações
(gerações) no intuito de prover aptidão dos seus indivíduos. A aptidão de um indivíduo S1
é dita melhor que a de um indivíduo S2 se a solução correspondente à S1 está mais próxima
da ótima que S2. Em cada iteração, o crossover gera uma nova população na qual supõem
se que os indivíduos mantêm as boas características dos indivíduos das gerações anteriores.
Um cromossomo representa uma prioridade para cada tarefa. Prioridades são definidas
antes da execução, como o mais longo caminho de um nó até um nó que não envia
mensagens. O algoritmo trabalha na prioridade através de padrões de crossover e mutação.
3
1.1.3 Escalonamento de multiprocessador: Um sistema de multiprocessador
(homogêneo)é composto por por um conjunto P={p1,...,pm} de m processadores idênticos.
Eles são conectados por uma rede de comunicação completa, onde os links são idênticos.
Cada processador pode executar no máximo um tarefa por vez e a preempção não é
permitida. Enquanto está computando, um processador pode se comunicar com um ou
vários de seus links.
O programa paralelo é descrito por um diagrama acíclico D=(T,A). Os vértices representam
o conjunto T={t1,...,tn} de tarefas e cada curva representa a relação de precedência entre
duas tarefas. Uma curva (ti1,ti2) pertencente à A representa o fato de que no final da
execução, ti1 envia uma mensagem cujo conteúdo é requerido por ti2 para começar a
executar. Nesse caso ti1 é dito ser um predecessor imediato de ti2, e ti2 é o sucessor
imediato de ti1. Supondo que ti1 é a única tarefa sem nenhum predecessor imediato, um
caminho é a seqüência de nós <ti1,...,tik>, 1<k<=n tal que ti1 é um predecessor de uma
outra tarefa tik se existe um caminho <ti1,...,tik> em D. Para toda tarefa ti, é associado um
valor representando sua duração, e assumimos que esses valores são conhecidos antes da
execução do programa. Já a duração de todas as comunicações são conhecidas em tempo de
compilação. Assim, para toda curva (ti1,ti2) pertencente à A existe um custo representando
o tempo de transferência da mensagem enviada por ti1 para ti2. Se ambas mensagens
destino e receptor são escalonadas para o mesmo processador, então o custo associado para
essa curva se torna nulo.
Um escalonamento é um vetor s = {s1,...,sn}, onde sj = {ti1,...tin}, sj é o conjunto das nj
tarefas escalonadas para pj. Para cada tarefa ti pertencente a sj , l representa seu grau de
execução em pj sob a alocação s. Para cada tarefa ti, nós denotamos p(ti,s) e r(ti,s),
respectivamente o processador e o grau nesse de ti nesse processador sob a alocação s. O
rendimento do tempo de execução por uma alocação é chamado makespan.
Uma lista heurística constrói uma alocação passo a passo. As tarefas que podem ser
alocadas (chamadas tarefas livres) são aquelas as quais todos predecessores já foram
alocados. Então escolhemos uma dessas tarefas, dita ti, de acordo com uma certa regra R1.
Escolhemos um processador dito pj, para qual ti será alocado de acordo com outra regra
R2. Ao fazermos isso, acabamos de alocar ti para pj. Esse algoritmo acaba quando todas
tarefas são alocadas. Afigura abaixo ilustra uma locação e as datas de introdução
computadas por uma lista heurística.
4
O diagrama acíclico D mostrado nessa figura é composto de 5 tarefas, enquanto o sistema
multiprocessador é composto de 3 processadores totalmente interconectados. Cada di indica
o custo de ti e cada c(i1,i2) representa o tempo de comunicação associado à curva (ti1,ti2).
A figura abaixo mostra uma alocação s das tarefas de D no sistema de multiprocessador
mostrado.
No diagrama são indicados o processador, a data de introdução, e a duração de cada tarefa
de acordo com s, assim como o vetor representação da alocação s.
1.2
ESCALOMAMENTO PARA SISTEMAS DE PROCESSADORES
PARALELOS
5
1.2.1 Resumo: Escalonamento de tarefas é essencial para o peculiar funcionamento de
sistemas de processadores paralelos. Escalonamento de tarefas dentro de uma rede de
processadores paralelos é um problema interessante que é bem definido e documentado na
literatura. Entretanto a maioria das técnicas disponíveis são baseadas em heurísticas que
resolvem certas instâncias do problema de escalonamento eficientemente e em uma quantia
razoável de tempo. Nesse trabalho estudaremos um paradigma alternativo, baseado em
algoritmos genéticos, para resolver eficientemente problemas de escalonamento sem
precisar aplicar restrições de cada problema específico, assim como acontece quando se usa
heurística.
1.2.2 Introdução: A impressionante proliferação no uso de sistemas de processamento
paralelo é resultado de muitos avanços ao longo das últimas duas décadas.
A maior questão na operação de sistemas de computação paralela é o do escalonamento,
que também é um importante problema em diversas outras áreas. Em um sistema de
processamento paralelo, poderíamos esperar uma melhora com o aumento do número de
processadores usados. Entretanto, geralmente esse não é o caso devido aos fatores como
overhead de comunicação, overhead de controle e restrições de precedência entre tarefas.
A eficiência de um sistema de computação paralela é comumente medido pelo tempo de
completamento, aceleração ou tempo de resposta, que refletem a qualidade do escalonador.
Muitos métodos heurísticos tem dado soluções eficientes, entretanto somente para uma
classe limitada de problemas de escalonamento. Nesse contexto encontramos uma
aplicação que se encaixa perfeitamente para o uso de algoritmos genéticos.
1.3
Algoritmos Genéticos
1.3.1 Resumo: Esses algoritmos se baseiam na idéia da seleção natural, onde sobrevivem
os mais adaptados. É um algoritmo eficaz quando buscas exaustivas são inviáveis devido ao
crescimento exponencial de possíveis soluções no espaço de busca.
1.3.2 Introdução: Na natureza, os processos evolutivos ocorrem quando são satisfeitas as
seguintes condições:
• Há uma população de indivíduos que são capazes de se reproduzir;
• Existe alguma diversidade entre os indivíduos que se reproduzem;
• Há uma associação entre as diferenças na habilidade para sobreviver no
ambiente em que vivem e esta variedade.
A diversidade é garantida pela troca de cromossomos dos indivíduos durante a reprodução,
acarretando uma variação na estrutura e comportamento desses indivíduos na população.
A partir daí teremos indivíduos mais e menos aptos. Aquele que tem um maior grau de
sobrevivência, adaptação e de reprodução é o mais apto (seleção natural).
Com o passar do tempo, após várias gerações, teremos uma população alterada devido á
seleção natural.
Os algoritmos genéticos foram inspirados nos processos evolutivos que ocorrem na
natureza. Uma algoritmo genético consiste em uma geração de uma população inicial de
6
indivíduos(processos), representado por identificadores(pid).Uma nova população é gerada
aplicando-se operadores genéticos sobre esses processos, permitindo introduzir novos
pontos num espaço de busca. Os principais operadores são chamados de reprodução e
mutação.
Reprodução: combinações entre processos gerando um novo.
Mutação: alterações que geram indivíduos diferentes.
Também é necessário um operador de seleção, que permite o algoritmo favorecer os
indivíduos mais aptos, quando há mudanças de geração. Assim os bons são replicados
enquanto os maus são descartados.
Dentro desse contexto sobrevivem somente os elementos melhores da população total.
Um algoritmo genético tem início com uma população inicial que evolui através de
gerações. Essa evolução começa com uma população inicial aleatoriamente gerada. No
nosso caso a aptidão de um indivíduo é definida pela diferença entre os makespan entre
eles. O melhor indivíduo será aquele com melhor aptidão, ou seja, menor makespan.
1.3.3 O Algoritmo:
Algoritmo genético(){
Gerar população inicial;
Avaliar população;
Enquanto critério de parada não satisfeito{
Selecionar processos para a próxima população;
Aplicar mutação e crossing over;
Avaliar população;
}
}
Esse algoritmo foi desenvolvido por John Holland, na Universidade de Michigan
em 1975, baseados nos princípios Darwinianos da evolução.
1.
2.
3.
4.
Um algoritmo genético típico apresenta os seguintes componentes:
Uma representação genética das soluções do problema;
Uma forma de criar uma população inicial de soluções;
Uma função de avaliação em termos de convergência e adaptação das soluções;
Operadores genéticos que possam compor uma nova população e diferente das
anteriores.
Definido o mecanismo de codificação, deve-se primeiramente criar uma população
inicial. Geralmente isso é feito de uma forma aleatória.
Em seguida devemos avaliar essa população para se identificar os indivíduos mais
aptos. Isso é feito através de uma função que pode ser chamada de ajuste ou
avaliação(fitness function). Esta é aplicada na string de bits gerando o valor de aptidão de
cada indivíduo(processo).
Depois de se identificar tantos os processos mais aptos, quanto os menos aptos,
entra em cena os operadores genéticos para se obter a próxima população. Tipicamente um
algoritmo genético termina depois de um certo número de gerações ou se um nível de
aptidão foi obtido, ou um ponto no espaço de busca foi atingido.
7
1.3.4 Cruzamento (ou crossover): Operador que estabelece uma combinação do
cromossomo de dois processos gerando outros dois. O procedimento consiste em criar dois
cromossomos filhos, cada um dos quais possuindo características dos dois pais. Essa
combinação dá-se através de uma manipulação da codificação atribuída.
Isso é feito com base na idéia de que se combinarmos características de processos
bons, podemos obter outros ainda melhores, já que os dois novos podem aumentar o
desempenho global do sistema.
Um outro papel importante desse operador dentro do algoritmo, é garantir que as
características presentes nas melhores populações se propaguem ao longo das gerações.
Exemplo de crossover: Primeira mente vamos definir alguns símbolos
Tarefa alright é uma tarefa que já foi calculada;
Tarefa replace é aquela que precisa ser reposta;
Tarefa release é aquela que precisa ser movida;
Tarefa stay é aquela que não deve ser movida.
(RRANDS)
8
Passo 1: O primeiro passo é encontrar os pontos de crossover. Isso é obtido por uma
seleção aleatória de um ponto na primeira sub-string de A (A.1) e então movendo para o
primeiro cliff após esse ponto. Um cliff é um ponto onde a altura de dois vizinhos são
diferentes. Tendo aleatoriamente selecionado a tarefa 25 como o ponto de cross, o ponto de
cross é movido para a tarefa 27, a qual é o próximo cliff. As tarefas depois da 27 na substring A.1 serão transferida para string B, e as tarefas anteriores, incluindo a 27,
permanecerão em A. Um ponto “idêntico” deve ser encontrado na string B.1. A condição
que deve ser satisfeita na altura das tarefas que ficarão em B.1 é <= à altura da tarefa 27 e a
altura das tarefas movidas são > que a altura da tarefa 27(nesse exemplo). O ponto de
croosover encontrado em B.1 é a tarefa 21.
Passo 2: após selecionados o pontos de cross, as tarefas a serem movidas devem ser
checadas pelo sistema de RRANDS (Replace, Release na Save) .
9
•
•
•
Check Alright Tasks
Para cada tarefa depois do ponto de cross A.1 faça:
Se a tarefa em B.1, e depois do ponto de cross
Marque como Alright;
Check for Replace tasks and Stay tasks for string A.1
Para cada tarefa após o ponto de cross A.1 que não está marcado como
Alright e não marcado como Release:
Encontre tarefa irmã em B;
Se a tarefa está após a sub-string corrente
Marque como Replace;
Senão
Marque como Stay;
Check for Release tasks and Stay tasks for string B.1
Para cada tarefa após o ponto de cross B.1 que não está marcado como
Alright e não marcado como Replace:
Encontre tarefa irmã em A;
Se a tarefa está após a sub-string corrente
Marque como Release;
Senão
Marque como Stay;
10
Passo 3: Uma vez que as tarefas foram marcadas, as sub-strings podem ser “crossed”
(transferidas). Move-se todas as tarefas depois do ponto de cross A.1 para depois o ponto
de cross B.1. As tarefas Stay devem ser movidas com suas próprias sub-strings para
manterem a propriedade de ascensão.
Passo 4: Uma vez que o “crossing” (transferência) da última tarefa é feito, o algoritmo deve
prosseguir para a próxima sub-tring, assumindo que ela exista.
Passo5: A seleção do próximo ponto de cross deve levar em consideração as tarefas de
Release e Replace. Para a string A, as tarefas Releases representam uma duplicação das
tarefas com a string completa. Como visto acima, string A tem duas cópias da tarefa 30.
Isso viola uma das pré-condições (cada string deve ter uma e apenas uma cópia de cada
tarefa). Tarefas de Replace representam uma falta de tarefas, tarefas 28 e 29 precisam ser
repostas, então a string A poderá ter um conjunto completo de tarefas. O oposto acontece
com B; tarefas de Replace representam uma duplicação, e tarefas Release representam uma
falta. Uma tarefa Stay representa uma violação de uma e somente uma regra se a tarefa é
movida.
Um ponto de cross deve ser encontrado na string A.2, obedecendo as regras de cliff e de
que sua altura é menor ou igual à altura das tarefas Release na string A.2 e tarefas de
Replace da string B.2. Uma vez que o ponto de cross é encontrado, para ambas sub-strings,
o passo 2 é repetido até que todas sub-strings são feitas.
11
1.3.5 Mutação: Operador que produz um cromossomo filho através da alteração aleatória
na seqüência de bits(gene) de um cromossomo pai. Esse operador pode levar á criação de
um processo mais apto, mas a característica mais relevante, é que assim se possibilita a
diversificação dos processos. Mutação é aleatoriamente aplicada com uma baixa
probabilidade, tipicamente na faixa dos 0,1 até 1,0 por cento.
1.3.6 Como algoritmos genéticos s diferenciam de outras técnicas de procura: Para os
algoritmos genéticos superarem outras técnicas em termos de robustez, eles devem se
diferenciar em alguns aspectos fundamentais:
1. Trabalha com um conjunto de codificação de parâmetros, não com os
parâmetros por si só;
2. Procura apartir de uma população de pontos, não de um simples ponto;
3. Uso de playoff(função objetiva), não derivativas ou outros conhecimentos
auxiliares;
4. Usa regras de transições probabilísticas e não determinísticas;
5. Codificação.
12
2. Algoritmo de Busca Tabu
2.1. Uma breve introdução
A filosofia da busca tabu (tabu search, TS) é derivar e explorar uma coleção de princípios
de resolução de problemas de inteligência. Neste sentido, pode se dizer que a pesquisa tabu
é baseada em conceitos selecionados que unem o campo de inteligência artificial e
otimização.
A forma básica da busca tabu é fundamentada na idéia proposta por Fred Glover. O
método é baseado em processos desenhados para cruzar os limites de factibilidade ou
otimalidade local, que eram usualmente tratados como barreiras.
Busca tabu é uma meta-heurística que orienta um processo de busca heurístico local
para explorar o espaço de soluções além da otimalidade local. O processo local é uma busca
que usa uma operação chamada move para definir a vizinhança de qualquer solução dada.
Um dos principais componentes da busca tabu é o uso de memória adaptativa, que cria um
comportamento de busca mais flexível. Estratégias baseadas em memória são portanto as
marcas de aproximações da busca tabu.
A busca tabu é baseada na premissa que a resolução de um problema, em ordem
para ser qualificada como inteligente, precisa incorporar memória adaptativa e exploração
de resolução.
A memória adaptativa prove a implementação de processos que são capazes de
procurar o espaço de solução de uma maneira econômica e eficiente.
A ênfase em exploração de resposta em busca tabu deriva da suposição que uma má
escolha de estratégia pode render mais informações do que uma boa escolha randomica.
(Em um sistema que utiliza memória, uma má escolha baseada em estratégia pode prover
boas dicas sobre como a estratégia pode proveitosamente se mudada)
2.2. O uso da memória.
As estruturas de memória na busca tabu opera por referencia a quatro dimensões principais.
Constituindo novidade, freqüência, qualidade, e influência.
13
2.2.1. Dimensão de Qualidade
A dimensão de qualidade refere-se a habilidade para diferenciar o valor das soluções
visitadas durante a busca. Neste contexto a memória pode ser utilizada para identificar
elementos que possuem soluções ótimas comuns ou caminhos que conduzem a estas
soluções. Operacionalmente, qualidade se torna o fundamento para o incentivo base de
aprendizagem, onde induções são tomadas para desencorajar ações que conduzam para más
soluções.
2.2.2. Dimensão de Influência
A dimensão de influência, considera o impacto que as escolhas provocam durante a
busca, não somente em qualidade mas também em estrutura. Gravando informações sobre a
influência das escolhas tomadas em uma particular solução incorpora um nível adicional de
aprendizado.
2.2.3. Dimensão de Novidade
O tipo de memória que observa os atributos das soluções que foram modificados
durante um passado recente é chamada de memória baseada em novidade.
Para explorar esta memória, selecionados atributos que ocorrem em soluções recentemente
visitadas são chamados de tabu-active, e soluções que possuem atributos tabu-active, ou
uma combinação particular desses atributos, são aquelas que se tornam tabu. Isto previne
que certas soluções de um passado recente pertença a uma vizinhança modificada da
solução anterior, e nem seja revisitada.
2.2.4. Dimensão de Freqüência
Memória baseada em freqüência prove um tipo de informação que complementa a
informação provida pela memória baseada em novidades, ampliando o fundamento para
seleção de moves preferidos. Assim como na memória baseada em novidades, freqüência
muitas vezes é pesada e decomposta em varias subclasses levando em consideração a
dimensão da qualidade da solução e a influência do movimento.
A memória usada na busca tabu é tanto explicita como atributiva.
2.2.5. Memória Explicita
A memória explicita grava a solução completa, tipicamente considerando um
conjunto de soluções visitadas durante o processo de busca. Uma extensão desta memória
grava informações sobre as vizinhanças da elite de soluções. A elite de soluções (ou suas
vizinhanças) memorizado são utilizados para expandir a busca local. Em alguns casos a
memória explicita é utilizada para que a busca evite visitar a mesma solução duas vezes.
14
2.2.6. Memória Atributiva
Como alternativa, a busca tabu utiliza memória atributiva. Este tipo de memória
grava informação sobre os atributos da solução que mudam na movimentação de uma
solução para outra. Por exemplo, no escalonamento de produções, o indicador de trabalhos
deve ser utilizado como atributo para inibir ou encorajar o método a continuar a procura em
determinada direção.
2.3. Intensificação e diversificação
Dois componentes muito importantes da busca tabu são as estratégias de intensificação e de
diversificação.
2.3.1. Estratégia de intensificação
Estratégias de intensificação são baseadas em regras de modificação que encorajam
a combinação de movimentos e características históricas das soluções achadas ótimas. Esta
estratégia começa sua resposta analisando mais profundamente a vizinhança da resposta
anterior. Como uma elite de soluções devem ser gravados para que seja possível a analise
de sua vizinhança, memória explicita é claramente relacionada com a implementação de
estratégias de intensificação.
2.3.2. Estratégia de diversificação
A estratégia de diversificação, por outro lado, encoraja o processo de busca para examinar
regiões não visitadas e a gerar soluções que diferem em vários aspectos daquelas que foram
vistas anteriormente.
Um exemplo gráfico de intensificação de diversificação pode ser observado:
15
2.4 Utilização de busca TABU em escalonamento
2.4.1. Escalonamento para minimizar o tempo de comunicação em um
sistema de multiprocessadores
Máquinas Conexionistas (Connectionist Machines) estão atraindo grande atenção para seus
valores como uma proliferação de arquiteturas de computadores maciçamente paralelos.
Isto é particularmente verdade para a resolução de problemas de otimização combinatória
aparecendo em uma variedade de aplicações de engenharia. Ao mesmo tempo, o objetivo
do desenvolvimento e implementação de máquinas conexinistas introduz problemas
desafiantes de otimização.
Um problema importante é de minimizar o tempo de comunicação requerido para
uma máquina conexionista. O tempo de comunicação freqüentemente é um determinante
crucial de tudo que abrange custo e eficiência. Em uma classe significante de aplicativos,
como analise de elementos finitos, a comunicação padrão é estática. A localização da
memória definindo a origem e os destinos das mensagens não é modificada nesses
aplicativos, apenas os dados comunicados variam. Melhores construções para alocação de
processadores de acordo com a estrutura padrão de comunicação oferece um considerável
potencial para reduzir custos e tempo.
Foi desenvolvido por Chakrapani e Skorin-Kapov (1995) um método efetivo de
busca tabu para o problema de mapeamento de tarefas para processadores para minimizar o
tempo de comunicação em um sistema multiprocessador. O método incorpora a
implementação de um processamento paralelo que inclui a memória da busca tabu e guia
mecanismos para iterativamente selecionar pares de tarefas e troca-las de processador. A
implementação envolve dois níveis de paralelismo. Primeiro, a tarefa candidata para ser
trocada é identificada em paralelo. Segundo, mais do que um par de tarefas são trocadas em
um simples iteração. Esta estratégia é desenvolvida para operar com aproximações
eficientes. Os autores propõem uma diversificação desta estratégia que faz a busca robusta
sobre essas circunstancias.
2.4.2. Escalonando tarefas de Multiprocessadores com Programas
paralelos
Quando programas de aplicação paralelos são executados em maquinas MIMD, a porção
paralela da aplicação pode ser acelerada de acordo com o número de processadores
alocados nela. Em uma arquitetura homogênea, onde todos os processadores são idênticos,
a porção seqüencial do programa terá que ser executada em um desses processadores,
degradando consideravelmente o tempo de execução. Em uma estrutura heterogênea, onde
um processador rápido, responsável por executar a porção seqüencial de uma aplicação
paralela e é fortemente acoplada a menores processadores, melhores performances devem
ser alcançadas. O processo de determinar as tarefas de determinado processador
(escalonamento de tarefas) é mais complexo no caso de um sistema heterogêneo, onde os
processadores tem taxas de processamento distintas.
Porto e Ribeiro (1995a) tem aplicado busca tabu para o problemas de
escalonamento de tarefas em um ambiente heterogêneo de multiprocessadores sobre
16
obstáculos precedentes. Uma série parâmetros e estratégias de busca tabu foi estudada lado
a lado com uma variedade de gráficos precedentes de tarefas ( topologia, número
de tarefas, serial fraction, demanda de serviço de cada tarefa) e a configuração
do sistema (número de processadores, medida de heterogeneidade da arquitetura
pelo poder médio de processamento). O algoritmo por si só é muito robusto e efetivo,
sistematicamente melhora em aproximadamente 25% o makespan das soluções
obtidas pelo algoritmo que prove a solução inicial.
2.4.3. Escalonando tarefas em Multiprocessadores usando busca tabu
paralela.
Porto e Ribeiro (1995b) tem desenvolvido e implementado estratégias de busca tabu
de paralelização para o problema de escalonamento de tarefas para multiprocessadores.
Paralelização conta com exclusivamente com a decomposição da exploração do
espaço de solução.
O problema de escalonamento de tarefas considerado neste estudo é caracterizado
por uma grande estrutura de vizinhança, que não só reduz o tempo de computação mas
produz melhores soluções para muitos problemas de teste.
3. Outros Algoritmos: Programação Linear
Uma outra forma alternativa de se escalonar processos é através da programação linear
(P.L.).
A programação linear e o Método Simplex foram desenvolvidos por Dantzig em 1947, com
o apoio do serviço militar dos EUA. A P.L. é frequentemente usada como parte de vários
esquemas para solucionar problemas de programação não-linear, problemas discretos,
problemas combinatórios, problemas de controle de otimalidade e programação sob
incerteza.
Um problema de P.L. é um problema de minimização ou maximização de uma função
linear na presença de restrições lineares de uma inequação e/ou equação.
No nosso estudo estaremos interesados em maximizar o rendimento do tempo de execução
(makespan), restrito a uma alocação de processos.
max C1 X1 + C2 X2 + ... + Cn Xn = z
sujeito a a11 X1 + a12 X2 + ... + a1n Xn >= b1
a21 X1 + a22 X2 + ... + a2n Xn >= b2
.
.
.
.
.
.
.
.
.
.
.
.
am1 X1 + m12 X2 + ... + m1n Xn >= bm
X1, X2, ..., Xn >=0
17
O Método simplex é usado para solucionar o problema descrito acima.
4. Bibliografia
Glover, Fred and Laguna Manuel (1997) “Tabu Search” Kluwer Academic Publishers
18
Download