Pietro Aurilio


Distributed Steer

Introduzione

Il mio lavoro ha lo scopo di distribuire su più macchine una applicazione per la simulazione di agenti chiamati Boids.Il modello a boid è un modello per coordinare il movimento di un gruppo di animali, questo modello segue il Modello Reynolds, ed è soggetto a tre differenti comportamenti:

  • separazione dagli altri boids.
  • allineamento con gli altri boid per definire la direzione di volo
  • coesione con gli altri.

Il mio lavoro di tesi è la continuazione del lavoro di tesi di ricerca del dottor Biagio Cosenza il quale si era occupato di parallelizzare la libreria OpenSteer, creando in questo modo DistributedSteer.

Obiettivi

L'obiettivo di DistributedSteer è quello di gestire un elevato numero di boids. Con la parallelizzazione di OpenSteer i problemi che sono stati affrontati sono i seguenti:

  • Bilanciare il carico di lavoro di ogni worker
  • Avere un'alta scalabilità

Il primo problema su mensionato, quello del bilanciamento del carico, è stato affrontato dal dottor Biagio Cosenza, che ha sviluppato tre algoritmi dinamici per la gestione del carico di lavoro. Per maggiori dettagli leggere il paper abbinato.

Lavoro di Tesi

Il mio lavoro di tesi si sta focalizzando sulla scalabilità del sistema di DistributedSteer. Nello specifico mi sono occupato della creazione in parallelo dei boids.Il nostro plugin esegue la creazione degli Agent all'interno di una Bounding Box, ma per come è stato pensato il plugin, i boids non sono equamente distribuiti lungo tutta la superficie della Bounding Box, ma sono creati all'interno di una sfera il cui raggio non coincide con il bordo della Bounding Box.

I problemi riscontrati sono stati i seguenti.

  1. Suddividere l'intera area della Bounding Box in porzioni di Bounding Box chiamate subVoxel, in maniera tale da suddividere l'intera area tra gli n worker.
  2. Una volta eseguita la suddivisione ci siamo posti il problema di capire quanti agent dovevano essere creati da ogni singolo processore.
  3. Capito il numero di boids che dovevano essere creati da ogni singolo processore ci siamo occupati della vera e propria creazione. Modificando opportunamente il codice in modo tale che questi boids fossero creati all'interno della porzione di sfera.
  4. Abbiamo dovuto gestire accuratamente la memoria per l'allocazione di questi agent.

Nella seconda parte della tesi mi sono occupato di eseguire uno studio accurato affinché il bilanciamento del carico avvenisse fin dal primo passo di simulazione. Per poter eseguire correttamente questo bilanciamento del carico al primo step c'è stato una fase di studio per calcolare correttamente la porzione di BoundingBox da assegnare ad ogni worker in modo tale che ogni worker possa gestire un quantitativo di agenti pari ad n/k dove n è il numero di agenti totali presenti nella simulazione e k il numero di worker.

Risultati Raggiunti

Da test eseguiti in laboratorio utilizzando 4 Macchine Virtuali aventi 2GB di RAM per macchina ed ogni macchina avente 2 CPU, ed ogni CPU avente le seguenti caratteristiche:

  • Intel(R) Xeon (R) E5620 2.40Ghz 12MB Cache

Siamo arrivati a simulare 4,5 Milioni di agent con 4 worker, distribuendo al primo step di simulazione un quantitativo di agenti pari a:

  • worker #1 = 1.124.891 agenti
  • worker #2 = 1.125.102 agenti
  • worker #3 = 1.125.072 agenti
  • worker #4 = 1.124.935 agenti

Seminari

Primo Seminario 11/03/2011

Titolo del seminario :

Verso la Simulazione Massiva di Milioni d'agenti

Abstract :

In questo seminario sono stati trattati i seguenti punti:

  • Panoramica di OpenSteer
  • Architettura di DistributedSteer
  • Inizializzazione distribuita degli agent

Software

Windows XP

  • Microsoft Visual Studio 2010 Express Edition
  • Libreria OpenGL, GLUT
  • DeinoMPI 2.0.1
  • OpenSteer 0.8.2
  • Oracle VM VirtualBox 4.0.4
  • VMWare Workstation 6.0

Ubuntu 10.10

  • mpich2
  • cmake 2.8.2
  • OpenSteer 0.8.2

Riferimenti