Capítulo 4 Trabalho realizado
4.3 Implementação
4.3.3 Ferramenta de avaliação
A ferramenta de avaliação foi desenvolvida com o objetivo de avaliar de forma fiável o desempenho e consumo de memória do sistema de navegação desenvolvido. Como requisito desta ferramenta, deve possibilitar a execução de testes automáticos (sem intervenção do ser humano) recebendo como argumento de entrada um ficheiro de configuração e retornando como output o resultado dos testes efetuados. Apesar da ferramenta de prova de conceito permitir observar o consumo de memória e o tempo de resposta do sistema, não se trata de uma avaliação fiável. Por outro lado, a componente gráfica que lhe está associada é “desnecessária” para a recolha de dados, estando esta associada a um grande consumo de recursos o que influência os resultados obtidos e dificulta a rapidez e replicação dos testes.
Tal como acontece na ferramenta de prova de conceito, a execução da ferramenta de avaliação baseia-se em ficheiros de configuração no formato XML. O ficheiro de entrada contêm diversas entradas, cada entrada representa uma situação de
Ilustração 31 - Simulação de 600 NPC’s com esquema de divisão baseado em Grelha e algoritmo de procura A*.
Ilustração 32 - Simulação de 2 NPC’s com o esquema de divisão baseado em quadtree e algoritmo de procura Fringe Search.
90
teste. Uma entrada é composta por diversos parâmetros que correspondem a um ficheiro XML.
Parâmetros Descrição Valores possíveis
Id Identificação da simulação. -
Esquema de divisão
Esquema de divisão a ser aplicado ao ambiente de jogo.
Baseado em grelha ou em quadtree
Algoritmo de procura em grafos
Algoritmo de procura em grafos usado para a resolução de caminhos
A* ou Fringe Search
Dimensão do terreno
Tamanho do terreno onde será aplicado o esquema de divisão.
Pequena, média ou grande
Procedimentos Lista de procedimentos a aplicar ao ambiente de jogo especificado nos parâmetros anteriores.
-
Número de repetições
Número de vezes que os procedimentos serão repetidos
-
Tabela 27 - Parâmetros que compõe uma entrada do ficheiro XML.
A divisão de cada simulação em parâmetros promove a modularização e a reutilização dos ficheiros XML.
Os ficheiros de procedimentos são constituídos por diversas entradas, cada entrada corresponde a uma operação que é executada de forma linear sendo registado o tempo de processamento e memória utilizada na sua execução. Atualmente as operações suportadas são:
Operação Descrição
InitNavigationGraph Inicialização do grafo de navegação.
Inicialização do algoritmo de procura.
AddObstacleAtLoad Adição de vários obstáculos durante a inicialização do grafo de navegação e no final atualização do grafo de navegação.
AddObstacle Adição de um obstáculo e atualização do grafo de navegação.
PrintSearchSpace Obtém a dimensão do espaço de procura.
ToNode Quantização, ocorre a conversão de uma localização do ambiente de jogo num nó do grafo de navegação.
91
de jogo.
ConnectNeighbours Procede à conexão de vizinhos.
FindePath Determina o caminho entre dois pontos.
FinishTest Finaliza o teste.
Tabela 28 - Operações suportadas pela ferramenta de avaliação.
Cada ficheiro de procedimento deve possuir no mínimo três procedimentos: InitNavigationGraph, InitNavigationGraph e FinishTest. Para cada procedimento de uma simulação executado é criado um ficheiro de output com o Id da simulação e o processamento.
Comparando a implementação da ferramenta de prova de conceito e a ferramenta de avaliação existem três grandes diferenças:
não é usada a técnica de programação de inversão de controlo uma vez que a biblioteca usada na ferramenta de prova de conceito é específica para o Unity 3D e o ambiente de execução da ferramenta de avaliação é inteiramente em C#;
os objetos e entidades assim como a sua descrição em XML diferem entre ferramentas. Esta opção tem por objetivo poupar memória uma vez que na ferramenta de avaliação não é necessário tantos atributos para descrever os objetos e entidades;
a criação dos objetos não recorre a fábricas.
Embora estas diferenças tenham obrigado a uma nova implementação da camada “business” do jogo de vídeo, devido à arquitetura do sistema de navegação ser centrada em objetos tratou-se de uma tarefa relativamente simples.
A nível de funcionamento destacam-se duas diferenças entre as duas ferramentas: na ferramenta de avaliação não existe uma camada locomoção, os pedidos
realizados à camada de procura em grafos são feitos de forma linear à medida que os procedimentos vão sendo executados
existem dois modos de execução. O primeiro modo de execução consiste no uso de apenas uma instância do algoritmo de procura em grafos, existindo apenas a thread principal da ferramenta. O gestor não recorre à threadpool para lançar novas instâncias, sendo as chamadas ao método responsável pela procura de caminho síncronas, lineares e bloqueantes. O segundo modo de execução é semelhante à ferramenta de prova de conceito, em que o gestor recorre à threadpool para
92
armazenar e consumir pedidos através de uma ou mais threads. A existência de dois modos de execução tem por objetivo permitir avaliar melhor a arquitetura desenvolvida.
A avaliação do tempo de processamento de cada operação é feita através do biblioteca do C# System.Diagnostics que disponibiliza um conjunto de métodos (nomeadamente o Stopwatch) que permitem medir de forma precisa o tempo decorrido. Desta forma, é obtido o tempo antes da chamada à função e depois da chamada à função, sendo o último tempo subtraído pelo primeiro tempo.
Para a avaliação da memória usada na execução do método, é obtida a memória total do sistema antes da chamada à função e depois da chamada à função. Sendo a quantidade de memória avaliada depois da chamada à função subtraída à quantidade de memória avaliada antes da chamada à função. Antes da obtenção da memória total do sistema é chamado o método Thread.MemoryBarrier uma vez que a máquina usada em testes dispõe de um sistema multiprocessador e a chamada a este método sincroniza o acesso à memória, fazendo com que o processador não faça reordenamento de instruções.
4.4 Sumário
Neste capítulo é descrito o trabalho técnico realizado para alcançar os objetivos propostos.
Na primeira secção é feita a análise do problema com vista aos objetivos traçados no capítulo 1.2 e à pesquisa bibliogafia feita no Capítulo 2.
Depois da conceptualização dos problemas que este estudo procura resolver, na secção seguinte é descrito o desenho da solução com base nos requisitos e problemas identificados anteriormente.
A secção final tem por objetivo especificar a implementação do desenho da solução, nesta secção é detalhado a implementação do sistema de navegação e das duas ferramentas criadas para a explorar.
93