Strumenti Utente

Strumenti Sito


lcs:lcs08:esercitazioni:esercitazione1

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
lcs:lcs08:esercitazioni:esercitazione1 [29/01/2008 alle 08:20 (18 anni fa)] Susanna Pelagattilcs:lcs08:esercitazioni:esercitazione1 [13/02/2008 alle 17:10 (18 anni fa)] (versione attuale) Susanna Pelagatti
Linea 1: Linea 1:
-====== Life and death in the ocean: fish and sharks (WATOR) ======+====== Esercitazione 1 ======
  
-Wator e' un semplice modello di andamento della popolazione acquatica studiato in ecologia.+===== Esercizio -1: sul debugging ===== 
 +Usare il debugger ''gdb'' o ''ddd'' per trovare cosa non va nei seguenti {{lcs:lcs07:esercitazioni:ese-debug.tar|programmi}} 
 +  - //ese-gdb1.c// e' una soluzione completa (non funzionante) dell'esercizio percolation (vedi [[lcs:lcs07:esercitazioni:esercitazione1]] dello scorso anno) 
 +  - //ese-gdb2.c// e' una soluzione parziale (non funzionante) dello stesso esercizio. In particolare si affronta soltanto l'allocazione e l'inizializzazione della matrice 
 + 
 +===== Esercizio 0: Getting started -- Preprocessing, compilazione e linking ===== 
 +0.1) Compilare ed eseguire il seguente programma: 
 +<code c> 
 +#include <stdio.h> 
 +#include <math.h> 
 + 
 +int main (void) { 
 +  double x=3.0; 
 + 
 +  printf("Radice = %f\n",sqrt(x)); 
 +  return 0; 
 +
 +</code> 
 +salvato nel file //ff.c// con 
 +<code> 
 +gcc -Wall -pedantic ff.c 
 +</code> 
 +Chi segnala un errore? E' fallita la fase di preprocessing, la compilazione o il linking? Cosa contine il modulo oggetto se specifico l'opzione -c? Come si risolve il problema? 
 + 
 +0.2) Cosa accade se eliminiamo la linea 
 +<code c> 
 +#include <math.h> 
 +</code> 
 +? A questo punto cosa va storto? Sapete interpretare i messaggi a video e stabilire chi li ha scritti e perche'? Viene generato l'eseguibile? 
 + 
 +0.3) Generare il modulo oggetto. Utilizzare //objdump, nm, readelf// per capire cosa contengono la tabella di rilocazione, la tabella dei simboli esportati ed esterni, le sezioni data, BSS e codice. 
 + 
 +0.4) Usare l'opzione //-E// e la //-S// del gcc: che cosa succede? Cosa accade specificando il flag -g assieme a -S? Che cosa e'  
 + 
 +===== Esercizio 1. Wa-Tor ===== 
 + 
 +Wa-Tor e' un semplice modello di andamento della popolazione acquatica studiato in ecologia.
 Questo modello e' diventato popolare dopo esser stato presentato  Questo modello e' diventato popolare dopo esser stato presentato 
 nella colonna //Computer Recreations// della rivista //Scientific American// [A. K. Dewdney, Sharks and fish wage an ecological war on the toroidal planet Wator, Scientific American, December 1984].  nella colonna //Computer Recreations// della rivista //Scientific American// [A. K. Dewdney, Sharks and fish wage an ecological war on the toroidal planet Wator, Scientific American, December 1984]. 
-Wator e' un pianeta ricoperto interamente da un oceano temperato. L'oceano e' abitato da predatori (gli squali)e prede (i pesci). Wator viene rappresentato da una matrice rettangolare. Ogni elemento della matrice rappresenta un'area dell'oceano che puo' essere in tre stati distinti+Wa-tor e' un pianeta ricoperto interamente da un oceano temperato. L'oceano e' abitato da predatori (gli squali) e prede (i pesci). Wator viene rappresentato da una matrice rettangolare. Ogni elemento della matrice rappresenta un'area dell'oceano che puo' essere in tre stati distinti
   * puo' essere vuota   * puo' essere vuota
   * puo' contenere esattamente un pesce   * puo' contenere esattamente un pesce
   * puo' contenere esattamente uno squalo.   * puo' contenere esattamente uno squalo.
  
-Il tempo e' a sua volta suddiviso in unita' standard dette //chronons//, il sistema si evolve in passi (//step//che corrispondono ad un chronon ciascuno. Ad ogni passo la matrice che rappresenta il pianeta viene aggiornata secondo il comportamento di predatori prede+Siccome Wator e' un pianeta rotondo le celle della prima riga (colonna) sono adiacenti alle celle dell'ultima riga (colonna). 
-Il comportamento di predatori prede e' il seguente:+ 
 +Il tempo e' a sua volta suddiviso in unita' standard dette //chronons//, il sistema si evolve in passi che corrispondono ad un chronon ciascuno. Ad ogni passo la matrice che rappresenta il pianeta viene aggiornata secondo le seguenti regole: 
 + 
 +    * **Gli squali mangiano e si spostano.** A ogni passo, uno squalo presente in una cella (i,j) si guarda intorno nelle celle adiacenti. Se una di queste celle contiene un pesce, lo squalo mangia il pesce e si sposta nella cella precedentemente occupata dal pesce. Se nessuna delle celle adiacenti contiene un pesce, lo squalo si sposta in una delle celle adiacenti vuote. Le celle adiacenti sono le celle in cui uno degli indici differisce esattamente di uno da i j. Cioe' (i-1,j), (i,j-1),(i,j+1), (i+1,j)Graficamente 
 + 
 +|| | (i-1,j) |     || 
 +||   (i,j-1) |   8-)  | (i,j+1) || 
 +|| | (i+1,j) |         || 
 + 
 + 
 + 
 +    * **Gli squali si riproducono muoiono** Se uno squalo sopravvive per almeno //Sb// chronon si riproduce: se e' disponibile una cella adiacente vuota questa viene occupata da un nuovo squalo. Lo squalo che si e' appena riprodotto potra' farlo di nuovo dopo altri //Sb// chronon. D'altra parte, se uno squalo no mangia per //Sd// chronon muore e scompare dalla griglia.
  
