ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ"

Transcript

1 ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ Αυτοματοποιημένη ανάλυση μέγιστου εύρους bit μεταβλητών στο μεταγλωττιστή LLVM Automated bit width analysis in LLVM compiler infrastructure Διπλωματική Εργασία Χαράλαμπος Γ. Αντωνιάδης Επιβλέποντες Καθηγητές : Νικόλαος Μπέλλας Αναπληρωτής Καθηγητής Χρήστος Δ. Αντωνόπουλος Επίκουρος Καθηγητής Βόλος, Σεπτέμβριος 2011

2 ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Y, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ Αυτοματοποιημένη ανάλυση μέγιστου εύρους bit μεταβλητών στο μεταγλωττιστή LLVM Διπλωματική Εργασία Χαράλαμπος Γ. Αντωνιάδης Επιβλέποντες : Νικόλαος Μπέλλας Αναπληρωτής Καθηγητής Χρήστος Δ. Αντωνόπουλος Επίκουρος Καθηγητής Εγκπίθηκε από ηην διμελή εξεηαζηική επιηποπή ηην 06/10/ Ν. Μπέλλαρ Χ. Δ. Ανηωνόποςλορ Αναπληπωηήρ Καθηγηηήρ Επίκοςπορ Καθηγηηήρ

3 Διπλωματική Εργασία για την απόκτηση του Διπλώματος του Μηχανικού Ηλεκτρονικών Υπολογιστών, Τηλεπικοινωνιών και Δικτύων του Πανεπιστημίου Θεσσαλίας, στα πλαίσια του Προγράμματος Προπτυχιακών Σπουδών του Τμήματος Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων του Πανεπιστημίου Θεσσαλίας... Αντωνιάδης Χαράλαμπος Διπλωματούχος Μηχανικός Ηλεκτρονικών Υπολογιστών, Τηλεπικοινωνιών και Δικτύων Πανεπιστημίου Θεσσαλίας Copyright Charalampos Antoniadis, 2011 Με επιφύλαξη παντός δικαιώματος. All rights reserved. Απαγορεύεται η αντιγραφή, αποθήκευση και διανομή της παρούσας εργασίας, εξ ολοκλήρου ή τμήματος αυτής, για εμπορικό σκοπό. Επιτρέπεται η ανατύπωση, αποθήκευση και διανομή για σκοπό μη κερδοσκοπικό, εκπαιδευτικής ή ερευνητικής φύσης, υπό την προϋπόθεση να αναφέρεται η πηγή προέλευσης και να διατηρείται το παρόν μήνυμα. Ερωτήματα που αφορούν τη χρήση της εργασίας για κερδοσκοπικό σκοπό πρέπει να απευθύνονται προς τον συγγραφέα.

4

5 Στην οικογένεια & στους φίλους μου i

6 Με την περάτωση της παρούσας εργασίας, θα ήθελα να ευχαριστήσω θερμά τους επιβλέποντες της διπλωματικής εργασίας κ. Νικόλαο Μπέλλα και κ. Χρήστο Δ. Αντωνόπουλο για την εμπιστοσύνη που επέδειξαν στο πρόσωπό μου, την άριστη συνεργασία, την συνεχή καθοδήγηση και τις ουσιώδεις υποδείξεις και παρεμβάσεις, που διευκόλυναν την εκπόνηση της πτυχιακής εργασίας. Επίσης θα ήθελα να εκφράσω την εκτίμησή μου σε όλα τα παιδιά με τα οποία συνεργάστηκα όλα αυτά τα χρόνια των προπτυχιακών σπουδών μου. Ιδιαίτερα θα ήθελα να ευχαριστήσω τον διδακτορικό φοιτητή Muhsen Owaida για την συνεργασία που είχαμε στην διπλωματική μου εργασία. Τέλος, οφείλω ένα μεγάλο ευχαριστώ στην οικογένειά μου και στους φίλους μου για την αμέριστη υποστήριξη και την ανεκτίμητη βοήθεια που μου παρείχαν τόσο κατά την διάρκεια των σπουδών μου όσο και κατά την εκπόνηση της διπλωματικής εργασίας. Α Χ Β, 2011 ii

7 Περιεχόμενα Κατάλογος πινάκων Κατάλογος σχημάτων Κατάλογος Συντομογραφιών Περίληψη v vi vii viii 1 Εισαγωγή Περιγραφή του προβλήματος Σκοπός της εργασίας Διάρθρωση της διπλωματικής Εργασίας O μεταγλωττιστής LLVM Μια γρήγορη εισαγωγή στην κλασική σχεδίαση ενός μεταγγλωτιστή Επιπτώσεις της σχεδίασης αυτής Περιγραφή του LLVM Πώς υλοποιείται ο LLVM LLVM IR: μια πλήρης αναπαράσταση του κώδικα Ο LLVM: μια συλλογή βιβλιοθηκών Ένα παράδειγμα χρησιμοποιώντας τα εργαλεία του LLVM Πώς χρησιμοποιήθηκε ο LLVM Ανάλυση εύρους bits μεταβλητών Ένα παράδειγμα εξαγωγής εύρους bit Αλγόριθμοι ανάλυσης εύρους bit Πιθανές προσεγγίσεις ως προς την διάδοση της πληροφορίας Διαδίδοντας το bitwidth κάθε μεταβλητής Διατηρώντας ένα διάνυσμα από bits για κάθε μεταβλητή Διαδίδοντας το εύρος δεδομένων των μεταβλητών Διάδοση εύρους δεδομένων των μεταβλητών Ανάλυση βρόγχων Ένα παράδειγμα γραμμικής έκφρασης Πειραματική Αξιολόγηση Επίδραση Ανάλυσης στην σύνθεση υλικού iii

8 iv ΠΕΡΙΕΧΟΜΕΝΑ Μέγεθος κυκλώματος Συχνότητα ρολογιού Ενέργεια Επίλογος Μελλοντικές προεκτάσεις Παράρτημα Λεξιλόγιο όρων Αναλυτικά Αποτελέσματα Πειραμάτων Βιβλιογραφία 37

9 Κατάλογος πινάκων 5.1 Χαρακτηριστικά των benchmarks v

10 Κατάλογος σχημάτων 2.1 Τα κύρια τμήματα ενός μεταγλωττιστή 3 σταδίων Υποστήριξη πολλαπλών γλωσσών προγραμματισμού και αρχιτεκτονικών To logo της Apple για τον LLVM Η Αρχιτεκτονική του LLVM [24] Υλοποίηση του LLVM με την 3 σταδίων μέθοδο σχεδίασης Υποθετικό σύστημα XYZ χρησιμοποιώντας τον LLVM Τμήμα κώδικα από από την εφαρμογή πολυμέσων adpcm για να δείξουμε κάποια βασικά της ανάλυσης bitwidth [31] Οι 3 εναλλακτικές δομές δεδομένων για ανάλυση εύρους bits Ένα επιλεγμένο υποσύνολο συναρτήσεων μεταφοράς για την δύο κατευθύνσεων διάδοση εύρους δεδομένων Ψευδοκώδικας για τον αλγόριθμο διάδοσης εύρους δεδομένων Ψευδοκώδικας για τον αλγόριθμο ανάλυσης των if-statements Ψευδοκώδικας για τον αλγόριθμο αναγνώρισης των if statements Ψευδοκώδικας για τον αλγόριθμο εύρεσης του Basic Block στο οποίο συγκλίνουν τo True και το False path ενός if-statement Ψευδοκώδικας για τον αλγόριθμο απομόνωσης των Basic Blocks που συνιστούν το True ή το False path ενός if-statement Προς τα εμπρός και προς τα πίσω διάδοση της πληροφορίας Ψευδοκώδικας για τον αλγόριθμο ανεύρεσης των loop carried εκφράσεων Ψευδοκώδικας για τον αλγόριθμο αναγνώρισης μιας γραμμικής ακολουθίας Ψευδοκώδικας για τον αλγόριθμο υπολογισμού της τελικής τιμής μια loopcarried ακολουθίας Ψευδοκώδικας για τον αλγόριθμο ανάλυσης βρόγχων Το μέγεθος που καταλαμβάνει το κύκλωμα στην FPGA πριν και μετά την ανάλυση bitwidth Η συχνότητα χρονισμού του ρολογιού του τελικού κυκλώματος πριν και μετά την ανάλυση bitwidth Η καταναλισκόμενη ενέργεια του κυκλώματος πριν και μετά την ανάλυση bitwidth vi

11 Κατάλογος Συντομογραφιών LLVM SIMD FPGA DSP EVT SSA GCC JIT XST XPA BFS CFG PAR II LUT AST JVM Low Level Virtual Machine Single Instruction Multiple Data Field Programmable Gate Array Digital Signal Processing Extreme Value Theory Static Single Assignment GNU C Compiler Just In Time Compiler Xilinx Synthesis Tool Xilinx Power Analyzer Breadth-First-Search Control Flow Graph Place And Route Iteration Interval Look Up Tables Abstract Syntax Tree Java Virtual Machine vii

12 Περίληψη Στον προγραμματισμό εφαρμογών γίνεται εμφανές ότι ένα μεγάλο μέρος των bits των μεταβλητών που δηλώνονται σε ένα πρόγραμμα δεν χρησιμοποιούνται καθόλου κατά τη διάρκεια εκτέλεσης του προγράμματος. Κάνοντας μια ανάλυση ως προς το εύρος bit μπορεί να υπολογισθεί η ελάχιστη ποσότητα bits που χρειάζεται κάθε μεταβλητή εξασφαλίζοντας συγχρόνως τη σωστή εκτέλεση του προγράμματος και επιπλέον εξοικονομώντας πόρους συστήματος. Στην παρούσα διπλωματική εργασία παρουσιάζεται το πώς υλοποιήθηκε ανάλυση εύρους bit στον μεταγλωττιστή LLVM και παρατίθεται μια σειρά πειραματικών αποτελεσμάτων που δείχνουν την επίδραση που έχει μια τέτοιου είδους βελτιστοποίηση στη σύνθεση υλικού ως προς το μέγεθος του του τελικού κυκλώματος, τη συχνότητα του ρολογιού και την καταναλισκόμενη ισχύ. viii

13 Κεφάλαιο 1 Εισαγωγή 1.1 Περιγραφή του προβλήματος Οι πρωτοπόροι της επανάστασης των υπολογιστών όπως περιφράφει ο Steven Levy στο βιβλίο του Hackers έδιναν ιδιαίτερη προσοχή στην αποτελεσματικότερη αξιοποίηση των πόρων της αρχιτεκτονικής που διέθεταν. Σε αντίθεση οι προγραμματιστές σήμερα δεν δίνουν σημασία σε μικρές λεπτομέρειες όπως το bitwidth (π.χ 8, 16, 32, 64 )των τύπων δεδομένων στα προγράμματά τους. Για παράδειγμα 32-bit ακέραιοι χρησιμοποιούνται σε κάποια προγράμματα για να αναπαραστήσουν boolean μεταβλητές. Αυτή η αλλαγή στάσης ερμηνεύεται από το γεγονός ότι πλέον οι πόροι συστήματος προσφέρονται απλόχερα ενώ ο προγραμματιστικός χρόνος είναι πολύτιμος. Επίσης είναι γενικά δύσκολο και επισφαλές για κάποιον να υπολογίσει το bitwidth των μεταβλητών μέσα από πολλούς και συχνά δύσκολους υπολογισμούς. Η πληροφορία για το bitwidth των μεταβλητών μπορεί να χρησιμοποιηθεί σε μια γκάμα περιπτώσεων συμπεριλαμβανομένων της βελτιστοποίησης μεταγλωττιστή, ελέγχου και επαλήθευσης προγράμματος [21]. Καθώς νέες αρχιτεκτονικές εισάγουν έλεγχο σε επίπεδο υπολέξεως, όπως η υποστήριξη Single Instruction Multiple Data (SIMD) εντολών στο Instruction Set αρκέτες περιοχές μεταξύ άλλων οι εφαρμογές Multimedia και Digital Signal Processing (DSP) φαίνεται να οφελούνται από την ανάλυση bitwidth. Για παράδειγμα στο [31] παρουσιάζονται κάποια εντυπωσιακά αποτελέσματα από την σύνθεση υλικού χρησιμοποιώντας πληροφορία bitwidth. Η μεταφορά σε Field Programmable Gate Array (FPGA) της υλοποίησης hardware μετά την μεταγλώττιση οδήγησε μεταξύ άλλων σε μικρότερο κύκλωμα και μικρότερη κατανάλωση ισχύος. Γενικά μπορούμε να διακρίνουμε δύο προσεγγίσεις ανάλυσης εύρους bits: Τεχνικές στατικής ανάλυσης κατα τον χρόνο μεταγλώττισης και Τεχνικές δυναμικής ανάλυσης κατά τον χρόνο εκτέλεσης. Οι τεχνικές στατικής ανάλυσης χρησιμοποιούν μια επαναληπτική διαδικασία: διασχίζουν την ροή δεδομένων προς τα εμπρός και προς τα πίσω για να εξάγουν την πληροφορία για το bitwidth και να εντοπίσουν άχρηστα bits χρησιμοποιώντας ευρετικές τεχνικές και δεδομένα όπως loop counts, array bounds και πράξεις με masks. Στην στατική ανάλυση λαμβάνεται υπόψην η χειρότερη περίπτωση και έτσι το bitwidth που υπολογίζεται είναι μια συντηρητική λύση. Επιλέξαμε αυτόν τον τρόπο για να αναπτύξουμε το σύστημα μας. Από την άλλη μεριά οι τεχνικές δυναμικής ανάλυσης και profiling κατά τον χρόνο 1

