Filosofos

From Mo806

Jump to: navigation, search

Dario Fernandes e Vitor Afonso

Contents

Atividade

Análise do caso de baixo paralelismo da implementação assimétrica. Encontrar padrões que levam ao baixo paralelismo para alguns valores de N e fazer uma implementação com sleeps que ilustra estes padrões.

Introdução

Na implementação assimétrica os filósofos de índice ímpar pegam primeiro o garfo da direita e depois o garfo da esquerda, enquanto os de índice par pegam primeiro o da esquerda, como demonstrado no código abaixo.

   for (i = 0; i < N_CICLOS; i++) {
       fica_com_fome(phil_id);
   if (phil_id % 2) { 
       pega_garfo_dir(phil_id);
       pega_garfo_esq(phil_id);
   } else {
       pega_garfo_esq(phil_id);
       pega_garfo_dir(phil_id);
   }
       come(phil_id);
       solta_garfos_pensa(phil_id);
   }

Testes

Foram realizados testes com diversas implementações para encontrar os casos que apresentavam menos paralelismo.

Material

Os slides da apresentação estão aqui: slides-multithread

Os códigos fonte com as diferentes implementações de baixo paralelismo estão em: códigos-filósofos.

Nesse pacote estão os seguintes arquivos:

   - assimetrica.c - Implementação assimétrica sem modificações.
   - delay_crescente_2_grupos.c - Implementação utilizando dois grupos e com sleep crescente.
   - delay_fixo.c - Implementação utilizando um tempo fixo de sleep.
   - delay_grupos_2.c - Implementação utilizando 2 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_3.c - Implementação utilizando 3 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_4.c - Implementação utilizando 4 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_5.c - Implementação utilizando 5 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_6.c - Implementação utilizando 6 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_7.c - Implementação utilizando 7 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_8.c - Implementação utilizando 8 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_9.c - Implementação utilizando 9 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_grupos_10.c - Implementação utilizando 10 grupos e tempo de sleep crescente dentro de cada grupo.
   - delay_random.c - Implementação com tempo de sleep aleatório.
   - delay_soltando_segundo_garfo.c - Implementação com sleep antes de soltar o segundo grafo e após soltar o primeiro.

Conclusão

Dos casos testados o que apresentou menos paralelismo foi o caso em que os filósofos eram divididos em dois grupos e o tempo de sleep era crescente dentro de cada grupo.

Personal tools