lcs:lcs08:esercitazioni:esercitazione1
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Prossima revisione | Revisione precedente | ||
lcs:lcs08:esercitazioni:esercitazione1 [28/01/2008 alle 15:02 (17 anni fa)] – creata Susanna Pelagatti | lcs:lcs08:esercitazioni:esercitazione1 [13/02/2008 alle 17:10 (17 anni fa)] (versione attuale) – Susanna Pelagatti | ||
---|---|---|---|
Linea 1: | Linea 1: | ||
- | ====== | + | ====== |
- | In questo | + | ===== Esercizio -1: sul debugging ===== |
+ | Usare il debugger '' | ||
+ | - // | ||
+ | - //ese-gdb2.c// e' una soluzione parziale (non funzionante) dello stesso esercizio. In particolare si affronta soltanto l' | ||
- | The problem involves a simple model of population dynamics studied in ecology. This model became famous after it was presented in the Computer Recreations column of Scientific American [A. K. Dewdney, Sharks and fish wage an ecological war on the toroidal planet Wator, Scientific American, December 1984]. Wator is a toroidal (donut-shaped) planet, entirely covered by a warm ocean. The ocean is inhabited by predators (sharks) and prey (fish), and it is represented by a rectangular matrix: each element of the matrix corresponds to a location in the ocean, which can be empty, contain exactly one fish, or contain exactly one shark. Time is also subdivided in standard units, known as chronons. | + | ===== Esercizio 0: Getting started |
+ | 0.1) Compilare ed eseguire il seguente programma: | ||
+ | <code c> | ||
+ | #include <stdio.h> | ||
+ | #include <math.h> | ||
- | This is how we model the behavior of predator and prey: | + | int main (void) { |
+ | double x=3.0; | ||
- | * Sharks eat and move. At each step, a shark will look around in all the adjacent | + | printf(" |
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | salvato nel file //ff.c// con | ||
+ | < | ||
+ | gcc -Wall -pedantic ff.c | ||
+ | </ | ||
+ | Chi segnala un errore? E' fallita la fase di preprocessing, la compilazione o il linking? Cosa contine il modulo oggetto se specifico l' | ||
- | * Sharks breed and die. If a shark survives for Sb or more chronons, it will breed: if an empty adjacent cell is available, a new shark will appear there. The parent will breed again after Sb chronons. However, if a shark has not eaten after Sd chronons, it will die (disappear from the grid). | + | 0.2) Cosa accade se eliminiamo la linea |
+ | <code c> | ||
+ | #include <math.h> | ||
+ | </ | ||
+ | ? A questo punto cosa va storto? Sapete interpretare i messaggi | ||
- | * Fish move. At each step, each fish will move at random into one of the free adjacent cells, if there are any. Since Wator is toroidal, fish (and sharks) can swim out of one edge of the matrix, and come back from the opposite edge | + | 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. |
- | * Fish breed. If a fish survives for Fb chronons or more, it will breed: if an empty adjacent cell is available, | + | 0.4) Usare l' |
- | * Initial population. At the beginning of the simulation, the grid should be filled up randomly with NS sharks and NF fish. Their breeding and starving ages can all be set to zero | + | ===== Esercizio 1. Wa-Tor ===== |
- | * Random movement. Whenever a shark or fish can choose to operate (move, eat, spawn) in more than one direction, it should do so randomly | + | Wa-Tor e' un semplice modello di andamento della popolazione acquatica studiato in ecologia. |
+ | Questo modello e' diventato popolare dopo esser stato presentato | ||
+ | nella colonna //Computer Recreations// | ||
+ | Wa-tor e' un pianeta ricoperto interamente da un oceano temperato. L' | ||
+ | * puo' essere vuota | ||
+ | * puo' contenere esattamente un pesce | ||
+ | * puo' contenere esattamente uno squalo. | ||
- | 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. | + | Siccome Wator e' un pianeta rotondo le celle della prima riga (colonna) sono adiacenti alle celle dell' |
- | In this assignment, you are going to write a parallel program that implements the Wator model by subdividing | + | Il tempo e' |
+ | |||
+ | * **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. Cioe' (i-1,j), (i, | ||
+ | |||
+ | || | (i-1,j) | || | ||
+ | || | ||
+ | || | (i+1,j) | || | ||
+ | |||
+ | |||
+ | |||
+ | * **Gli squali si riproducono e 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' | ||
+ | |||
+ | |||
+ | * ** I pesci si spostano ** A ogni passo un pesce si sposta casualmente in una delle celle adiacenti. Siccome | ||
+ | |||
+ | * ** 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. | ||
+ | |||
+ | |||
+ | All' inizio della simulazione, la griglia deve essere riempita casualmente con //NS// squali e //NF// pesci. Ogni squalo (pesce) e' munito di un contatore, inizializzato a zero ed incrementato ad ogni chronon. Quando il valore del contatore raggiunge //Sb// (//Fb//) lo squalo (il pesce) si riproduce ed il contatore viene di nuovo azzerato. | ||
+ | |||
+ | Ogni volta che un pesce o uno squalo puo' scegliere di muoversi, mangiare, riprodursi, deve farlo scegliendo in maniera casuale fra le possibile alternative. | ||
+ | |||
+ | Questo modello, per quanto semplice, e' sufficiente a fornire un comportamento simile a quello che viene osservato davvero in alcune popolazioni in natura. Se c' | ||
+ | |||
+ | Si chiede di realizzare un programma C che implementi il comando '' | ||
+ | |||
+ | Si consiglia di utilizzare una matrice separata per raccogliere gli aggiornamenti e di calcolare prima gli aggiornamenti relativi agli squali. Inoltre e' preferibile rappresentare ogni matrice come array di puntatori a righe. Per la visualizzazione e' possibile usare '' | ||
+ | |||
+ | ===== Esercizio 2. Wa-Tor analizzato ===== | ||
+ | Utilizzare la funzione '' | ||
+ | |||
+ | Utilizzare l' | ||
+ | < | ||
+ | $ valgrind --show-reachable=yes --leak-check=full --leak-resolution=high -v ./wator params > watout | ||
+ | </ | ||
+ | analizzare le risposte. |
lcs/lcs08/esercitazioni/esercitazione1.1201532557.txt.gz · Ultima modifica: 28/01/2008 alle 15:02 (17 anni fa) da Susanna Pelagatti