14 1. Ε εκτέλεσης μπορεί να δόσουν αποτελέσματα που μπορεί να είναι πιο ακριβή από αυτά των στατικών τεχνικών αλλά κάποιες άλλες φορές πάλι όχι. Profiling κατα το χρόνο εκτέλεσης και μέθοδοι στατικής ανάλυσης χρησιμοποιούνται σε τέτοιου είδους τεχνικές. Αυτές οι μέθοδοι είναι περισσότερο εμπειρικές και δίνουν αρκετά καλά αποτελέσματα. Στο [27] παρουσιάζεται μια υλοποίηση αυτού του είδους χρησιμοποιώντας τη μέθοδο Extreme Value Theory (EVT) με τυχαία δειγματοληψία. Τα αποτελέσματα έδειξαν ότι η μέθοδους εκτιμά το bitwidth με αρκετά καλή ακρίβεια η οποία μάλιστα ρυθμίζεται από τον χρήστη. 1.2 Σκοπός της εργασίας Σκοπός της διπλωματικής εργασίας είναι η παρουσίαση ενός συστηματικού τρόπου ανάλυσης του εύρους bit ακεραίων μεταβλητών χρησιμοποιώντας το API του μεταγλωττιστή LLVM και η μελέτη της επίδρασης που έχει η εφαρμογή μιας τέτοιου είδους βελτιστοποίησης στη σύνθεση υλικού από κάποια γλώσσα υψηλού επιπέδου ως προς το μέγεθος, τη συχνότητα ρολογιού και την καταναλισκόμενη ισχύ του τελικού κυκλώματος. Πιο συγκεκριμένα έγινε αναγωγή του προβλήματος της ανάλυσης bitwidth στο γενικότερο πρόβλημα διάδοσης του εύρους δεδομένων. Για το σκοπό αυτό εφαρμόσθηκε δύο κατευθύνσεων διάδοση της πληροφορίας χρησιμοποιώντας ένα σύνολο προς τα πίσω και προς τα εμπρός συναρτήσεων μεταφοράς. Επίσης για την ανεύρεση του bitwidth loop-carried εκφράσεων δηλ. μεταβλητών που μεταφέρουν την τιμή τους από επανάληψη σε επανάληψη αφού πρώτα εντοπίστηκαν από αυτές όλες εκείνες που σχηματίζουν γραμμικές αριθμιτικές ακολουθίες, που είναι και οι πιο συχνές σε ένα πρόγραμμα, βρέθηκε η λύση τους σε κλειστή μορφή. Όσο αναφορά τη μελέτη της επίδρασης στην σύνθεση υλικού τα αποτελέσματα έδειξαν ότι το κύκλωμα που προέκυψε μετά την ανάλυση bitwidth ήταν μικοτερο, κατανάλωνε λιγότερη ενέργεια ενώ το ρολόι ήταν χρονισμένο σε υψηλότερη συχνότητα. 1.3 Διάρθρωση της διπλωματικής Εργασίας Το Κεφάλαιο 2 αποτελεί μια σύντομη περιγραφή του μεταγλωττιστή Low Level Virtual Machine (LLVM). Αρχικά, γίνεται μια γρήγορη εισαγωγή στην κλασική σχεδίαση ενός μεταγλωττιστή. Στη συνέχεια παρουσιάζεται η αρχιτεκτονική του LLVM, η χρήση κάποιων εργαλείων του με ένα παράδειγμα και πώς χρησιμοποιήθηκε για τον σκοπό της παρούσας εργασίας. Στo Κεφάλαιο 3 παρουσιάζεται το πρόβλημα της ανάλυσης εύρους bit μεταβλητών χρησιμοποιώντας κάποια παραδείγματα. Στο Κεφάλαιο 4 παρουσιάζονται οι ιδέες και οι αλγόριθμοι που χρησιμοποιήθηκαν στην υλοποίησή μας, ενώ στο Κεφάλαιο 5 παρουσιάζεται το πώς επηρεάζει η ανάλυση bitwidth τη σύνθεση υλικού ώς προς το μέγεθος του κυκλώματος, τη συχνότητα του ρολογιού και την καταναλισκόμενη ισχύ. Στο Κεφάλαιο 6 παρουσιάζονται τα κύρια σημεία της παρούσας εργασίας. Τέλος, στο Παράρτημα έχει προστεθεί μια λίστα με ορισμούς τεχνικών όρων που θα συναντήσει ο αναγνώστης της διπλωματικής εργασίας και παρατίθονται αναλυτικά και χωρίς επεξεργασία όλα τα αποτελέσματα από τα πειράματα που εκτελέσθηκαν. 2

15 Κεφάλαιο 2 O μεταγλωττιστής LLVM 2.1 Μια γρήγορη εισαγωγή στην κλασική σχεδίαση ενός μεταγγλωτιστή Ο πιο διαδεδομένος τρόπος σχεδίασης ενός μεταγλωττιστή είναι η αρχιτεκτονική που αποτελείται από τρεις συνιστώσες: το front end, τον optimizer και το back end (Σχήμα 2.1). To front end ελέγχει τον πηγαίο κώδικα για λεκτικά και συντακτικά λάθη και κατασκευάζει το (Αφηρημένο Συντακτικό Δέντρο Abstract Syntax Tree (AST)). Το AST μετατρέπεται προαιρετικά σε μια ενδιάμεση μορφή για την εφαρμογή βελτιστοποιήσεων. Σχήμα 2.1: Τα κύρια τμήματα ενός μεταγλωττιστή 3 σταδίων Ο optimizer είναι υπεύθυνος για την εφαρμογή όλων εκείνων των μετασχηματισμών που θα οδηγήσουν σε τάχυτερο τελικό κώδικα, π.χ. κάνοντας απαλοιφή υπολογισμών που δεν χρειάζονται, ενώ συνήθως είναι ανεξάρτητος από γλώσσες προγραμματισμού ή την πλατφόρμα στην οποία θα τρέξει τελικά το πρόγραμμα. Το back end (το οποίο είναι γνωστό και ως code generator) στην συνέχεια αναλαμβάνει να παράξει όσο το δυνατόν ποιοτικότερη assembly για την υποκείμενη αρχιτεκτονική. Συνήθως το back end περιλαμβάνει τα μέρη ενός compiler που κάνουν την επιλογή των εντολών, τη δέσμευση των καταχωρητών και τη δρομολόγηση των εντολών. Το ίδιο μοντέλο βρίσκει εφαρμογή και στη σχεδίαση μεταφραστών Just In Time Compiler (JIT). Η Java Virtual Machine (JVM) αποτελεί μια έκφραση αυτoύ του τρόπου σχεδίασης μόνο που στην περίπτωση αυτή χρησιμοποιούνται Java bytecodes σαν διεπαφή μεταξύ του front end και του optimizer. 3

16 2. O LLVM Επιπτώσεις της σχεδίασης αυτής Το βασικότερο πλεονέκτημα και ο λόγος για τον οποίο έχει επικρατήσει αυτός ο τρόπος σχεδίασης είναι η υποστήριξη πολλαπλών γλωσσών προγραμματισμού και αρχιτεκτονικών από το μεταγλωττιστή. Αμα ο optimizer δέχεται μια συγκεκριμένη μορφή αναπαράστασης του πηγαίου κώδικα και δίνει σαν αποτέλεσμα τον μετασχηματισμένο κώδικα στην ίδια μορφή αναπαράστασης, τότε μπορεί να γραφτεί ένα front end για οποιαδήποτε γλώσσα που θα μεταγλωττίζει τον πηγαίο κώδικα σε αυτή την μορφή και ένα backend για οποιαδήποτε αρχιτεκτονική στην οποία θα τρέξει το πρόγραμμα όπως φαίνεται στο σχήμα 2.2. Σχήμα 2.2: Υποστήριξη πολλαπλών γλωσσών προγραμματισμού και αρχιτεκτονικών 4 Με αυτόν τον τρόπο σχεδίασης για να υποστηρίξουμε μια νέα γλώσσα προγραμματισμού σε ένα σύστημα μεταγλώττισης αρκεί να γράψουμε μόνο το front end για αυτήν τη γλώσσα ενώ μπορούμε να κρατήσουμε τον optimizer και το back end ως έχουν. Εάν αυτά τα τμήματα δεν ήταν ξεχωριστά, τότε υποθέτοντας ότι θέλουμε να υποστηρίξουμε Μ διαφορετικές γλώσσες προγραμματισμού και Ν διαφορετικές πλατφορμές θα χρειαζόμασταν Μ*Ν μεταγλωττιστές. Ένα ακόμη πλεονέκτημα της σχεδίασης τριών σταδίων είναι ότι εξυπηρετεί ένα πιο ευρύ κοινό απ ότι εάν υποστηρίζονταν μία γλώσσα προγραμματισμού και μία πλατφόρμα. Έτσι ο optimizer γίνεται σημείο ενδιαφέροντος από περισσότερους χρήστες του compiler. Για ένα open source project αυτό σημαίνει περισσότερους ανθρώπους που μπορούν να συνεισφέρουν, και άρα περισσότερες και καλύτερες βελτιώσεις στον μεταγλωττιστή. Αυτός είναι και ο λόγος που open source compilers (όπως ο gcc) που εξυπηρετούν πολλές κοινότητες τείνουν να παράγουν καλύτερο κώδικα μηχανής από μεταγλωττιστές που χρησιμοποιούνται λιγότερο( όπως ο FreePASCAL). Αύτο βέβαια δεν συμβαίνει με τους εμπορικούς μεταγλωττιστές η ποιότητα των οποίων συμβαδίζει με το budget του project( όπως ο icc). Ενα τελευταίο σημείο υπεροχής της σχεδίασης τριών σταδίων είναι ότι γενικά χρειάζονται διαφορετικές δεξιότητες για την ανάπτυξη ενός front end από αυτές που χρειάζονται για τον optimizer και το back end. Έτσι ένας προγραμματιστής ο οποίος είναι ειδικός στην κατασκευή front ends μπορεί πιο εύκολα να βελτιστοποιήσει και να συντηρήσει αυτό το τμήμα του compliler. Το φαινόμενο αυτό είναι κάτι που συναντάται σε έκταση σε open source projects που θέλουν γενικά να μειώσουν τα εμπόδια στο να

17 2.2. Περιγραφή του LLVM Σχήμα 2.3: To logo της Apple για τον LLVM. συνεισφέρει οποιοσδήποτε οτιδήποτε μπορεί περισσότερο. 2.2 Περιγραφή του LLVM Ο LLVM αποτελεί ένα σύνολο εργαλείων μεταγλώττισης. Είναι γραμμένος σε C++ και σχεδιάστηκε κυρίως για την εφαρμογή βελτιστοποιήσεων κατά τον χρόνο μεταγλώττισης, σύνδεσης και εκτέλεσης των προγραμμάτων. Ο LLVM υποστηρίζει οποιαδήποτε γλώσσα προγραμματισμού και αυτός είναι ένας λόγος της επιτυχίας του. Διατίθενται μεγάλη ποικιλία από front ends για Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang κ.α. Το project για τον LLVM ξεκίνησε το 2000 από το Πανεπιστήμιο του Illinois at Urbana-Champaign υπό τις οδηγίες του Vikram Ade και Chris Lattner. O LLVM αναπτύχθηκε κυρίως ως ερευνητικό εργαλείο για την διερεύνηση τεχνικών δυναμικής μεταγλώττισης για στατικές και δυναμικές γλώσσες προγραμματισμού. Υπόκειται κάτω από το University of Illinois Open Source License. To 2005 η Apple Inc. προσέλαβε τον Lattner και οργάνωσε μια ομάδα για να δουλέψει πάνω στον LLVM για χρήσεις πάνω στα συστήματα ανάπτυξης της Apple [32]. Έτσι ο LLVM αποτελεί ένα ολοκληρωμένο κομμάτι από τα τελευταία εργαλεία ανάπτυξης λογισμικού της Apple για Mac OS X και ios [1]. Πώς υλοποιείται ο LLVM Σχήμα 2.4: Η Αρχιτεκτονική του LLVM [24] 5

18 2. O LLVM Σε ένα μεταγλωττιστή LLVM, το front end είναι υπεύθυνο για τον έλεγχο του πηγαίου κώδικα για λεκτικά και συντακτικά λάθη και να την μετατροπή του σε μορφή ενδιάμεσου κώδικα LLVM. Αυτός ο ενδιάμεσος κώδικας στην συνέχεια περνάει μια σειρά προαιρετικών αναλύσεων και βελτιστοποιήσεων. Ο βελτιστοποιημένος ενδιάμεσος κώδικας περνάει σαν είσοδος στον code generator, ο οποίος αναλαμβάνει να παράξει την assembly για την αρχιτεκτονική στην οποία θα τρέξει το πρόγραμμα, όπως φαίνεται στο σχήμα 2.5. Αυτή είναι μια πολύ απλή περιγραφή της υλοποίησης του LLVM που βασίζεται στην κλασική σχεδίαση τριών σταδίων και η οποία δεν αναδεικνύει πλήρως την πραγματική δύναμη και ευελιξία της αρχιτεκτονικής του LLVM. Σχήμα 2.5: Υλοποίηση του LLVM με την 3 σταδίων μέθοδο σχεδίασης 6 LLVM IR: μια πλήρης αναπαράσταση του κώδικα Ο ενδιάμεσος κώδικας του LLVM( το IR ) είναι πολύ καλά ορισμένος και αποτελεί την μοναδική διεπαφή προς τον optimizer. Αυτό σημαίνει ότι το μόνο που χρειάζεται να ξέρει κάποιος για να γράψει ένα front end, είναι τι ακριβώς είναι το IR του LLVM και πώς δουλεύει. Επίσης η assembly του LLVM μπορεί να διαβαστεί σε μορφή κειμένου. Ετσι είναι πολύ πιθανό και συνάμα πολύ λογικό να σχεδιάζονται front ends που υποστηρίζουν σαν output LLVM IR σε μορφή κειμένου. Αν και μπορεί να παραξενεύει, το γεγονός αυτό αποτελεί μια καινοτομία του LLVM και ένας από τους λόγους επιτυχίας του. Ακόμη και ο πολυ διαδεμένος και καλοσχεδιασμένος GCC compiler δεν έχει αυτήν την ιδιότητα: η ενδιάμεση αναπαράστασή του, το GIMPLE, δεν περιλαμβάνει όλη την πληροφορία για τον κώδικα από μόνη της. Το GIMPLE χρησιμοποιεί μια αναπαράσταση σε tuples για τις πράξεις στον κώδικα, αλλά εξακολουθεί να αναπαριστά τα τελούμενα εισόδου με αναφορές πίσω στο δέντρο πηγαίου κώδικα( τουλάχιστον μέχρι και τον GCC 4.5) Συνέπεια αυτού είναι οι σχεδιαστές των front ends να χρειάζεται να γνωρίζουν και να παράγουν τόσο τις δεντρικές δομές του GCC όσο και το GIMPLE. Παρόμοια προβλήματα αντιμετωπίζει και το back end του GCC. Τέλος ο GCC δεν υποστηρίζει κάποιο τρόπο για να μπορεί κάποιος να γράψει ή να διαβάσει το GIMPE (και τις αντίστοιχες δομές δεδομένων που συνθέτουν την ενδιάμεση μορφή του κώδικα) σε μορφή κειμένου. Το γεγονός αυτό έχει σαν αποτέλεσμα να είναι πολύ δύσκολο να πειραματιστεί κανείς με τον GCC.

19 2.2. Περιγραφή του LLVM Ο LLVM: μια συλλογή βιβλιοθηκών Μετά την σχεδίαση του LLVM IR η αμέσως σημαντικότερη πτυχή του LLVM είναι ο σχεδιασμός του ως ένα σύνολο βιβλιοθηκών, σε αντίθεση με τους command line compilers όπως ο gcc. Ο LLVM αποτελεί μια υποδομή, μια συλλογή από χρήσιμες τεχνολογίες μεταγλωττιστών που μπορούν να χρησιμοποιηθούν για να αντιμετωπίσουν ένα συγκεκριμένο πρόβλημα. Ενώ αποτελεί ένα από τα πιο ισχυρά στοιχεία του, ταυτόχρονα είναι και το λιγότερο κατανοητό από τα σημεία σχεδίασής του. Ας ρίξουμε μια ματιά στην σχεδίαση του optimizer με ένα παράδειγμα: διαβάζει το IR, το επεξεργάζεται και έπειτα βγάζει σαν output βελτιστοποιημένο LLVM IR το οποίο περιμένουμε ότι θα οδηγήσει σε ταχύτερο κώδικα. Στον LLVM (όπως και στους περισσότερους compilers) ο optimizer είναι οργανωμένος ως pipeline από ξεχωριστά passes βελτιστοποιήσεων, όπου το καθένα επενεργεί στην έξοδο του προηγούμενου pass της ομοχειρίας. Κοινά παραδείγματα από passes που κάνουν βελτιστοποιήσεις είναι ο inliner (που αντικαθιστά μια κλήση μια συνάρτησης με το σώμα της συνάρτησης), expression reassociation, loop invariant code motion, κ.α. Ανάλογα με το επίπεδο βελτιστοποιήσεων διαφορετικά passes εκτελούνται: για παράδειγμα με -Ο0(no optimization) o Clang, ο οποίος είναι ένα front end για γλώσσα C, δεν εκτελεί κανένα pass, με -O3 εκτελεί μια σειρά από 67 passes στο optimizer. Κάθε LLVM pass είναι γραμμένο ως μια κλάση της C++ η οποία είναι «παιδί» της κλάσης Pass. Τα περισσότερα passes είναι γραμμένα σε ένα μοναδικό.cpp αρχείο και η κλάση μεσα στην οποία γράφονται είναι ορισμένη σε ένα ανώνυμο namespace( το οποίο κάνει τον κώδικα τελείως private στο αρχείο που ορίζεται ). Για να είναι χρήσιμο το pass, ο κώδικας έξω από το αρχείο θα πρέπει να είναι σε θέση να το ανακτήσει, για αυτό το λόγο μια μοναδική συνάρτηση, αυτή που δημιουργεί το pass, γίνεται export από το αρχείο. Για να κάνουμε τα πράγματα περισσότερο συγκεκριμένα, παρακάτω παρουσιάζεται ένα απλό pass [12]. namespace { c l a s s Hello : public FunctionPass { public : // P rint out the names of functions in the LLVM IR being optimized. virtual bool runonfunction ( Function &F) { c e r r << Hello : << F. getname ( ) << \n ; return false ; } } ; } FunctionPass * createhellopass ( ) { return new Hello ( ) ; } Όπως προαναφέραμε ο LLVM optimizer παρέχει έναν αριθμό από διαφορετικά passes, καθένα από τα οποία είναι γραμμένο στο ίδιο στυλ. Αυτά τα passes μεταγλωττίζονται σε ένα ή περισσότερα object files, τα οποία γίνονται build στην συνέχεια ως αρχεία βιβλιοθηκών(τα γνωστά.a αρχεία στα Unix συστήματα). Αυτές οι βιβλιοθήκες παρέχουν την δυνατότητα εφαρμογής μια σειράς αναλύσεων και μετασχηματισμών, ενώ τα passes μεταξύ τους είναι όσο το δυνατόν πιο ανεξαρτητά το ένα με το άλλο: είναι σχεδιασμένα με το σκεπτικό να προσφέρουν το καθένα μια ολοκληρωμένη λειτουργικότητα. Ετσι αν υπάρχουν εξαρτήσεις με άλλα passes ή κάποια μορφή ανάλυσης αυτές δηλώνονται 7

20 2. O LLVM explicitly. Δοσμένης μιας σειράς από passes προς εκτέλεση, ο LLVM Pass Manager χρησιμοποιεί την πληροφορία για τις εξαρτήσεις που τα συνδέουν και αναλαμβάνει να τις ικανοποιήσει και να βελτιστοποιήσει την εκτέλεσή τους. Οι βιβλιοθήκες προσφέρουν απίστευτες δυνατότητες, αλλά δεν λύνουν στην πραγματικότητα το πρόβλημα. Το ενδιαφέρον της όλης υπόθεσης αναδεικνύεται όταν κάποιος θέλει να φτιάξει ένα καινούργιο εργαλείο που θα μπορεί να επωφεληθεί από την τεχνολογία του compiler, για παράδειγμα ένα JIT compiler για μια γλώσσα επεξεργασίας εικόνων. O κατασκευαστής του JIT compiler έχει μια σειρά από περιορισμούς στο μυαλό του: για παράδειγμα ενδέχεται η γλώσσα επεξεργασίας εικόνων να είναι υπερβολικά ευαίσθητη στην καθυστέρηση του compile time και να έχει κάποιους γλωσσικούς ιδιωματισμούς που είναι σημαντικό να απαλοιφούν για λόγους απόδοσης. Το γεγονός ότι η σχεδίαση του LLVM optimizer βασίζεται στην χρήση βιβλιοθηκών επιτρέπει στον κατασκευαστή να επιλέξει τόσο ποια από τα passes έχει νόημα να χρησιμοποιήσει, όσο και την σειρά με την οποία θα εκτελεστούν: εαν για παράδειγμα οτιδήποτε είναι ορισμένο ως μια μεγάλη συνάρτηση δεν έχει νόημα να ξοδέψουμε χρόνο για inlining. Έαν υπάρχουν ελάχιστοι pointers, δεν αξίζει να μπούμε στον κόπο να κάνουμε alias analysis και optimizations στη μνήμη. Ωστόσο, ο LLVM δεν λύνει όλα μας τα προβλήματα βελτιστοποιήσεων ως δια μαγείας! Από τη στιγμή που το υποσύστημα των passes είναι modularized και ο PassManager δεν γνωρίζει τίποτα σχετικά με την εσωρετική υλοποίηση των passes, ο κατασκευαστής είναι ελέυθερος να φτιάξει τα δικά του language-specific passes τα οποία θα καλύπτουν την ανέπαρκεια του LLVM optimizer. Το σχήμα 2.6 δείχνει ένα απλό παράδειγμα για το υποθετικό σύστημα επεξεργασίας εικόνας XYZ. Σχήμα 2.6: Υποθετικό σύστημα XYZ χρησιμοποιώντας τον LLVM 8 Αφού έχουμε επιλέξει το σύνολο των βελτιστοποιήσεων ο compiler επεξεργασίας εικόνων γίνεται build σε ένα εκτελέσιμο ή σε μια δυναμική βιβλιοθήκη. Μόνο τα optimiza-

21 2.3. Ένα παράδειγμα χρησιμοποιώντας τα εργαλεία του LLVM tion passes τα οποία εν τέλει χρησιμοποιούνται γίνονται link στην τελική εφαρμογή και όχι ολόκληρος ο LLVM Optimizer. Στο παραπάνω παράδειγμα, αφού υπάρχει αναφορά στα PassA και PassB αυτά θα γίνουν link. Επειδή το PassB χρησιμοποιεί το passd για να κάνει κάποια ανάλυση, τότε και το PassD θα γίνει link με τα άλλα δύο. Όμως, από τη στιγμή που το PassC δεν χρησιμοποιείται, ο κώδικας του δεν γίνεται link στην τελική εφαρμογή. Στο σημείο αυτό φαίνεται η δύναμη της library-based σχεδίασης του LLVM. Αυτή η προσέγγιση καλύπτει ένα πιο ευρύ κοινό, γιατί ο καθένας μπορεί να προσαρμόσει τον βαθμό βελτιστοποιήσεων ανάλογα με τις ανάγκες του. Αντίθετα, οι κλασικοί compiler optimizers είναι δομήμενοι ως μια οντότητα που είναι γενικά δύσκολο για κάποιον να τη διαχειριστεί αποδοτικά. Με τον LLVM μπορεί κάποιος να κατανοήσει το πως δουλεύουν διάφοροι optimizers χωρίς να γνωρίζει τον τρόπο λειτουργίας του όλου συστήματος βελτιστοποιήσεων. Αυτή η library-based σχεδίαση είναι και ο λόγος για τον οποίο πολλοί χρήστες παρανοούν το τί είναι τελικά ο LLVM : οι βιβλιοθήκες του LLVM έχουν πολλές δυνατότητες, αλλά δεν κάνουν στην πραγματικότητα τίποτα από μόνες τους. Εξαρτάται από το σχεδιαστή του εργαλείου μεταγλώττισης που κάνει χρήση των βιβλιοθηκών αυτών (π.χ., του Clang C compiler) το πώς θα συνδυαστούν τα διαφορετικά κομμάτια για την καλύτερη δυνατή χρήση. Αυτή η προσεκτική δόμηση είναι και ο λόγος που ο LLVM Optimizer μπορεί να χρησιμοποιηθεί για ένα τόσο ευρύ φάσμα διαφορετικών εφαρμογών σε διαφορετικά πλαίσια. Επίσης, μόνο και μόνο επειδή ο LLVM παρέχει την δυνατότητα JIT compilation,δεν σημαίνει ότι κάθε χρήστης την χρησιμοποιεί. 2.3 Ένα παράδειγμα χρησιμοποιώντας τα εργαλεία του LLVM 1.Πρώτα, δημιούργησε ένα απλό αρχείο.c και ονόμασε το hello.c 2. Έπειτα, μεταγλώττισε το αρχείο.c σε εκτελέσιμο Να σημειώσουμε ότι ο llvm-gcc έχει προκαθορισμένη συμπεριφορά ίδια με τον gcc. 9

22 2. O LLVM 3. Έπειτα μεταγλώττισε το αρχείο.c σε αρχείο LLVM bitcode Η επιλογή -emit-llvm και -c υπαγορεύει στον llvm-gcc να δημιουργήσει σαν output το LLVM bitcode(binary μορφή του LLVM IR). 4. Τρέξε το πρόγραμμα και στις δύο μορφές. Xρησιμοποίησε: και Το δεύτερο παράδειγμα δείχνει το πώς μπορεί κάποιος να καλέσει τον LLVM JIT,lli 5. Tο εργαλείο llvm-dis δείχνει τον κώδικα LLVM assembly. 6. Μεταγλώττισε το πρόγραμμα σε native assembly με το εργαλείο llc 10

23 2.4. Πώς χρησιμοποιήθηκε ο LLVM 7. Κάνε assemble το αρχείο από native assembly σε εκτελέσιμο πρόγραμμα. 8. Εκτέλεσε το εκτελέσιμο που προέκυψε παραπάνω Μπρούμε να μεταγλωττίσουμε ένα πρόγραμμα απευθείας σε native γλώσσα μηχανής με τον llvm-gcc( παραλέιποντας την επιλογή -emit-llvm ) 2.4 Πώς χρησιμοποιήθηκε ο LLVM Χρησιμοποιήθηκε ως front-end ο Clang. H μεταγλώττιση κάθε εφαρμογής γινόταν χρησιμοποιώντας την επιλογή -emit-llvm για να ληφθεί σαν output ο LLVM bitcode (LLVM IR σε binary μορφή). Η ανάλυση εύρους bit υλοποιήθηκε ως ένα pass στον LLVM. Για να γίνει κάτι τέτοιο κάναμε build την υλοποίηση της ανάλυσης bitwidth ως dynamic library(.so). Στη συνέχεια χρησιμοποιήθηκε το εργαλείο opt του LLVM παιρνώντας σαν παραμέτρους την δυναμική βιβλιοθήκη και τον LLVM bitcode από την μεταγγλώτιση με τον Clang. Το αποτέλεσμα ήταν πάλι ένα πρόγραμμα σε μορφή LLVM bitcode στο οποίο τώρα οι μεταβλητές είχαν το bitwidth όπως υπολογίστηκε μετά την ανάλυση. Οι εντολές που χρησιμοποιήθηκαν είναι: 1. Clang -O3 -emit-llvm application s name.c -c -o outputs s name.bc 2. opt -load BitWidth_Analysis.so -bitwdth < application s name.bc > output s name.bc 11

24

25 Κεφάλαιο 3 Ανάλυση εύρους bits μεταβλητών Ο στόχος της ανάλυσης εύρους bit είναι να υπολογίσει τον ελάχιστο αριθμό από bits που χρειάζεται για να αναπαρασταθεί κάθε στατική μεταβλητή στο πρόγραμμα διατηρώντας βέβαια την ορθότητα του προγράμματος. Πρόκληση στην ανάλυση εύρους bits αποτελούν οι κλήσεις σε βιβλιοθήκες, οι ρουτίνες εισόδου/εξόδου και οι βρόγχοι. Υπό την παρουσία αυτών των δομών αναγκαζόμαστε να κάνουμε συντηριτικές υποθέσεις για το bitwidth των τελούμενων. Παρ όλα αυτά κάνοντας προσεχτική στατική ανάλυση είναι πολύ πιθανό να εξάγουμε την πληροφορία για το εύρος bits. Δομές όπως πίνακες και εντολές οι οποίες εκτελούνται υπό συνθήκη παρέχουν πολύτιμες πληροφορίες για το bitwidth. Για παράδειγμα μπορεί να χρησιμοποιηθεί το μέγεθος ενός πίνακα για να βρεθεί το μέγιστο bitwidth κάποιας μεταβλητής που χρησιμοποιείται ως δείκτης θέσης σε ένα πίνακα. Άλλες προγραμματιστικές δομές όπως μάσκες με AND, διαιρέσεις, αριστερές ολισθήσεις, μετατροπές ενός τύπου δεδομένων σε άλλο και πράξεις με boolean μεταβλητές είναι επίσης πολύτιμες για την μείωση του bitwidth. 3.1 Ένα παράδειγμα εξαγωγής εύρους bit Στο παρακάτω παράδειγμα ( Σχήμα 3.1 ) θα προσπαθήσουμε να εξηγήσουμε εμπειρικά πώς μπορούμε να εξάγουμε πληροφορία για το εύρος bit από δομές του προγράμματος. Ο κώδικας του παραδείγματος είναι ένα απόσπασμα της εφαρμογής adpcm η οποία αποτελεί μια τυπική εφαρμογή πολυμέσων. Κάθε γραμμή έχει από δίπλα ένα αριθμό για να μπορούμε με ευκολία να αναφερόμαστε σε αυτή. Ας υποθέσουμε ότι δεν γνωρίζουμε την ακριβή τιμή της μεταβλητής delta στις γραμμές (1, 7, 9). Εξαιτίας όμως του γεγονότος ότι χρησιμοποιείται ως δείκτη θέσης στον πίνακα indextable ¹ γνωρίζουμε ότι η τιμή της δεν θα υπερβεί το μέγεθος του πίνακα. Οποτε αν και δεν γνωρίζουμε την ακριβή τιμή της, περιορίζοντας το εύρος τιμών που μπορεί να πάρει έχουμε γλυτώσει αρκετά bits. Με παρόμοιο τρόπο το εύρος τιμών της μεταβλητής ¹Υποθέτουμε στην ανάλυσή μας ότι το πρόγραμμα που αναλύεται δεν έχει λάθη. Αν στο πρόγραμμα συμβαίνει παραβίαση ορίων, αριθμητική υπερχείλιση ή υποχείλιση, αλλάζοντας το εύρος bit των τελούμενων μπορεί να αλλάξει η λειτουργικότητα του προγράμματος 13

26 3. Α BITS Σχήμα 3.1: Τμήμα κώδικα από από την εφαρμογή πολυμέσων adpcm για να δείξουμε κάποια βασικά της ανάλυσης bitwidth [31] index περιορίζεται μεταξύ του 0 και του 88. Η bitwise πράξη AND-mask στην γραμμή ( 7 ) υπαγορεύει ότι η τιμή της μεταβλητής outputbuffer δεν θα ξεπεράσει την τιμή 0xf0. Με παρόμοιο τρόπο μπορούμε να εξάγουμε την πληροφορία ότι η ανάθεση στην μεταβλητή outbuffer στην γραμμή 9 δεν θα ξεπεράσει την τιμή 0xff( 0x0f 0xf0 ). Τέλος γνωρίζουμε ότι η μεταβλητή bufferstep στην γραμμή ( 12 ) δεν μπορεί να λάβει άλλη τιμή εκτός από true ή false μιας και αποθηκεύει το αποτέλεσμα της boolean πράξης not(! ). 14

27 Κεφάλαιο 4 Αλγόριθμοι ανάλυσης εύρους bit 4.1 Πιθανές προσεγγίσεις ως προς την διάδοση της πληροφορίας Στο [31] παρουσιάζονται 3 διαφορετικές δομές δεδομένων για την διάδοση της αριθμητικής πληροφορίας. Στο σχήμα 4-1 απεικονίζονται υπο μορφή δικτυώματος αυτές οι 3 δομές δεδομένων. Σχήμα 4.1: Οι 3 εναλλακτικές δομές δεδομένων για ανάλυση εύρους bits. Το δικτύωμα στο (a) δείχνει τον αριθμό των bits που χρειάζεται για να αναπαρασταθεί μια μεταβλητή. Το δικτύωμα στο (b) αναπαριστά ένα διάνυσμα από bits που μπορεί να ανατεθεί σε μια μεταβλητή και το δικτύωμα στο (c) αναπαριστά το εύρος δεδομένων που μπορεί να ανατεθεί σε μια μεταβλητή Διαδίδοντας το bitwidth κάθε μεταβλητής Η λύση του σχήματος 4.1( a ) αποτελεί την πιο προφανή δομή που μπορούμε να σκεφτούμε. Αν και η συγκεκριμένη αναπαράσταση υλοποιείται πολύ εύκολα, δεν αποδίδει ακριβή αποτελέσματα σε αριθμητικές πράξεις. Εφαρμόζοντας την συνάρτηση μεταφοράς (αναλαμβάνει να μεταφέρει την πληροφορία από το δεξί στο αριστερό μέλος) της συγκεκριμένης αναπαράστασης μια αύξηση ενός 8-bit αριθμού παράγει πάντα ένα 9-bit αριθμό ως αποτέλεσμα γεγονός που όπως γνωρίζουμε δεν ισχύει πάντα. Επιπλέον μόνο τα περισσότερο σημαντικά bits είναι υποψήφια για απαλοιφή. 15

28 4. Α BIT Διατηρώντας ένα διάνυσμα από bits για κάθε μεταβλητή Η δομή που παρουσιάζεται στο Σχήμα 4.1( b ) είναι πιο περίπλοκη, απαιτώντας την σύνθεση αρκετών μικρότερων δικτυωμάτων bit [17, 29]. Αν και αυτή η αναπαράσταση επιτρέπει δυνητικά την απαλοιφή οποιουδήποτε bit από την αναπαράσταση της μεταβλητής, δεν υποστηρίζει ακριβή αριθμητική ανάλυση. Ως παράδειγμα απαλοιφής οποιουδήποτε bit ας υποθέσουμε ότι κάποια μεταβλητή λαμβάνει τιμές από το σύνολο { 010, 100, 110 }2. Μετά την ανάλυση, το διάνυσμα θα είναι [,, 0] το οποίο μας υπαγορεύει ότι μπορεί να απαλοίφθεί το λιγότερο σημαντικό (Το σύμβολο υποδηλώνει όρο αδιαφορίας). Όπως στην πρώτη δομή δεδομένων, η αριθμητική δεν είναι ακριβής γιατί η ανάλυση πρέπει να υποθέσει με συντηρητικό τρόπο ότι κάθε πρόσθεση αφήνει στο τέλος κρατούμενο. Διαδίδοντας το εύρος δεδομένων των μεταβλητών Το σχήμα 4.1 ( c ) απεικονίζει την τελευταία ιδέα αναπαράστασης. Αυτή είναι και η αναπαράσταση που αποφασίσθηκε να ακολουθηθεί από εμάς. Ένα διάστημα καλύπτει όλους τους ακεραίους από ένα κάτω όριο μέχρι ένα άνω όριο( π.χ [1..100] ή [ ] ). Επομένως το διάστημα παρακολουθεί για μια μεταβλητή το κάτω και το άνω όριο των τιμών που μπορεί να λάβει. Επειδή χρησιμοποιείται ένα μόνο διάστημα για να αναπαραστησεί όλες τις πιθανές τιμές για μια μεταβλητή, η αναπαράσταση αυτή δεν επιτρέπει την απαλοιφή των bits χαμηλότερης τάξης. Από την άλλη όμως μας επιτρέπει να υπολογίζουμε το εύρος bit αριθμητικών εκφράσεων με ακρίβεια. Μιλώντας με πιο τεχνικούς όρους αυτή η αναπαράσταση μετασχηματίζει το πρόβλημα υπολογισμού του εύρους bit στο πιο γενικό πρόβλημα διάδοσης εύρους δεδομένων. Η διάδοση εύρους δεδομένων είναι χρήσιμη στην πρόβλεψη τιμών, στην πρόβλεψη διακλαδώσεων, στη διάδοση σταθερών και στην επαλήθευση προγραμμάτων [28, 30]. Επιλέχθηκε αυτός ο τρόπος αναπαράστασης όχι μόνο γιατί είναι πιο γενικός, αλλά επείδη οι περισσότερες εφαρμογές χρησιμοποιούν αριθμητικές εκφράσεις και έτσι μπορούμε να επωφεληθούμε της ακρίβειας που μας προσφέρει αυτή η αναπαράσταση. Σε αντίθεση με την κλασική πράξη της ένωσης συνόλων, ορίζουμε την ένωση δύο διαστημάτων ( ) ως εξής: < a l, a h > < b l, b h >=< min(a l, b l ), max(a h, b h ) >. Επίσης ορίζουμε την τομή δύο διαστημάτων( ) ως εξής: < a l, a h > < b l, b h >=< max(a l, b l ), min(a h, b h ) >. Όταν τα διαστήματα δεν τέμνονται μεταξύ τους τότε η τομή τους δίνει σαν αποτέλεσμα την τιμή η οποία μπορεί να χρησιμοποιηθεί για την αναγνώριση προγραμματιστικών σφαλμάτων. Επιπλέον, στο σημείο αυτό να σημειώσουμε ότι η τιμή αναπαριστά τιμές που δεν μπορούν να προσδιοριστούν κάνοντας στατική ανάλυση ή τιμές που μπορεί να χρησιμοποιούν ολόκληρο το εύρος τιμών των ακεραίων. 4.2 Διάδοση εύρους δεδομένων των μεταβλητών Όπως αναφέρθηκε και παραπάνω, στην υλοποίησή μας επιλέχθηκε η λύση της διάδοσης του εύρους δεδομένων των μεταβλητών. Αυτά τα διαστήματα τιμών διαδίδονται τόσο κατα την ευθεία όσο και κατα την αντίθετη φορά πάνω στο γράφο ελέγχου ροής. Στο Σχήμα 4.2 φαίνεται ένα υποσύνολο των συναρτήσεων μεταφοράς για την διάδοση της πληροφορίας. 16

29 4.2. Διάδοση εύρους δεδομένων των μεταβλητών Σχήμα 4.2: Ένα επιλεγμένο υποσύνολο συναρτήσεων μεταφοράς για την δύο κατευθύνσεων διάδοση εύρους δεδομένων. Τα ενδιάμεσα αποτελέσματα στα αριστερά είναι είσοδοι στην συνάρτηση μεταφοράς δεξιά. Οι μεταβλητές στο σχήμα είναι σημειωμένες με την κατεύθυνση με την οποία υπολογίζονται. Η συνάρτηση μεταφοράς στο (a) προσθέτει δύο διαστήματα τιμών και στο (b) αφαιρεί δύο διαστήματα τιμών. Τόσο η μία όσο και η άλλη συνάρτηση μεταφοράς περιορίζουν το διάστημα τιμών του αποτελέσματος να είναι εντός του εύρους που υποστηρίζει ο τύπος δεδομένων στο οποίο δουλεύουν. Η πράξη AND-mask για προσημασμένους τύπους δεδομένων στο (c) επιστρέφει ένα εύρος δεδομένων που αντιστοιχεί στη μικρότερη από τις δύο εισόδους. Χρησιμοποιεί την συνάρτηση bitwidth η οποία επιστρέφει τον αριθμό των bits που χρειάζεται για να αναπαραστήσει το εύρος δεδομένων. Η πράξη type-casting που φαίνεται στο (d) περιορίζει το εύρος του αποτελέσματος να είναι ανάμεσα στο εύρος του μικρότερου τύπου δεδομένων. Επειδή οι μεταβλητές είναι αρχικοποιημένες στο μεγαλύτερο εύρος που μπορεί να αναπαρασταθεί από τους τύπους δεδομένων τους τα διαστήματα τιμών διαδίδονται απρόσκοπτα, ακόμη και στην περίπτωση της μετατροπής τύπων. Η συνάρτηση στο (e) εφαρμόζεται όταν γνωρίζουμε ότι μια τιμή πρέπει να είναι εντός ενός συγκεκριμένου εύρους. Ο κανόνας (f) εφαρμόζεται για να συγχωνεύσει σημεία, και ο κανόνας (g) εφαρμόζεται σε τοποθεσίες όπου το control-flow χωρίζεται. Στον κανόνα (g), βλέπουμε ότι το x b συμβαίνει όταν x a < y. Μπορούμε να χρησιμοποιήσουμε αυτήν την πληροφορία για να περιορίσουμε το εύρος του x b βασιζόμενοι στο αποτέλεσμα της σύγκρισης, x a < y 17

30 4. Α BIT Οι τιμές που διαδίδονται κατα την ευθεία φορά στο σχήμα 4.2 έχουν ένα βελάκι προς τα κάτω ( ), και αυτές που διαδίδονται κατά την αντίθετη φορά έχουν ένα βελάκι προς τα πάνω ( ). Εν γένει οι συναρτήσεις μεταφοράς παίρνουν ένα ή δύο διαστήματα σαν είσοδο και επιστρέφουν ένα μοναδικό διάστημα. Αρχικά όλες οι μεταβλητές στο Control Flow Graph (CFG) αρχικοποιούνται στο μέγιστο επιτρεπόμενο εύρος που ορίζει ο τύπος δεδομένων τους. Η διάδοση κατα την ευθεία φορά διασχίζει τον γράφο ελέγχου ροής κατά πλάτος, εφαρμόζοντας τις συναρτήσεις μεταφοράς για την ευθεία διάδοση της πληροφορίας, όπως φαίνεται και στο (σχήμα 4.3). Επειδή υπάρχει μία μόνο ανάθεση για κάθε μεταβλητή στην μορφή Static Single Assignment (SSA), μπορεί να περιορισθεί το εύρος τιμών μιας μεταβλητής αν το αποτέλεσμα της ανάθεσής της είναι μικρότερο από το μέγιστο εύρος δεδομένων του τύπου της. 1: Input: CFG 2: Output: 3: Create a queue BBq to keep Basic Blocks & a list ils to keep instructions; 4: Enqueue program s entry Basic Block; 5: Mark entry Basic Block; 6: while BBq is not empty do 7: Dequeue a BB item from BBq in BBc; 8: for all instructions instr in BBc do 9: Add instr in ils; 10: if instr is a memory address computation instruction then 11: { We have already collected all statically allocated arrays in Initialization phase } 12: if this memory address computation refers to a statically allocated array then 13: for all variables vars used as array s indices do 14: Apply Update( vars ) with array s bounds; 15: end for 16: for all instructions instr_ in ils in reverse order do 17: Apply Backwards_transfer_function( instr_ ); 18: end for 19: for all instructions instr_ in ils do 20: Apply Forwards_transfer_function( instr_ ); 21: end for 22: end if 23: else 24: Apply Forwards_transfer_function( instr ); 25: end if 26: end for 27: end while Σχήμα 4.3: Ψευδοκώδικας για τον αλγόριθμο διάδοσης εύρους δεδομένων. Για συλλέξουμε πιο ακριβή αποτελέσματα, πριν την εφαρμογή του αλγορίθμου που φαίνεται στο Σχήμα 4.3 προηγείται μια ανάλυση των δομών διακλάδωσης (Σχήμα 4.4). 18

31 4.2. Διάδοση εύρους δεδομένων των μεταβλητών 1: Input: CFG 2: Output: 3: for all Basic Blocks BB in Breadth-First-Search (BFS) order do 4: for all Instructions instr in BB do 5: if (instr is an if statement) then 6: BB_endif = Find out Basic Block where different control paths converge; 7: BBLs T = Isolate Basic Blocks from True path( BB_endif ); 8: CntrV ar T = Create a copy of if-statement control variable; 9: Substitute if-statement control variable with CntrV ar T in BBLs T list; 10: BBLs F = Isolate Basic Blocks from False path; 11: Substitute if-statement control variable with CntrV ar F in BBLs F list; 12: end if 13: end for 14: end for Σχήμα 4.4: Ψευδοκώδικας για τον αλγόριθμο ανάλυσης των if-statements. Πιο συγκεκριμένα αρχικά αναγνωρίζονται όλα τα if statements στον κώδικα (Σχήμα 4.5).Έπειτα για κάθε if statement εντοπίζεται το Basic Block στο οποίο συγκλίνουν τα διαφορετικά μονοπάτια ελέγχου (Σχήμα 4.6).Στην συνέχεια απομονώνονται όλα τα Basic Blocks από κάθε μονοπάτι (Σχήμα 4.7) και αντικαθιστόνται όλες οι χρήσεις της μεταβλητής ελέγχου της διακλάδωσης σε κάθε μονοπάτι με ένα διαφορετικό αντίγραφο. 1: { list BB keeps Basic Blocks we have already visited } 2: Input: instr Br, list BB 3: Output: 4: NumSuccessors = instr Br.getNumSuccessors(); 5: for i = 0 NumSuccessors do 6: BBc = instr Br.getSuccessor(i); 7: if (BBc resides in list BB ) then 8: Stop further processing!!! This is not an if-statement. 9: end if 10: end for 11:... Σχήμα 4.5: Ψευδοκώδικας για τον αλγόριθμο αναγνώρισης των if statements. Επίσης εφαρμόζεται ανάλυση για τα arrays που έχουν δηλωθεί και αρχικοποιηθεί στο τμήμα καθολικών δεδομένων. Σαρώνουμε όλες τις τιμές τους και εντοπίζουμε τη μικρότερη και τη μεγαλύτερη από αυτές. Έτσι όποτε φορτώνεται κάποιο στοιχείο από αυτούς τους πίνακες σε μια μεταβλητή γνωρίζουμε αυτομάτως το εύρος της. 19

32 4. Α BIT 1: { BBC 1 is the first Basic Block from the True Path of an if statement } 2: { BBC 2 is the first Basic Block from the False Path of an if statement } 3: Input: BBC 1, BBC 2 4: Output:BB endif 5: Create BBC1 list to keep Basic Blocks from True Path; 6: Create BBC2 list to keep Basic Blocks from False Path; 7: { BBC1 list and BBC2 list are empty lists} 8: while (1) do 9: if (BBC 1 is included in BBC2 list ) then 10: BB endif = BBC 1 ; 11: break; 12: end if 13: BBC1 list.insert( BBC 1 ); 14: {getterminator() returns the last instruction of a Basic Block} 15: instr T erminator = BBC1 list.getterminator(); 16: {getsuccessor(i) returns i-th Successor of current Basic Block } 17: BBC 1 = instr T erminator.getsuccessor(0); 18: {avoid Loop cases. If BBC 1 resides in BBC1 list this means that i have already seen this Basic Block and this is a back edge} 19: if (BBC 1 resides in BBC1 list ) then 20: BBC 1 = instr T erminator.getsuccessor((i + 1)%2); 21: end if 22: if (BBC 2 is included in BBC1 list ) then 23: BB endif = BBC 2 ; 24: break; 25: end if 26: BBC2 list.insert( BBC 2 ); 27: instr T erminator = BBC2 list.getterminator(); 28: BBC 2 = instr T erminator.getsuccessor(1); 29: if (BBC 2 resides in BBC2 list ) then 30: BBC 2 = instr T erminator.getsuccessor((i + 1)%2); 31: end if 32: end while Σχήμα 4.6: Ψευδοκώδικας για τον αλγόριθμο εύρεσης του Basic Block στο οποίο συγκλίνουν τo True και το False path ενός if-statement. 20 Η διάδοση κατα την ευθεία φορά επιτρέπει να αναγνωρισθεί ένας σημαντικός αριθμός από άχρηστα bits, πετυχαίνοντας μερικές φορές σχεδόν βέλτιστο αποτέλεσμα. Ωστόσο, επιπλέον ελαχιστοποίηση μπορεί να επιτευχθεί κάνοντας προς τα πίσω διάδοση της πληροφορίας. Για παράδειγμα όταν βρεθεί κάποια μεταβλητή να χρησιμοποιείται ως δείκτης θέσης σε κάποιο statically allocated array, τότε μπορεί να διαδοθεί η πληροφορία για το διάστημα αυτής την μεταβλητής, που είναι πλέον τα όρια του array, προς τα πίσω στις εντολές που έχουν χρησιμοποιήσει το προηγούμενο διάστημά της για να υπολογίσουν τα αποτελέσματά τους. Ξεκινώντας από τον κόμβο στον οποίο συμβαίνει αυτό μεταδίδεται η πληροφορία για το καινούργιο εύρος δεδομένων της μεταβλητής αυτής κατα την αντίστροφη πρώτα-κατά-πλάτος σειρά, χρησιμοποιώντας αυτή τη φορά τις συναρτήσεις μεταφοράς της προς τα πίσω διάδοσης. Αυτό συνεχίζεται μέχρι το πρώτο Basic Block. Έπειτα εφαρμόζονται εκ νέου οι συναρτήσεις μεταφοράς της προς τα εμπρός διάδοσης της πληροφορίας(σχήμα 4.8).

33 4.2. Διάδοση εύρους δεδομένων των μεταβλητών 1: { BB endif is the Basic Block where True and False Path of the if statement converge } 2: { BBC is the current BB } 3: { BBif Header is the Header of the if statement } 4: { BB list is the list of Basic Blocks conforms the True or False Path of the if-statement} 5: Algorithm: IF_BBs 6: Input: BB endif, BBC, BBif Header 7: Output:BB list 8: if (BBC == BB endif ) then 9: return; 10: else 11: BBC list.insert(bbc); 12: instr T erminator = BBC list.getterminator(); 13: NumSuccessors = instr T erminator.getnumsuccessors(); 14: for i = 0 NumSuccessors do 15: BBC temp = instr T erminator.getsuccessor(i); 16: if ((we haven t visited BBC temp ) && (BBC temp BBif Header )) then 17: IF_BBs (BB endif, BBC temp, BBif Header ); 18: end if 19: end for 20: end if Σχήμα 4.7: Ψευδοκώδικας για τον αλγόριθμο απομόνωσης των Basic Blocks που συνιστούν το True ή το False path ενός if-statement. Τα βήματα της προς τα εμπρός και προς τα πίσω διάδοσης της πληροφορίας έχουν σημειωθεί πάνω στον γράφο για να διευκολύνουν την συζήτησή μας. Τα νούμερα στο σχήμα ακολουθούν την χρονολογική σειρά των βημάτων. Τα βήματα με μαύρο αναπαριστούν την προς τα πίσω διάδοση των διαστημάτων. Χωρίς την προς τα πίσω διάδοση καταλήγουμε στα εξής διαστήματα τιμών: a0 =< INT min, INT max > a1 =< INT min + 1, INT max > a2 =< INT min + 1, 0 > a3 =< INT min + 1, INT max > c0 =< 0, INT max > Ας υποθέσουμε πως γνωρίζουμε ότι το μέγεθος του πίνακα array είναι 10 από την δήλωσή του. Μπορεί να επιτευχθεί ουσιώδης μείωση των διαστημάτων τιμών των μεταβλητών στον γράφο εφαρμόζοντας προς τα πίσω διάδοση της πληροφορίας. Χρησιμοποιείται η πληροφορία για το μέγεθος του πίνακα array για να περιορισθεί το εύρος της μεταβλητής a3 σε <0,10>. Επειτα διαδίδεται αυτή η πληροφορία προς την αντίθετη πρώτα-κατα-πλάτος κατεύθυνση χρησιμοποιώντας τις συναρτησείς μεταφοράς για την προς τα πίσω διάδοση. Στο παράδειγμά μας, μετά την διάδοση της καινούργιας τιμής του a3 προς τα πίσω καταλήγουμε στα εξής διαστήματα τιμών: 21

34 4. Α BIT Σχήμα 4.8: Προς τα εμπρός και προς τα πίσω διάδοση της πληροφορίας. Οι αριθμοί υποδηλώνουν την σειρά της αποτίμησης. Η εφαρμογή των κανόνων της προς τα εμπρός διάδοσης φαίνονται με άσπρο, ενώ οι κανόνες της προς τα πίσω διάδοσης φαίνονται με μαύρο. Χρησιμοποιούμε το μέγεθος του πίνακα array για να περιορίσουμε το εύρος κάποιων μεταβλητών. a0 =< 2, 9 > a1 =< 1, 10 > a2 =< 0, 0 > a3 =< 0, 10 > c0 =< 0, 10 > Η προς τα πίσω διάδοση μπορεί να σταματήσει αφότου το εύρος του a0 έχει καθοριστεί( βήμα 14 ). Επείδη το c0 χρησιμοποιεί το αποτέλεσμα μιας μεταβλητής που έχει αλλάξει θα πρέπει να διασχίσουμε τον γράφο κατα την ευθεία κατεύθυνση ξανά. Αφού περιορίσθεί το εύρος δεδομένων του c0 σε <0,9> θα έχουμε φτάσει σε ένα σημείο ισσοροπίας( έχουν συγκλίνει όλα τα διαστήματα τιμών στις τελικές τιμές τους ) και η ανάλυση θα έχει τελειώσει. Στο συγκεκριμένο παράδειγμα παρατηρείται ότι η διάδοση εύρους δεδομένων συμπεριλαμβάνει την διάδοση σταθερών. Για παράδειγμα μπορεί να αντικατασταθούν όλες οι εμφανίσεις της μεταβλητής a3 με την σταθερή τιμή Ανάλυση βρόγχων Η βελτιστοποίηση των εντολών ενός βρόγχου είναι ζωτικής σημασίας, γιατί αποτελλούν τις σημαντικότερες εντολές ενός προγράμματος. Παραδοσιακά οι τεχνικές ανάλυσης

35 4.3. Ανάλυση βρόγχων ροής δεδομένων ακολουθούν τις προς τα πίσω ακμές εως ότου φτάσουν σε κάποιο σημείο ισορροπίας. Αλλά υπό την παρουσία ακόμη και των πιο απλών loop-carried εκφράσεων, αυτή η τεχνική θα οδηγήσει το bitwidth στον κορεσμό. Αυτό συμβαίνει επειδή αυτή η μέθοδος δε λαμβάνει υπ όψην της τη γνώση για το σύνολο των επαναλήψεων του βρόγχου και έτσι οι μεταβλητές καταλήγουν με 32bit για μια τυπική δήλωση ενός 32bit-ου ακεραίου. Οι εφαρμογές τυπικά χρησιμοποιούν loop-carried αριθμητικές εκφράσεις, συνεπώς απαιτείται μια νέα προσέγγιση: στην δικιά μας περίπτωση εντοπίσαμε όλες τις γραμμικές αριθμητικές ακολουθίες, που είναι και οι πιο συχνές σε ένα πρόγραμμα και βρήκαμε την λύση σε κλειστή μορφή. Για να εντοπίσουμε και να βρούμε τη λύση σε κλειστή μορφή χρησιμοπoιήσαμε τις τεχνικές όπως παρουσιάζονται από τον Gerlek στο [20]. Πιο συγκεκριμένα, αρχικά εντοπίζουμε όλα τα Basic Blocks που αποτελούν loop headers. Στην αρχή κάθε τέτοιου block ο LLVM τοποθετεί συναρτήσεις φ (Κοίτα το Παράρτημα για τον ορισμό της φ) για κάθε loop-carried μεταβλητή. Στην συνέχεια για κάθε τέτοια συνάρτηση φ απομονώνουμε τις εντολές που συνθέτουν μια τέτοια έκφραση (Σχήμα 4.9). 1: { phiinstr is the point where loop-carried expression starts } 2: { LoopCarExpr list keeps the instructions conform the loop-carried expression } 3: { LSInst list keeps the instructions we have already seen. Each time we call this roitune we have to pass an empty list } 4: Algorithm: GetLoopCarriedExpr 5: Input: instr, phiinstr 6: Output:LoopCarExpr list 7: if (instr == phiinstr) then 8: return(1); 9: else 10: { getnumoperands() returns the number of Operands of instr instruction} 11: N umoperands = instr.getnumoperands(); 12: for i = 0 NumOperands do 13: Oper i = instr.getoperand(i); 14: if Oper i is NOT found in LSInst list then 15: LSInst list.insert(oper i ); 16: end if 17: if (getloopcarriedexpr(oper i, phiinstr, LoopCarExpr list, LSInst list )) then 18: LoopCarExpr list.insert(instr); 19: return(1); 20: end if 21: end for 22: return(0); 23: end if Σχήμα 4.9: Ψευδοκώδικας για τον αλγόριθμο ανεύρεσης των loop carried εκφράσεων. Επειτα ελέγχουμε εαν αυτή η έκφραση είναι γραμμική (Σχήμα 4.10). 23

36 4. Α BIT 1: { LoopCarExpr list keeps the instructions conform the loop-carried expression } 2: { LSInst list keeps the instructions we have already seen. Each time we call this roitune we have to pass an empty list } 3: Input: LoopCarExpr list 4: Output: 5: for i = 0 LoopCarExpr.size() do 6: {Check if LoopCarExpr[i] is an add instruction which uses a loop invariant as one of its operands } 7: if! (LoopCarExpr[i] is an addition with a Loop invariant) then 8: It is NOT a Linear sequence; 9: Break; 10: end if 11: end for 12:... Σχήμα 4.10: Ψευδοκώδικας για τον αλγόριθμο αναγνώρισης μιας γραμμικής ακολουθίας. Εαν ναι καλούμε τον linear solver για να βρούμε την κλειστή μορφή και υπολογίζουμε την τελική τιμή θέτοντας στη λύση τον αριθμό των επαναλήψεων του βρόγχου (Σχήμα 4.11). 1: { LoopCarExpr list keeps the instructions conform the loop-carried expression } 2: Input: LoopCarExpr list 3: Output: final value 4: inc = 0; 5: for i = 0 LoopCarExpr list.size() do 6: loop invariant = LoopCarExpr[i].getLoopInvariant(); 7: inc + = loop invariant 8: end for 9: tripcount =gettripcount( loop ); 10: final value = inc tripcount Σχήμα 4.11: Ψευδοκώδικας για τον αλγόριθμο υπολογισμού της τελικής τιμής μια loop-carried ακολουθίας. Εαν όχι εκτελούμε τον βρόγχο εφαρμόζοντας τις προς τα εμπρός συναρτησείς μεταφοράς όσες φορές υπαγορεύει ο αριθμός επαναλήψεων του βρόγχου (Σχήμα 4.12). 24

37 4.3. Ανάλυση βρόγχων 1: Input: CFG 2: Output: 3: for all Basic Blocks BB in BFS order do 4: if BB is Loop Header then 5: { SSA form places phi instructions in the begining of a Basic Block that is Loop Header to choose between initial and loop carried value } 6: for all Phi instructions in BB do 7: LCExpr list = Get instructions constitute a Loop Carried Expression 8: if LCExpr list is a linear expression then 9: Expr = Call Linear Expression Solver LSolver(LCExpr list ) 10: {GetLoopT ripcount returns the tripcount of the loop} 11: final value = Compute final value ( Expr, GetLoopT ripcount() ) 12: else 13: for i = 0 GetLoopT ripcount() do 14: Apply Forwards_transfer_function( instruction in LCExpr list ) 15: end for 16: end if 17: end for 18: end if 19: end for Σχήμα 4.12: Ψευδοκώδικας για τον αλγόριθμο ανάλυσης βρόγχων. Ένα παράδειγμα γραμμικής έκφρασης Παράδειγμα: Ας λάβουμε υπ όψην μας την μεταβλητή i του ακόλουθου βρόγχου, που φαίνεται σε μορφή SSA με την εξής ακολουθία τιμών: 1: i0 = 1 2: loop 3: i1 = ( i0,i3 ); {1, 6, 11,...} 4: i2 = i1 + 2; {3, 8, 13,...} 5:... 6: i3 = i2 + 3; {6, 11, 16,...} 7:... 8: l = t + 4 i3; {t + 24, t + 44, t + 64,...} 9: end loop Η διαδικασία αναζήτησης της loop-carried έκφρασης για αυτήν τη μεταβλητή επιστεφεί την ακολουθία εντολών i3 = i2 + 3, i2 = i1 + 2, i1 = phi(i0, i3). Ξεκινώντας από το σημείο στο οποίο ορίζεται η μεταβλητή που μεταφέρεται μεταξύ των επαναλήψεων δηλ. η i3 = i2 + 3 μπορεί να βρεθεί η αλυσίδα εντολών που συνθέτουν την έκφραση. Η συγκεκριμένη αλυσίδα εντολών κατασκευάζει μια γραμμική έκφραση γιατι αποτελείται από πράξεις πρόσθεσης με σταθερές η γενικά με loop invariants. Η φ λαμβάνει ως αρχική τιμή την τιμή 1 που έρχεται έξω από τον βρόγχο. Η πρώτη ανάθεση υποθέτει την τιμή 3( από το 1+2 ), και η δεύτερη ανάθεση υποθέτει την τιμή 6 (3+3). Η συνολική αύξηση στον κύκλο είναι 5. Επομένως η έκφραση της ακολουθίας για την φ είναι 5h + 1. Η πρώτη και η δεύτερη αποθήκευση της i έχουν τις εκφράσεις 5h + 3( 5h + 1 από την phi, συν 2) και 5h + 6( 5h + 6 συν 3 ). 25

38 4. Α BIT Η έκφραση για την μεταβλητή l δομείται από την διάδοση της i3, τον πολλαπλασιασμό με 4 και την πρόσθεση του t: 20h + t

39 Κεφάλαιο 5 Πειραματική Αξιολόγηση Στην συγκεκριμένη ενότητα παρουσιάζουμε την επίδραση της ανάλυσης εύρους bits μεταβλητών στην σύνθεση υλικού από κάποια υψηλού επιπέδου γλώσσα προγραμματισμού. Χρησιμοποιήσαμε το εργαλείο SOpenCL [25, 26] για την μεταγλώττιση ενός set εφαρμογών γραμμένων σε C σε RTL Verilog που περιγράφει την αρχιτεκτονική του συστήματος. Στη συνέχεια για τη σύνθεση της αρχιτεκτονικής σε επίπεδο πυλών χρησιμοποιήσαμε τον Xilinx Synthesis Tool (XST) synthesizer και σαν target μια Virtex-6 FPGA( XCVLX760 ). Συγκρίναμε τα κυκλώματα ως προς το μέγεθος του τελικού κυκλώματος, την συχνότητα του ρολογιού και την καταναλισκόμενη ενέργεια τόσο χωρίς όσο και υπό την παρουσία ανάλυσης εύρους bits. Το εργαλείο SOpenCL προσφέρει ένα πλήθος από configurations του τελικού κυκλώματος. Στα διαγράμματα που ακολουθούν έχουμε επιλέξει εκείνο το configuration που παρουσιάζει την καλύτερη συνολική εικόνα. Στο παράρτημα της διπλωματικής εργασίας στο κεφάλαιο 7 παρουσιάζονται αναλυτικά υπό μορφή πινάκων όλες οι μετρήσεις των πειραμάτων που κάναμε. Τα benchmarks που χρησιμοποιήθηκαν για την σύνθεση υλικού περιλαμβάνονται στο πίνακα 5.1. Είναι γενικά μικρές σε μέγεθος εφαρμογές αλλά οι περισσότερες από αυτές έχουν αρκετούς υπολογισμούς στο εσωτερικός τους γεγόνος που βοηθάει στο να δείξουμε την βελτίωση που επιφέρει η ανάλυση bitwidth. Benchmark Type Lines Description lum_interpol Multimedia 200 AVS Luma Interpolation chrom_interpol Multimedia 50 AVS Chroma Interpolation db_filter Multimedia 170 AVS Deblocking Filter jacobi Scientific 75 Jacobi Relaxation idct Multimedia 125 AVS Inverse Transform Πίνακας 5.1: Χαρακτηριστικά των benchmarks Ο AVS είναι ένας video decoder με χαρακτηριστηκά παρόμοια με τον H

40 5. Π Α 5.1 Επίδραση Ανάλυσης στην σύνθεση υλικού Μέγεθος κυκλώματος Το διάγραμμα 5.1 παρουσιάζει το κέρδος που έχουμε στο μέγεθος του κυκλώματος μετά την ανάλυση εύρους bits. Χρησιμοποιήθηκε ο αριθμός των slices για τη μέτρηση του μεγέθους του κυκλώματος χωρίς να σημαίνει ότι δεν μπορουσε να χρησιμοποιηθεί ο αριθμός των flip-flops ή των LUTs. Παρατηρούμε πως στην περίπτωση των jacobi και chrom_interpol το μέγεθος του κυκλώματος παρέμεινε το ίδιο. Αυτό εξηγείται από το πολύ μικρό μέγεθος (δηλ. πολύ λίγες πράξεις) αυτών των benchmarks που δεν μας επιτρέπει να απαλοίψουμε αρκετά bits. Στα υπόλοιπα benchmarks η βελτίωση ήταν από 25% εως 33% σε σχέση με το αρχικό κύκλωμα. H βελτίωση οφείλεται κυρίως στην λιγότερη χρήση των flip flops όπως επίσης και την μείωση του bitwidth των δρόμων δεδομένων. Σχήμα 5.1: Το μέγεθος που καταλαμβάνει το κύκλωμα στην FPGA πριν και μετά την ανάλυση bitwidth Συχνότητα ρολογιού Μετά την ανάλυση bitwidth αναμένουμε να μειωθεί το latency του critical path του κυκλώματος. Αυτό συνεπάγεται ταχύτερο χρονισμό του κυκλώματος. Το διάγραμμα 5.2 παρουσιάζει τον χρονισμό που μπόρεσε να πετύχει ο synthesizer με και χωρίς την ανάλυση εύρους bit. Παρατηρήσαμε ότι το ρολόι του κυκλώματος που προέκυψε μετά την ανάλυση bitwidth ήταν χρονισμένο σε συχνότητα 7-44% μεγαλύτερη σε σχέση με την συχνότητα του κυκλώματος που προέκυψε χωρίς ανάλυση bitwidth. 28

41 5.1. Επίδραση Ανάλυσης στην σύνθεση υλικού Σχήμα 5.2: Η συχνότητα χρονισμού του ρολογιού του τελικού κυκλώματος πριν και μετά την ανάλυση bitwidth Ενέργεια Η ισχύς ενός κυκλώματος υπολογίζεται από το τύπο P = CV 2 f όπου P είναι η ισχύς, C η συνολική χωρητικότητα των πυλών των transistor που αλλάζουν κατάσταση από 0 σε 1 και f η συχνότητα χρονισμού του κυκλώματος. Για το λόγο αυτό φροντίσαμε να μετρήσουμε την καταναλισκόμενη μέση ισχύ χρονίζοντας τα κυκλώματα που συγκρίναμε στην ίδια συχνότητα. Για την ίδια συχνότητα η τάση V παραμένει η ίδια. Οπότε η μόνη ελεύθερη παράμετρος μένει η συνολική χωρητικότητα που οδηγούν οι πύλες που κάνουν switch από 0 σε 1. Για το σκοπό αυτό χρησιμοποιήσαμε το εργαλείο Xilinx Power Analyzer (XPA). Το διάγραμμα 5.3 παρουσιάζει την εξοικόνομηση ενέργειας που πετύχαμε εφαρμόζοντας bitwidth analysis. Παρατηρούμε ότι η εφαρμογή jacobi δεν παρουσιάζει ενεργειακή βελτίωση για το ίδιο λόγο που αναφέραμε και παραπάνω επείδη δηλαδή είναι πολύ μικρή εφαρμογή και δεν αφήνει πολλά περιθώρια βελτίωσης του bitwidth των μεταβλητών. Σε γένικές γραμμές πάντως τα κυκλώματα που προέκυψαν μέτα την ανάλυση έυρους bit κατανάλωναν κατά 14-33,33% λιγότερη ισχύ σε σχέση με αυτά χώρις bitwidth analysis. 29

42 5. Π Α Σχήμα 5.3: Η καταναλισκόμενη ενέργεια του κυκλώματος πριν και μετά την ανάλυση bitwidth 30

43 Κεφάλαιο 6 Επίλογος Στην συγκεκριμένη εργασία παρουσιάσαμε ένα συστηματικό τρόπο ανάλυσης του εύρους bit των ακεραίων μεταβλητών. Πιο συγκεκριμένα ανάγαμε το πρόβλημα ανάλυσης του bitwidth στο γενικότερο πρόβλημα διάδοσης του εύρους δεδομένων. Για το σκοπό αυτό εφαρμόσαμε δύο κατευθύνσεων διάδοση της πληροφορίας χρησιμοποιώντας ένα σύνολο προς τα πίσω και προς τα εμπρός συναρτήσεων μεταφοράς. Επίσης για να βρούμε το bitwidth loop-carried εκφράσεων δηλ. μεταβλητών που μεταφέρουν την τιμή τους από επανάληψη σε επανάληψη αυτό που κάναμε ήταν να εντοπίσουμε από αυτές όλες εκείνες που σχηματίζουν γραμμικές αριθμιτικές ακολουθίες, που είναι και οι πιο συχνές σε ένα πρόγραμμα και να βρούμε την λύση σε κλειστή μορφή. Τέλος δείξαμε το πώς μπορούμε να επωφεληθούμε από την ανάλυση bitwidth στην σύνθεση υλικού από κάποια γλώσσα υψηλού επιπέδου ως πρός τον χώρο, την συχνότητα ρολογιού και την καταναλισκόμενη ενέργεια του τελικού κυκλώματος. 6.1 Μελλοντικές προεκτάσεις Πιθανές προεκτάσεις στην παρούσα εργασία θα μπορούσαν να ναι: Μελέτη της ακρίβειας μεταβλητών κινητής υποδιαστολής. Υποστήριξη επιπλέον loop-carried εκφράσεων (πολυωνυμικών, γεωμετρικών,κτλ.). Υποστήριξη ανάλυσης pointer μεταβλητών. 31

44

45 Κεφάλαιο 7 Παράρτημα 7.1 Λεξιλόγιο όρων φ: φ-function is placed whenever two different definitions of a variable arrive in a program point [7]. Basic Block: A basic block is a sequence of consecutive intermediate language statements in which flow of control can only enter at the beginning and leave at the end [15]. Induction variable: In computer science, an induction variable is a variable that gets increased or decreased by a fixed amount on every iteration of a loop, or is a linear function of another induction variable [5]. Front end: The front end analyzes the source code to build an internal representation of the program, called the intermediate representation or IR. It also manages the symbol table, a data structure mapping each symbol in the source code to associated information such as location, type and scope [3]. SSA: In compiler design, static single assignment form (often abbreviated as SSA form or simply SSA) is a property of an intermediate representation (IR), which says that each variable is assigned exactly once. [7] CFG: A CFG in computer science is a representation, using graph notation, of all paths that might be traversed through a program during its execution. [4] BFS: In graph theory, breadth-first search (BFS) is a graph search algorithm that begins at the root node and explores all the neighboring nodes. Then for each of those nearest nodes, it explores their unexplored neighbor nodes, and so on, until it finds the goal. [2] critical path: Critical path is the slowest path in the circuit. [14] 33

46 7. Π 7.2 Αναλυτικά Αποτελέσματα Πειραμάτων Σε αυτήν την ενότητα του παραρτήματος παρουσιάζονται αναλυτικά και πριν από οποιαδήποτε στατιστική επεξεργασία τα αποτελέσματα που πήραμε από την εκτέλεση των πειραμάτων που αναφέραμε στο κεφάλαιο 5. Πιο συγκεκριμένα σε κάθε benchmark και για κάθε configuration που δοκιμάσαμε C A, C B, C C παραθέτουμε πληροφορίες για το πλήθος των Slices, Look Up Tables (LUT) & flip-flops, την συχνότητα ρολογιού, την καταναλισκόμενη ισχύ, το Iteration Interval (II) ¹ και το πλήθος των IO pins τόσο χωρίς όσο και με ανάλυση bitwidth. Τα configuration έχουν να κάνουν με το πόσα resources δίνονται στην υλοποίηση hardware για την εκμετάλευση του παραλληλισμού. Ετσι όσα περισσότερα resources δίνονται σε μια υλοποίηση τόσο μεγαλύτερο κύκλωμα προκύπτει και τόσο περισσότερος είναι ο διαθέσιμος παραλληλισμός. Για τα C A, C B, C C ισχύεί για τον αριθμό των resources R CC > R CB > R CA Να σημειώσουμε ότι ο λόγος που προσθέσαμε το πλήθος των IO pins είναι για να τονίσουμε το βαθμό ελευθερίας που έχει το εργαλείο που κάνει Place And Route (PAR) και την επίδραση που έχει το γεγονός αυτό στο μέγεθος και την ισχύ του κυκλώματος. Όσο λιγότερα pins τόσο μεγαλύτερη είναι η ελευθερία που έχει το εργαλείο και τόσο πιο μη αναμενόμενα τα αποτελέσματα που περιμένουμε. Για το λόγο αυτό στις περιπτώσεις που υπάρχουν λιγοστά IΟ pins καναμέ synthesis και PAR για όλη την αρχιτεκτονική που παράγει το εργαλείο SOpenCL [25, 26] και όχι μόνο για το τμήμα της αρχιτεκτονικής που επηρεάζει η ανάλυση bitwidth (datapath). ¹ Το ΙΙ είναι ένας δείκτης παραλληλισμού ο οποίος όσο μικρότερος είναι τόσο μεγαλύτερος είναι ο παραλληλισμός στο κύκλωμα. Σε αυτή την περίπτωση αναμένουμε το κύκλωμα να εκτελείται σε λιγότερους κύκλους. 34

47 7.2. Αναλυτικά Αποτελέσματα Πειραμάτων 35

48 7. Π 36

Αναπτύσσοντας developer tools στην Αpple. Αργύριος Κυρτζίδης Προπτυχιακός φοιτητής ΗΜΜΥ

Αναπτύσσοντας developer tools στην Αpple. Αργύριος Κυρτζίδης Προπτυχιακός φοιτητής ΗΜΜΥ Αναπτύσσοντας developer tools στην Αpple Αργύριος Κυρτζίδης Προπτυχιακός φοιτητής ΗΜΜΥ Apple Inc. Apple Inc. Από τις μεγαλύτερες τεχνολογικές εταιρίες Apple Inc. Από τις μεγαλύτερες τεχνολογικές εταιρίες

Διαβάστε περισσότερα

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δρ. Κόννης Γιώργος Πανεπιστήμιο Κύπρου - Τμήμα Πληροφορικής Προγραμματισμός Στόχοι 1 Να περιγράψουμε τις έννοιες του Υπολογιστικού Προβλήματος και του Προγράμματος/Αλγορίθμου

Διαβάστε περισσότερα

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ 5.1 Εισαγωγή στους αλγορίθμους 5.1.1 Εισαγωγή και ορισμοί Αλγόριθμος (algorithm) είναι ένα πεπερασμένο σύνολο εντολών οι οποίες εκτελούν κάποιο ιδιαίτερο έργο. Κάθε αλγόριθμος

Διαβάστε περισσότερα

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προβλήματα, αλγόριθμοι, ψευδοκώδικας Προβλήματα, αλγόριθμοι, ψευδοκώδικας October 11, 2011 Στο μάθημα Αλγοριθμική και Δομές Δεδομένων θα ασχοληθούμε με ένα μέρος της διαδικασίας επίλυσης υπολογιστικών προβλημάτων. Συγκεκριμένα θα δούμε τι

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object

Διαβάστε περισσότερα

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Εισαγωγή. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Μεταγλωττιστές. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Εισαγωγή. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Μεταγλωττιστές Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Βιβλιογραφία Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman. Compilers:

Διαβάστε περισσότερα

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Α. ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΦΥΛΛΑΔΙΟ 6 ο ( Ενότητες 2.3 ) 1.Τι είναι πρόγραμμα; 2. Ποια είναι τα πλεονεκτήματα των γλωσσών υψηλού επιπέδου σε σχέση με τις γλώσσες

Διαβάστε περισσότερα

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 3 η : Ενδιάμεση Αναπαράσταση/ SSA Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Ενδιάμεση Αναπαράσταση (IR) Η ενδιάμεση αναπαράσταση

Διαβάστε περισσότερα

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 3 η : Ενδιάμεση Αναπαράσταση / SSA Ενδιάμεση Αναπαράσταση (IR) Η ενδιάμεση αναπαράσταση αποθηκεύει τη συγκεντρωμένη πληροφορία από την ανάλυση ενός προγράμματος Από την ενδιάμεση

Διαβάστε περισσότερα

Εισαγωγή στην Αριθμητική Ανάλυση

Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB ΔΙΔΑΣΚΩΝ: ΓΕΩΡΓΙΟΣ ΑΚΡΙΒΗΣ ΒΟΗΘΟΙ: ΔΗΜΗΤΡΙΑΔΗΣ ΣΩΚΡΑΤΗΣ, ΣΚΟΡΔΑ ΕΛΕΝΗ E-MAIL: SDIMITRIADIS@CS.UOI.GR, ESKORDA@CS.UOI.GR Τι είναι Matlab Είναι ένα περιβάλλον

Διαβάστε περισσότερα

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Εισαγωγή Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Μεταγλωττιστής Αρχικό πρόγραμμα (source program) Μεταγλωττιστής Τελικό πρόγραμμα (object program) Διαγνωστικά μηνύματα Μεταγλωττιστής Παίρνει σαν

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

ΑΕΠΠ Ερωτήσεις θεωρίας

ΑΕΠΠ Ερωτήσεις θεωρίας ΑΕΠΠ Ερωτήσεις θεωρίας Κεφάλαιο 1 1. Τα δεδομένα μπορούν να παρέχουν πληροφορίες όταν υποβάλλονται σε 2. Το πρόβλημα μεγιστοποίησης των κερδών μιας επιχείρησης είναι πρόβλημα 3. Για την επίλυση ενός προβλήματος

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II Strings Η κλάση String είναι προκαθορισμένη κλάση της Java που μας επιτρέπει να χειριζόμαστε αλφαριθμητικά. Ο τελεστής + μας επιτρέπει

Διαβάστε περισσότερα

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Τ.Ε.Ι ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΟΙΚΗΣΗΣ Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας Πτυχιακή εργασία του φοιτητή Γιαννακίδη Αποστόλη Επιβλέπων καθηγητής Τσούλος

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Διάλεξη 2η: Αλγόριθμοι και Προγράμματα Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα

Διαβάστε περισσότερα

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

Διαβάστε περισσότερα

Ψευδοκώδικας. November 7, 2011

Ψευδοκώδικας. November 7, 2011 Ψευδοκώδικας November 7, 2011 Οι γλώσσες τύπου ψευδοκώδικα είναι ένας τρόπος περιγραφής αλγορίθμων. Δεν υπάρχει κανένας τυπικός ορισμός της έννοιας του ψευδοκώδικα όμως είναι κοινός τόπος ότι οποιαδήποτε

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java Είσοδος Χρησιμοποιούμε την κλάση Scanner της Java import java.util.scanner; Αρχικοποιείται με το ρεύμα εισόδου: Scanner in = new Scanner(System.in);

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

Διαβάστε περισσότερα

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού Προπτυχιακό μάθημα Αρχές Γλωσσών Προγραμματισμού Π. Ροντογιάννης 1 Μεταγλωττιστής Πρόγραμμα Διαβάζει προγράμματα δεδομένης γλώσσας (πηγαία γλώσσα) και τα μετατρέπει

Διαβάστε περισσότερα

Δομές Δεδομένων & Αλγόριθμοι

Δομές Δεδομένων & Αλγόριθμοι Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές

Διαβάστε περισσότερα

Μεταγλωττιστές Βελτιστοποίηση

Μεταγλωττιστές Βελτιστοποίηση Μεταγλωττιστές Βελτιστοποίηση Νίκος Παπασπύρου nickie@softlab.ntua.gr Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχ. Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Πολυτεχνειούπολη, 15780

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and alpha Language (1/5) ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language Στην alpha δεν υπάρχει main() συνάρτηση, ο κώδικας ξεκινάει την εκτέλεση από την αρχή του

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη

Διαβάστε περισσότερα

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Κώδικας μηχανής (E) Ο επεξεργαστής μπορεί να εκτελέσει το αρχιτεκτονικό σύνολο εντολών (instruction set architecture) Οι

Διαβάστε περισσότερα

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη

Διαβάστε περισσότερα

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC Πλεονεκτήματα MPSoC Είναι ευκολότερο να σχεδιαστούν πολλαπλοί πυρήνες επεξεργαστών από τον σχεδιασμό ενός ισχυρότερου και πολύ πιο σύνθετου μονού επεξεργαστή.

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y»

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y» ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΠΡΩΤΗ ΠΡΟΟΔΟΣ ΣΤΗΝ «ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Y» Σάββατο, 31 Οκτωβρίου 2015 ΔΙΑΡΚΕΙΑ ΔΙΑΓΩΝΙΣΜΑΤΟΣ 150 ΛΕΠΤΑ ΘΕΜΑ 1.

Διαβάστε περισσότερα

Δομή Ηλεκτρονικού υπολογιστή

Δομή Ηλεκτρονικού υπολογιστή Δομή Ηλεκτρονικού υπολογιστή Η κλασσική δομή του μοντέλου που πρότεινε το 1948 ο Von Neumann Κεντρική Μονάδα Επεξεργασίας Είσοδος Αποθήκη Αποθήκη - Έξοδος Εντολών Δεδομένων Κλασσικό μοντέλο Von Neumann

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή Αντίρριο, 05/04/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» To δεύτερο μέρος της εργασίας έχει ως στόχο την ανάπτυξη του συντακτικού αναλυτή με χρήση του bison / byacc. Στο

Διαβάστε περισσότερα

Αντικειµενοστρεφής Προγραµµατισµός

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό Μάριος Αραποστάθης Καθηγητής πληροφορικής Βαρβάκειου Λύκειου http://users.sch.gr/mariosarapostathis 6.1 Η έννοια του

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα για τη γλώσσα C: τον gcc μεταγλωττιστή της C σε περιβάλλον

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ Θέμα Α ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ 2016-2017 Πάτρα 3/5/2017 Ονοματεπώνυμο:.. Α1. Να γράψετε στην κόλλα σας τον αριθμό

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 1ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Ορισμός Wikipedia.org 2 Δομημένος προγραμματισμός (structured programming) ή διαδικαστικός προγραμματισμός (procedural

Διαβάστε περισσότερα

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές» Η εργασία έχει ως στόχο τον σχεδιασμό και την υλοποίηση ενός μεταγλωττιστή για την γλώσσα Ciscal, χρησιμοποιώντας

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Python scripts Ένα πρόγραμμα στην Python (συχνά αποκαλείται script) αποτελείται από μία ακολουθία ορισμών και εντολών. H ακολουθία των ορισμών και

Διαβάστε περισσότερα

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Ταχύτητα εκτέλεσης Χρόνος εκτέλεσης = (αριθμός εντολών που εκτελούνται) Τί έχει σημασία: Χ (χρόνος εκτέλεσης εντολής) Αριθμός

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 3ο: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΜΕΡΟΣ 2 ο : ΣΤΟΙΒΑ & ΟΥΡΑ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ ΣΤΟΙΒΑ 2 Μια στοίβα

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες

Διαβάστε περισσότερα

Προγραµµατισµός Η/Υ. Μέρος2

Προγραµµατισµός Η/Υ. Μέρος2 Προγραµµατισµός Η/Υ Μέρος2 Περιεχόμενα Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής Αλγόριθμος Ψευδοκώδικας Παραδείγματα Αλγορίθμων Γλώσσες προγραμματισμού 2 Επανάληψη Βασικών Σύμβολων Διαγραμμάτων Ροής

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Μεταφραστές Εισαγωγή Διδάσκων: Επικ. Καθ. Γεώργιος Μανής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα της γλώσσας C, το Dev-C++, το οποίο είναι εφαρμογή που τρέχει

Διαβάστε περισσότερα

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Σύντομες εισαγωγικές σημειώσεις για την. Matlab Σύντομες εισαγωγικές σημειώσεις για την Matlab Δήλωση Μεταβλητών Για να εισάγει κανείς δεδομένα στη Matlab υπάρχουν πολλοί τρόποι. Ο πιο απλός είναι στη γραμμή εντολών να εισάγουμε αυτό που θέλουμε και

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

3 ο Εργαστήριο Μεταβλητές, Τελεστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

Διαβάστε περισσότερα

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι Μεταγλωττιστές Εργαστήριο 9 Σημασιολογική Ανάλυση Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι 2016-2017 Σύνταξη και Σημασιολογία Σε οποιαδήποτε γλώσσα (προγραμματισμού ή μη) υπάρχουν δύο βασικές

Διαβάστε περισσότερα

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο Εισαγωγή στο Bison Μεταγλωττιστές, Χειμερινό εξάμηνο 2016-2017 Συντακτική Ανάλυση Αποτελεί την δεύτερη φάση της μετάφρασης. Εύρεση της σχέσης που υπάρχει των λεκτικών μονάδων ενός προγράμματος. Παράδειγμα

Διαβάστε περισσότερα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος. 1. Δώστε τον ορισμό του προβλήματος. 2. Σι εννοούμε με τον όρο επίλυση ενός προβλήματος; 3. Σο πρόβλημα του 2000. 4. Σι εννοούμε με τον όρο κατανόηση προβλήματος; 5. Σι ονομάζουμε χώρο προβλήματος; 6.

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Καθηγητής Πληροφορικής ΠΕ19 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 6 ο : ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ Η έννοια του προγράμματος

Διαβάστε περισσότερα

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1 ΚΕΦΑΛΑΙΟ 7 ο ΠΡΟΓΡΑΜΜΑ : Το πρόγραμμα αποτελείται από μια σειρά οδηγιών, που ονομάζονται εντολές, για την εκτέλεση τέτοιου είδους πράξεων, καθώς επίσης και από ένα σύνολο πρόσθετων οδηγιών ελέγχου, που

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33 ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος του συγγραφέα... 13 Πρόλογος του καθηγητή Τιμολέοντα Σελλή... 15 ΚΕΦΑΛΑΙΟ 1: Εργαλεία γλωσσών προγραμματισμού...17 1.1 Γλώσσες προγραμματισμού τρίτης γεννεάς... 18 τι είναι η γλώσσα

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Β Μέρος Δομή Ελέγχου if-elif-else Επαναληπτική Δομή Ελέγχου while Επαναληπτική Δομή Ελέγχου for Αλληλεπίδραση χρήστη-προγράμματος Συναρτήσεις Η δομή

Διαβάστε περισσότερα

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή. ΑΕσΠΠ-Κεφ6. Εισαγωγή στον προγραμματισμό 1 ΣΩΣΤΟ ΛΑΘΟΣ 1. Οι γλώσσες προγραμματισμού αναπτυχθήκαν με σκοπό την επικοινωνία ανθρώπου μηχανής. 2. Αλγόριθμος = Πρόγραμμα + Δομές Δεδομένων 3. Ένα πρόγραμμα

Διαβάστε περισσότερα

Μεταγλωττιστές Βελτιστοποίηση

Μεταγλωττιστές Βελτιστοποίηση Βελτιστοποίηση (i) Μεταγλωττιστές Βελτιστοποίηση Νίκος Παπασπύρου nickie@softlab.ntua.gr Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχ. Υπολογιστών Εργαστήριο Τεχνολογίας Λογισμικού Πολυτεχνειούπολη,

Διαβάστε περισσότερα

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 7 η : Περιοχές: Εναλλακτική Μέθοδος Ανάλυσης Ροής Δεδομένων Περιοχές (Regions) Σε κάποιες περιπτώσεις βρόχων η ανάλυση ροής δεδομένων με τον επαναληπτικό αλγόριθμο συγκλίνει αργά

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

Εργαστήριο 2. Εαρινό Εξάμηνο Εντολές για είσοδο ακεραίων αριθμών από την κονσόλα:

Εργαστήριο 2. Εαρινό Εξάμηνο Εντολές για είσοδο ακεραίων αριθμών από την κονσόλα: Τομέας Υλικού και Αρχιτεκτονικής Υπολογιστών ΗΥ134 - Εισαγωγή στην Οργάνωση και Σχεδίαση Η/Υ 1 Εργαστήριο 2 Εαρινό Εξάμηνο 2012-2013 Στό χόι τόυ εργαστηρι όυ Εντολές εισόδου-εξόδου Χρήση συνθηκών σε δομές

Διαβάστε περισσότερα

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό 1 Εισαγωγή Σκεφτείτε έναν αριθμό από το 1 έως το 1000 και απαντήστε στην ερώτηση: Ο αριθμός που σκεφτήκατε είναι μεγαλύτερος

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Εισαγωγή Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Βιβλιογραφία "C Προγραμματισμός", Deitel & Deitel, Πέμπτη Έκδοση, Εκδόσεις

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.

Διαβάστε περισσότερα

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Τρίτη (3 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. Τρίτη (3 η ) δίωρη διάλεξη. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή Τρίτη (3 η ) δίωρη διάλεξη. Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο

Διαβάστε περισσότερα

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών Εισαγωγή στη γλώσσα προγραμματισμού JAVA Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών Το πρώτο φλιτζάνι Java Λίστα με τα απαραίτητα Το πρώτο μου πρόγραμμα(hello World) Συνεχίζοντας

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος 2001-2002 ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2 «Προγραμματισμός Η/Υ» - Τετράδιο Εργαστηρίου #2 2 Γενικά Στο Εργαστήριο αυτό θα αναλύσουμε τη χρήση της βασικής εντολής ελέγχου ροής

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

Computing. Νοέμβριος Έκδοση 1.0

Computing. Νοέμβριος Έκδοση 1.0 Computing Νοέμβριος 2017 Έκδοση 1.0 Ενότητα Computing Αυτή η ενότητα παραθέτει τις βασικές έννοιες και δεξιότητες που σχετίζονται με την ικανότητα χρήσης υπολογιστικής σκέψης (computational thinking) και

Διαβάστε περισσότερα

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

Διαβάστε περισσότερα

Κεφ. 1: Εισαγωγή στην έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος

Κεφ. 1: Εισαγωγή στην έννοια του Αλγορίθμου και στον Προγραμματισμό. Η έννοια του προβλήματος Η έννοια του προβλήματος 1. Αναφέρετε μερικά από τα προβλήματα που συναντάτε στην καθημερινότητά σας. Απλά προβλήματα Ποιο δρόμο θα ακολουθήσω για να πάω στο σχολείο; Πως θα οργανώσω μια εκδρομή; Πως θα

Διαβάστε περισσότερα

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 2 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών

Διαβάστε περισσότερα

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

Σημειωματάριο Τετάρτης 18 Οκτ. 2017 Σημειωματάριο Τετάρτης 18 Οκτ. 2017 Περισσότερα για λίστες και ανακύκλωση Είδαμε σήμερα διάφορα προβλήματα και λύσεις για λίστες. Είδαμε επίσης την ανακύκλωση while. Στο επόμενο βλέπουμε πώς μπορούμε να

Διαβάστε περισσότερα

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1 Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα Προγραμματισμός II 1 lalis@inf.uth.gr Χρήση λογισμικού που ήδη υπάρχει Τα πολύπλοκα συστήματα αναπτύσσονται σταδιακά, «χτίζοντας» πάνω σε υπάρχουσα λειτουργικότητα

Διαβάστε περισσότερα

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Προγραμματισμός Η/Υ Προτεινόμενα θέματα εξετάσεων Εργαστήριο Μέρος 1 ό ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Ιανουάριος 2011 Καλογιάννης Γρηγόριος Επιστημονικός/ Εργαστηριακός

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ. Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ. Δημητρακάκης Σύνοψη Μαθήματος Προηγούμενο μάθημα Αλγόριθμοι

Διαβάστε περισσότερα

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω: Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω: 1ο ΓΕΛ Καστοριάς Βασικές Έννοιες Αλγορίθμων Δομή Ακολουθίας (κεφ. 2 και 7 σχολικού βιβλίου) 1. Οι μεταβλητές αντιστοιχίζονται από τον μεταγλωττιστή κάθε

Διαβάστε περισσότερα

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017 M7 Δομές δεδομένων: Πίνακες - Ασκήσεις Γεώργιος Παπαλάμπρου Επικ. Καθηγητής ΕΜΠ Εργαστήριο Ναυτικής Μηχανολογίας george.papalambrou@lme.ntua.gr ΕΜΠ/ΣΝΜΜ

Διαβάστε περισσότερα

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Σημειωματάριο Δευτέρας 9 Οκτ. 2017 Σημειωματάριο Δευτέρας 9 Οκτ. 2017 Η δομή ελέγχου if... else... elif Βλέπουμε τώρα πώς μπορούμε να γράψουμε προγράμματα που η εκτέλεσή τους ακολουθεί διαφορετική πορεία ανάλογα με τα δεδομένα. Χωρίς τέτοιες

Διαβάστε περισσότερα

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης Η συνάρτηση printf() Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται

Διαβάστε περισσότερα

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 1. Χειμερινό Εξάμηνο Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering Οργάνωση και Σχεδίαση Η/Y (HY232) Εργαστήριο 1 Χειμερινό Εξάμηνο 2016-2017 Στόχοι του εργαστηρίου Εντολές

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07 Ακαδ έτος 2007-2008 ΠΛΗΡΟΦΟΡΙΚΗ Ι Φερεντίνος 22/11/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με ΑΜ σε 3, 7, 8 & 9 22/11/07 Παράδειγμα με if/else if και user input: import javautil*; public class Grades public

Διαβάστε περισσότερα

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit!

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit! Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 25-6 Πράξεις με δυαδικούς αριθμούς (αριθμητικές ) http://di.ionio.gr/~mistral/tp/csintro/ Αριθμοί Πράξεις με δυαδικούς αριθμούς

Διαβάστε περισσότερα

Standard Template Library (STL) C++ library

Standard Template Library (STL) C++ library Τ Μ Η Μ Α Μ Η Χ Α Ν Ι Κ Ω Ν Η / Υ Κ Α Ι Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Standard Template Library (STL) C++ library Δομές Δεδομένων Μάριος Κενδέα kendea@ceid.upatras.gr Εισαγωγή Η Standard Βιβλιοθήκη προτύπων

Διαβάστε περισσότερα