Μέθοδος Υλοποίησης :
|
|
|
-
Η αναφορά αναπτύχθηκε σε φύλλα html για την καλύτερη παρουσίασή της. Για αυτό και είναι προτιμότερο η ανάγνωσή της να γίνει με κάποιον γνωστό φυλλομετρητή ( π.χ. firefox, opera, safari κτλ.) Οι τρείς ζητούμενοι μέθοδοι υλοποίησης είναι προσπελάσιμες απο τα πλαινά links.
|
-
Κάθε μέθοδος αναφέρεται σε ένα ξεχωριστό αρχείο τύπου .html . Όλοι οι πηγαίοι κώδικες για την άσκηση βρίσκονται στον φάκελο source .
-
Το project , για την καλύτερη ανάπτυξή του , βασίστηκε στην φιλοσοφία του ανοικτού κώδικα. Πιστεύουμε ότι όση βοήθεια είχαμε εμείς από την μελέτη και εκτέλεση ανοικτού και ελεύθερου κώδικα που βρήκαμε στο διαδίκτυο (βλ. Σύνδεσμοι ), τόση μπορούμε να προσφέρουμε στην κοινότητα με το να δημοσιεύσουμε τον κώδικά μας υπό τους όρους της GPLv3 άδειας .
-
Σήμερα το project κάτω από το λογότυπο του " parallel_heaven " ,βρίσκεται στην 3η έκδοσή του και συγκεκριμένα στην v3.3 . To πρώτο ψηφίο της έκδοσης αναφέρεται στην μέθοδο υλοποίησης. Αυτο πρακτικά σημαίνει ότι η v1.x περιλαμβάνει την ακολουθιακή μέθοδο υλοποίησης , η v2.x την υλοποίηση με Pthreads και η v3.x την υλοποίηση με OpenMP. (Αλλά δεν σημαίνει ότι π.χ. η v3.1 με την v3.3 έχουν καινούρια/βελτιωμένη έκδοση μόνο της τρίτης υλοποίησης και όχι της πρώτης/δεύτερης.)
-
Για λόγους ενότητας και πιο σωστής ανάπτυξης του κώδικα προσπαθήσαμε να τον χωρίσουμε στα αρχεία functions.h , functions.c , main.c και defines.h . Τα δύο πρώτα παρέχουν τις δηλώσεις των συναρτήσεων (functions.h) που χρησιμοποιούμε στην main και τον κώδικά τους (functions.c) αντίστοιχα. Για την main.c έγινε προσπάθεια να μην περιλαμβάνει καμία συνάρτηση πέραν της ομόνυμης main() , κάτι το οποίο δεν ήταν δυνατόν στην πορεία. Συγκεκριμένα κάτω από την main ορίζεται ο κώδικας για την συνάρτηση thread_func , η οποία καλείται όταν δημιουργείται ένα thread στην υλοποίηση με Pthreads. (Εξηγώ το λόγο στην αντίστοιχη υλοποίηση).
-
Ο διαχωρισμός των δίαφορων υλοποιήσεων αλλά και γενικά όλου του configuration γίνεται μέσω του αρχείου defines.h . Σε αυτό μέσω σχολιασμού κάποιων γραμμών #define και μη-σχολιασμού άλλων μπορεί κάποιος να επιλέξει την μέθοδο υλοποίησης , τον αριθμό των νημάτων , την μέθοδο αποσφαλμάτωσης και πολλές άλλες επιλογές. Επομένως με αυτόν τον τρόπο υπάρχουν πολλά #ifdef-#endif blocks που αδιαφορούντε από τον προ-επεξεργαστή και δεν μεταγλωτούντε από τον μεταφραστή. Δηλαδή αν υπάρχει κάποιο define METHOD_IS_THREADS στο αρχείο defines.h τότε μόνο ο κώδικας που βρίσκεται στα αντίστοιχα #ifdef METHOD_IS_THREADS - endif θα μεταφραστεί και όχι τα υπόλοιπα εκτός αυτού.
-
Επίσης για την καλύτερη εκτέλεση του κώδικα δημιουργήθηκε ένα αρχείο Makefile , ώστε με κάποιοα rule targets να κάνουμε περισσότερα batch jobs. Οι επιλογές του Makefile φαίνονται από την εκτέλεση της εντολής "make help" σε ένα τερματικό, ένα στιγμιότυπο της οποίας παραθέτω εδώ :

-
Όπως φαίνεται από την παραπάνω εικόνα για την εκτέλεσή του project χρειάζεται μόνο η εντολή make complete που είναι και το default target (άρα και απλό make αρκεί), ενώ κατά την διάρκεια της εκτέλεσης δεσμεύει μόλις 5,1 Mb μνήμης ram χωρίς αυξομειώσεις ,καθώς η δέσμευση σχεδόν όλων των μεταβλητών γίνεται αρχικά μέ χρήση της συνάρτησης malloc. Στην τρέχουσα έκδοση (3.3) το project αποτελείται από τα αρχεία functions.h , functions.c , main.c , defines.h , heatmap.dem , input.txt , Makefile . Με την εντολή make count φαίνεται αναλυτική παρουσίσή τους :

|
|