-    * **Gli squali mangiano e si spostano.** A ogni passo, uno squalo presente in una cella (i,j) si guarda intorno nelle celle adiacenti. Se una di queste celle contiene un pesce, lo squalo mangia il pesce e si sposta nella cella precedentemente occupata dal pesce. Se nessuna delle celle adiacenti contiene un pesce, lo squalo si sposta in una delle celle adiacenti vuote. Le celle adiacenti sono le celle in cui uno degli indici differisce esattamente di uno da i e j, graficamente 
  
-||  | | |  |   || +    * ** I pesci si spostano ** A ogni passo un pesce si sposta casualmente in una delle celle adiacenti. Siccome Wator e' un pianeta rotondo i pesci (e gli squali) possono nuotare verso l'esterno di un lato della matrice e risbucare dal lato opposto.
-||  | | |  |   || +
-||  |   |8-) |   || +
-||  | | |  |   || +
-||  |          |  |   ||+
  
 +    * ** I pesci si riproducono** Se un pesce sopravvive per almeno //Fb// chronon si riproduce: se e' disponibile una cella adiacente vuota questa viene occupata da un nuovo pesce. Il pesce che si e' appena riprodotto potra' farlo di nuovo dopo altri //Fb// chronon.
  
-  
-    * Sharks eat and move. At each step, a shark will look around in all the adjacent (nearest neighbor ) cells, and eat a fish if it finds one there; then the shark will move to the space previously occupied by the fish. If the shark cannot find any fish, it will move into one of the empty adjacent cells, if there any. [In a rectangular matrix, the nearest-neighbor elements are those whose first or second index (but not both) differ by exactly one. 
  
-    * Sharks breed and dieIf a shark survives for Sb or more chronons, it will breed: if an empty adjacent cell is available, a new shark will appear thereThe parent will breed again after Sb chronons. However, if a shark has not eaten after Sd chronons, it will die (disappear from the grid).+All' inizio della simulazione, la griglia deve essere riempita casualmente con //NS// squali e //NF// pesciOgni squalo (pesce) e' munito di un contatoreinizializzato zero ed incrementato ad ogni chrononQuando il valore del contatore raggiunge //Sb// (//Fb//) lo squalo (il pescesi riproduce ed il contatore viene di nuovo azzerato.
  
-    * Fish move. At each stepeach fish will move at random into one of the free adjacent cellsif there are anySince Wator is toroidal, fish (and sharks) can swim out of one edge of the matrix, and come back from the opposite edge+Ogni volta che un pesce o uno squalo puo' scegliere di muoversimangiareriprodursi, deve farlo scegliendo in maniera casuale fra le possibile alternative.
  
-    * Fish breed. If a fish survives for Fb chronons or moreit will breed: if an empty adjacent cell is available, a new fish will appear thereThe parent will breed again after Fb chronons+Questo modelloper quanto semplicee' sufficiente a fornire un comportamento simile a quello che viene osservato davvero in alcune popolazioni in natura. Se c'e' abbastanza pesce, gli squali prosperano e si riproducono finche' non raggiungono un numero troppo elevato. questo punto quasi tutto il pesce verra' divorato e iniziera' un periodo di carestia.
  
-    * Initial population. At the beginning of the simulationthe grid should be filled up randomly with NS sharks and NF fishTheir breeding and starving ages can all be set to zero+Si chiede di realizzare un programma C che implementi il comando ''wator'' che simula il comportamento del pianeta visualizzandone lo stato ad ogni chronon/ I parametri //Sd////Sb//, //Fb//, //NF//, //NS// ed il numero di righe e colonne della matrice devono essere specificabili da linea di comando.
  
-    * Random movementWhenever shark or fish can choose to operate (move, eat, spawnin more than one direction, it should do so randomly+Si consiglia di utilizzare una matrice separata per raccogliere gli aggiornamenti e di calcolare prima gli aggiornamenti relativi agli squaliInoltre e' preferibile rappresentare ogni matrice come array di puntatori righe. Per la visualizzazione e' possibile usare ''sleep()'' e ''usleep()'' per attendere fra una visualizzazione e la successiva e ''system("clear")'' per pulire lo schermo.
  
-These rules are sufficient to create a simple model of predator-prey interaction that displays a behavior similar to that observed in some populations in nature. . When there are enough fish to go around, the sharks can prosper and breed: but if the number of sharks grows too large, they will eat most of the fish and a famine will ensue.+===== Esercizio 2. Wa-Tor analizzato ===== 
 +Utilizzare la funzione ''mtrace()'' e l'utility ''mtrace'' per verificare i leak di memoria nel programma sviluppato nell'esercizio 1.
  
-In this assignmentyou are going to write a parallel program that implements the Wator model by subdividing (dynamicallyfor load-balancing purposes) the rectangular matrix that represents the ocean between the parallel processors+Utilizzare l'utility valgrind per controllare la mancata inizializazzione di variabilile scritture/letture in aree non allocatei leak di memoria e altro. Ad esempio: 
 +<code> 
 + $ valgrind --show-reachable=yes --leak-check=full --leak-resolution=high -v ./wator params > watout 
 +</code> 
 +analizzare le risposte.
lcs/lcs08/esercitazioni/esercitazione1.1201594816.txt.gz · Ultima modifica: 29/01/2008 alle 08:20 (18 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki