• Nenhum resultado encontrado

TransEndo: Transgenético com um único Endossimbionte

3 Trabalhos Relacionados

4.3 Propostas de Alocação Dinâmica

4.3.2 TransEndo: Transgenético com um único Endossimbionte

Diferente do TransCand, apresentado na seção 4.3.1, o TransEndo não é uma heurística que se baseia no conceito de população. No TransEndo apenas uma solução é gerada, construtivamente, a partir da solução atual. A informação heurística usada nessa proposta é a mesma que a do TransCand, que é alocar as tarefas que mais se comunicam o mais próximo possível (pai e filho), considerando uma ordenação feita previamente. No entanto, no TransEndo, a informação carregada pelo plasmídeo só é inserida no endossimbionte (solução atual), se a alocação atual da tarefa na configuração da solução atual não for melhor do que a nova alocação, pois embora a tarefa não esteja alocada, existe uma posição

previamente reservada para ela. No momento de fazer a alocação de fato, o critério do plasmídeo é usado para verificar se há uma alocação melhor. Isso é válido para todas as tarefas não alocadas. Dessa maneira, o plasmídeo realiza o cálculo do custo de comunicação na alocação de cada tarefa. A Figura 17 apresenta o esquemático da otimização aplicada por essa proposta.

Figura 17: Esquemático da otimização aplicada pela heurística TransEndo.

Na Figura 17 nota-se que a estratégia usada pelo TransEndo considera que existe no BIG apenas as informações das tarefas a serem alocadas, ordenadas da mesma forma que é feita no TransCand. O plasmídeo usado aqui também age da mesma forma que no TransCand. Contudo, a alocação da tarefa no núcleo escolhido só é aplicada se o custo das comunicações com as outras tarefas já alocadas for menor do que o custo na alocação na posição que a tarefa se encontra na solução atual. O pseudocódigo do TransEndo é apresentado no Algoritmo 4.

Algoritmo 7: TransEndo

Input: TP A, N , Comm, F , D, sol, map_t, map_c.

Output: Atualização de sol, map_t e map_c.

1: BIG ← ∅

2: BIG ← LoadGeneticInf ormation(TP A, |sol|, Comm, map_t)

3: if (BIG 6= ∅) then 4: for each (t ∈ BIG) do

5: P lasmideoEndo(sol, map_t, map_c, t.targer, t.f ather, N )

6: end for

Como mostrado no Algoritmo 4, o procedimento toma como entrada o conjunto de tarefas a serem alocadas TP A, o conjunto de núcleos N , a lista de comunicações ativas

Comm, a matriz dos fluxos de informação F , a matriz de distâncias D, a solução atual sol e os vetores binários map_t e map_c que indicam quais tarefas foram alocadas e quais núcleos estão sendo usados pela solução atual, respectivamente. O procedimento retorna às novas configurações de sol, map_t e map_c.

Nas duas primeiras linhas do algoritmo TransEndo, é criado o BIG e é feita a inserção das informações genéticas nele (linhas 1 e 2). Essa inserção de informações genéticas é feita da mesma forma que no algoritmo TransCand, a qual é descrita na seção 4.3.1.1. Logo após, é feita a verificação se existe alguma tarefa a ser alocadas (linha 3), e caso exista, para cada tarefa t a ser alocada é feita a aplicação do plasmídeo. Detalhes sobre o plasmídeo serão apresentados na próxima seção (seção 4.3.2.1).

4.3.2.1 PlasmídeoEndo

O plasmídeo aplicado no algoritmo TransEndo realiza a alocação da tarefa no núcleo localizado o mais próximo possível do núcleo onde a tarefa pai está alocado. Contudo, na escolha dos núcleos candidatos para alocação da tarefa alvo, o cálculo do custo das comunicações é considerado. Com isso, considera-se não só a comunicação com a tarefa pai, mas também todas as comunicações feitas entre a tarefa a ser alocada e as outras tarefas já alocadas. O pseudocódigo do plasmídeo é apresentado no Algoritmo 8.

Algoritmo 8: PlasmideoEndo

Input: sol, map_t, map_c, target, f ather, N , F , D. Output: Atualização de sol, map_t, map_c.

1: cores ← getM anhattanM in(sol[f ather], map_c, N )

2: curr_cost ← getCost(F, D, sol, target)

3: c ← choose(cores)

4: t_swap ← applySwap(target, c, sol)

5: new_cost ← getCost(F, D, sol, target)

6: if (new_cost ≥ curr_cost) then

7: swap(sol[target], sol[t_swap])

8: end if

9: map_t[target] ← 1

10: map_c[sol[target]] ← 1

De acordo com o pseudocódigo do Algoritmo 8, o plasmídeo do TransEndo recebe como entrada a solução atual sol, os vetores binários que indicam quais tarefas já estão alocadas e quais núcleos já estão sendo usados map_t e map_c, respectivamente, a tarefa

a ser alocada target, a tarefa pai da tarefa a ser alocada f ather, o conjunto de núcleos N , a matriz de fluxos de informações F e a matriz das distâncias entre núcleos D. O algoritmo retorna como resultado a atualização da solução sol e dos vetores binários map_t, map_c. Inicialmente é obtido o conjunto de núcleos disponíveis com a menor distância em hops de onde a tarefa pai está alocada (linha 1). Após isso, é obtido o custo de alocação da tarefa (target) considerando a posição que ela seria alocada na configuração da solução atual (linha 2). Esse custo é armazenado na variável curr_cost. Logo após, é escolhido aleatoriamente qual dos núcleos que deverá receber a tarefa (linha 3). Na linha 4, é feita a alocação, onde são trocadas as posições de alocação na configuração da solução atual e a nova posição (núcleo) escolhida no procedimento anterior. Após isso, é feito o cálculo do custo considerando essa nova posição de alocação (linha 5) e comparado com o custo da posição anterior (linha 6). Caso o novo custo seja pior ou igual ao do anterior, retorna-se para a configuração anterior (linha 7) e atualiza os vetores binários de tarefas alocadas e núcleos utilizados (linhas 9 e 10, respectivamente). Caso o custo da nova posição seja melhor, apenas atualiza os vetores binários.

Assim como apresentado neste Capítulo, a proposta deste trabalho da implementação de estratégias para alocação de tarefas tanto no contexto estático quando no dinâmico. O objetivo principal de todas elas é a geração de soluções otimizadas em termos de latência de comunicação. O próximo Capítulo apresenta a metodologia e os resultados experimentais para os algoritmos propostos.

5

Experimentos

Os experimentos realizados, assim como a metodologia usada, estão descritos neste Capítulo. Os conteúdos aqui apresentados estão organizados nas seguintes seções: a seção 5.1 descreve as instâncias consideradas nos experimentos; a seção 5.2 mostra os resultados de verificação do modelo do Problema de Mapeamento e Roteamento (PMR); a seção 5.3 apresenta a metodologia e os resultados para as math-heurísticas propostas para o mapeamento estático de tarefas; e a seção 5.4 apresenta a metodologia e os resultados para as heurísticas de alocação dinâmica.