Paleontolojik Bulgular
TARTIŞMA VE SONUÇLAR
O modelo de computação que está presente neste grupo de modelos é o DF (Data flow) [43], ou chamado Data Flow Process Networks, que é uma variação das redes dos processos de Kahn. No processo de Kahn, a comunicação dos processos via rede um para outro se dá via canais infinitos de filas (FIFO). A escrita nesses canais é considerado algo “não blocado”, pois eles sempre serão bem sucedidos e nunca irão parar o processo, enquanto que a leitura a partir desses canais é “blocado”, ou seja, o processo que lê de um canal vazio irá parar e apenas poderá continuar quando o canal contiver dados (tokens) suficientes.
Os processos na rede de processos de Kahn são monotônicos, o que significa que eles só precisam de informações parciais do stream de entrada para produzir informações parciais para o stream de saída. A monotonicidade permite o paralelismo, pois o processo não precisa de todo o sinal de entrada para começar a computação dos eventos de saída. Vale salientar que os processos não são permitidos realizar testes nos canais de entrada se existir tokens sem serem consumidos. Além disso, existe uma ordem total dos eventos dentro do sinal. Entretanto, não existe ordem de relação entre os eventos em diferentes sinais. Diante do exposto, os processos de Kahn são considerados “parcialmente ordenados”, o que os classificam como modelo sem tempo [37].
Um programa que lida com data flow é um gráfico direcionado que consiste em nós (atores) que representam comunicação e os arcos que representam sequências (streams) ordenadas de eventos (tokens) como pode ser visto na Figura 10 em seguida. Os círculos vazios são representados pelos nós, as setas representam os streams e o círculo preenchido representa o token. O fluxo dos dados na rede pode ser hierárquico, pois os nós podem representar um fluxo de dados no gráfico [37].
Figura 10. Redes de processo Data Flow [37]
A execução do processo do fluxo de dados é uma sequência de execuções ou avaliações. Para cada execução, tokens são consumidos e tokens são produzidos. O número de tokens consumidos e produzidos pode variar a cada diferente execução e assim é definido nas regras da execução de cada ator do fluxo de dados. O processo do fluxo de dados na rede parece ser bastante útil em aplicações de processamento digitais de sinais. Quando se implementa o fluxo de dados na rede em um único processador, a sequência de execuções, também conhecida como planejamento de execuções, precisa ser encontrada. De forma geral os modelos de fluxo de dados (data flow) não podem decidir se tal planejamento existe, pois essa resposta depende dos dados de entrada.
Uma variação do fluxo de dados simples é o Synchronous Data Flow (SDF) [44] que acrescenta mais restrições no modelo de fluxo de dados, pois ele requer que o processo consuma e produza um número limitado e fixo de tokens para cada execução. Com tal restrição é possível testar a eficiência, se um planejamento finito estático existe. Se existir, ele pode ser efetivamente computado. A Figura 11 mostra o processo SDF. O número de arcos mostra quantos tokens são produzidos e consumidos durante cada execução. Um planejamento possível para a rede SDF exibida pode ser {A,A,C,C,B,D} [37].
Neste grupo de modelos de computação, pode-se citar, por exemplo, dois: PN (Process Network) e o já citado SDF (Syncrhonous Data Flow). Para a modelagem de
hardware e aplicações embarcadas, é extremamente necessário um modelo de
concorrência, e o PN é um mecanismo para prover tal concorrência. Este modelo permite operações assíncronas para componentes de processos em uma rede e vem sendo estendido para possibilitar mutações em redes para algumas formas não determinísticas. Os receptores neste modelo implementam uma fila (FIFO – First In
First Out), nos quais se utilizam da estratégia de bloquear para a leitura e liberar para a
escrita. O PN é considerado um modelo que não trabalha com noção de tempo, sendo utilizado principalmente para modelar sistemas distribuídos assíncronos e processamento baseado em streams (vídeo e áudio), que são comumente encontrados em aplicações eletrônicas [21] e [45].
Já o SDF é muito usado para modelar processamento de sinais e aplicações multimídia. Além disso, algumas linguagens baseadas em SDF, como StreamIt [46], têm sido aplicadas na programação de data flows e multicores [47]. Este modelo consiste em uma rede de componentes conectados por arcos por onde passam os dados. Este modelo trabalha com um número fixo de tokens para cada entrada e saída, de acordo com a execução. Quando um ator é executado neste modelo, ele consome um numero fixo de tokens de cada porta de entrada e produz um número fixo de tokens para cada porta de saída. O fluxo de dados que passará nos vários nós existentes tanto como entrada, como saída é planejado estaticamente, ou seja, em tempo de compilação [44].
Capítulo
4
Simulação Distribuída
Simulação de sistemas computacionais é uma computação que modela o comportamento de sistemas reais e imaginários no decorrer do tempo [48]. Na prática, ela consiste em um conjunto de técnicas que são fundamentais para avaliação do desempenho de sistemas existentes, para o estudo de novas soluções e para a criação de um mundo virtual (ex. games online, ambientes digitais virtuais) [49].
Existem várias razões por trás do uso de técnicas de simulação. Por exemplo, um sistema que precisa ser avaliado, mas que não pode ser construído, por razões de altos custos; um sistema que precisa ser testado, mas que o teste em determinadas aplicações pode ser bastante perigoso, colocando em risco a vida de pessoas, além de que em alguns casos, testes de stress são de certa forma impossíveis de serem realizados; e a exploração de diversos tipos de solução para um sistema, em que a melhor precisa ser descoberta e assim escolhida. A demanda por sistemas cada vez mais complexos levou a uma ampla difusão de técnicas de simulação, ao aumento da pesquisa nesse campo e a disponibilização de diferentes tipos de ferramentas de software [49].
No decorrer dos anos, diversos paradigmas de simulação têm sido propostos, cada um apresentando vantagens e desvantagens. Entre esses, pode-se citar o conhecido MoC Discrete Event Simulation (DES) [50] que é bastante poderoso em termos de expressividade e é de fácil entendimento pelos desenvolvedores de modelos de simulação. Tal modelo já foi citado previamente no Capítulo 3. Nesse caso, todas as atividades são executadas por uma única unidade de processamento, e isso significa que as atividades estão sendo executadas de forma sequencial (monolítica). A unidade de execução única é responsável por modelar todo o sistema e por fazer o gerenciamento de toda a evolução do sistema de forma sequencial. A grande vantagem dessa abordagem é a sua simplicidade, mas tal característica introduz algumas severas limitações: as fontes de memórias de uma unidade de execução única podem ser
insuficientes para a modelagem de sistemas mais complexos. Além disso, a quantidade de tempo necessário para completar a simulação pode ser também bastante excessiva [51] [49].
Uma alternativa para esse problema é o chamado Parallel Discrete Event
Simulation (PDES) [52], que apresenta unidades de execução múltiplas interconectadas.
Nesse caso, cada unidade de execução gerencia somente a sua parte da simulação modelada. Então, é possível representar modelos extensos e complexos usando fontes agregadas de várias unidades de execução. Diferentemente do DES, no PDES cada unidade de execução tem que gerenciar sua lista de eventos locais e os eventos gerados localmente precisam ser enviados a unidades de execução remotas. Além disso, o seu processamento precisa ser sincronizado com o resto do simulador, o que torna a gerência da simulação mais complicada. Logo, o grande benefício do uso de computação e memória de forma agregada é que ele permite que a simulação de grandes sistemas complexos seja possível, e também, em vários casos, a simulação distribuída ou paralela de eventos concorrentes [53] podem trazer um speedup significativo para a execução das simulações [49]. Speedup pode ser definido como o tempo de execução da computação sequencial dividido pelo tempo de execução da computação paralela [54], ou seja, o quanto a computação distribuída pode ser mais rápido que a serial.
Algumas simulações complexas envolvem diferentes tipos de simulações individuais, combinadas com outros aspectos em um ambiente global que precisa ser simulado. Normalmente, as simulações de alguns desses tipos de componentes já existem, tendo sido desenvolvidas com um propósito bem específico. Porém, pode-se observar também a necessidade de fazer diversas modificações quando é necessário adaptar um componente de simulação de forma que este seja integrado em uma nova simulação combinada. Em alguns momentos, sabe-se que é mais fácil implementar completamente um novo simulador de um componente de sistema do que modificar um já existente.
Então, ao invés de se ter um único programa sendo executado em um único computador, se faz necessário, algumas vezes, ter vários programas sendo executados em diferentes tipos de computadores distribuídos e interagindo um com o outro em tempo de execução.