Απόδοση και μεταφερσιμότητα

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Απόδοση

Η απόδοση του λογισμικού μπορεί να εξεταστεί ως προς: Και οι δύο παράγοντες εξαρτώνται από: Επιπλέον υπάρχουν και άλλοι παράγοντες απόδοσης όπως:

Πότε βελτιστοποιούμε

Βελτίωση της ταχύτητας ενός προγράμματος έχει αξία μόνο αν: Επίσης, υπάρχουν κατηγορίες προγραμμάτων στις οποίες συχνά δε μας ενδιαφέρει η ταχύτητα:


Χρήση επεξεργαστή κατά τη διόρθωση ενός προγράμματος


Χρήση επεξεργαστή κατά την αποκωδικοποίηση MP3


Χρήση επεξεργαστή κατά τον ορθογραφικό έλεγχο

Τα πρώτα δύο προγράμματα πιθανότατα δε θα κερδίσουν από βελτιστοποίηση.

Τρόποι βελτιστοποίησης

Βελτιστοποίηση ενός προγράμματος επιτυγχάνουμε με γενικές τεχνικές καθώς και με τεχνικές σχετικές με το πεδίο εφαρμογής του.

Γενικές τεχνικές είναι οι παρακάτω:

Τεχνικές σχετικές με το πεδίο εφαρμογής εφαρμόζονται σε τομείς όπως:

Ανάλυση κατανομής χρόνου

Βασικό στοιχείο για τη βελτίωση της απόδοσης είναι η μέτρηση του προγράμματος. Μπορούμε να μετρήσουμε:

Αποδοτικότητα των αλγορίθμων

Παράδειγμα

(Από συνέντευξη πρόσληψης στη Microsoft). Εύρεση αν υπάρχει βρόχος σε μια συνδεδεμένη λίστα (π.χ. αν έχουμε ξαναπεράσει από τον ίδιο υπάλληλο σε συναλλαγή με το δημόσιο):

Τεχνικές βελτιστοποίησης του κώδικα

Χρήση μνήμης

Η μνήμη που χρησιμοποιεί ένα πρόγραμμα χωρίζεται στις παρακάτω κατηγορίες:
Κώδικας (code)
Οι εντολές του προγράμματος, τυπικά σταθερές κατά την εκτέλεσή του.
Δεδομένα (data)
Τα δεδομένα που έχουν οριστεί στατικά μέσα στο πρόγραμμα (π.χ. αρχικές τιμές) καθώς και η δυναμική μνήμη που απαιτείται κατά τη λειτουργία του (εντολή new στη Java / C++, malloc στη C). Σε πολλά προγράμματα αυτή είναι η κατηγορία της μνήμης που μας ενδιαφέρει να βελτιστοποιήσουμε.
Στοίβα (stack)
Τοπικές μεταβλητές, κλήση συναρτήσεων ιδίως σε αναδρομικές συναρτήσεις.
Παράδειγμα χρήσης μνήμης προγράμματος (g++):
      1906  average shared memory size (κώδικας)
      9232  average unshared data size (δεδομένα)
       195  average unshared stack size (στοίβα)
Όταν ο όγκος της κύριας μνήμης του υπολογιστή δεν επαρκεί μπορεί να χρησιμοποιηθεί: Τέλος, για οικονομία στο χώρο που απαιτεί ο κώδικας των προγραμμάτων στο δίσκο, χρησιμοποιούνται συχνά μοιρασμένες βιβλιοθήκες (shared libraries) (π.χ. .DLL, .so).

Μεταφορά δεδομένων

Η μεταφορά μεγάλου όγκου δεδομένων συχνά απαιτεί σεβαστό χρόνο, ειδικά αν γίνεται από μέσα με χαμηλό εύρος ζώνης (bandwidth). Βελτίωση του χρόνου μπορούμε να έχουμε με:

Ενσωματωμένες συσκευές

Σε ενσωματωμένες συσκευές (κινητά τηλέφωνα, συσκευές αναπαραγωγής MP3, ηλεκτρονικά σημειωματάρια κ.λπ.) οι παράγοντες που έχουν σημασία για την απόδοση είναι συχνά διαφορετικοί. Μπορεί να πρέπει να λάβουμε υπόψη μας:

Τεχνικές ΣΒΔ

Σε συστήματα που βασίζονται σε σχεσιακές βάσεις δεδομένων χρησιμοποιούμε συχνά τις παρακάτω τεχνικές για αύξηση της απόδοσης:

Μεταφερσιμότητα

Η μεταφερσιμότητα ενός προγράμματος εμποδίζεται από: Ο προγραμματισμός σύμφωνα με τις παρακάτω αρχές αυξάνει τη μεταφερσιμότητα του προγράμματος:

Απομόνωση

Μερικές φορές θα πρέπει να χρησιμοποιήσετε μη μεταφέρσιμα στοιχεία. Τότε προσπαθήστε:
Τεχνικές μεταφερσιμότητας εφαρμογής με γραφική διεπαφή

Διεθνοποίηση και τοπική προσαρμογή

Στοιχεία που αφορούν τις παραπάνω ενέργειες είναι: Στο παρακάτω παράδειγμα φαίνεται η αυτόματη εμφάνιση της ημερομηνίας και ώρας σε διαφορετικές γλώσσες:
en_US
Sun 05 May 2002 03:19:46 AM EEST
de_DE
Son Mai 5 03:19:46 EEST 2002
it_IT
dom 05 mag 2002 03:19:46 EEST
af_ZA
So 05 Mei 2002 03:19:46 EEST

Βιβλιογραφία

Ασκήσεις

  1. Έχετε να επιλέξετε ανάμεσα σε αλγορίθμους που απαιτούν Υπολογίστε πόσες πράξεις θα χρειαστούν για την επεξεργασία 10, 1.000, 1.000.000, 1.000.000.000 στοιχείων και εξηγήστε ποιόν αλγόριθμο θα διαλέγατε σε κάθε περίπτωση. Εκφράστε τα παραπάνω με τη χρήση της σημειογραφίας Ο().
  2. Διαβάστε και αναλύστε πως η γλώσσα Java διευκολύνει το πρόβλημα της μεταφερσιμότητας των προγραμμάτων.
  3. Αναλύστε τις τοπικές προσαρμογές που επιτρέπει το σύστημα Microsoft Windows.