Π Τ Υ Χ Ι Α Κ Η / Δ Ι Π Λ Ω Μ ΑΤ Ι Κ Η Ε Ρ ΓΑ Σ Ι Α

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

Download "Π Τ Υ Χ Ι Α Κ Η / Δ Ι Π Λ Ω Μ ΑΤ Ι Κ Η Ε Ρ ΓΑ Σ Ι Α"

Transcript

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

2 Π Ε Ρ Ι Λ Η Ψ Η Αντικείμενο της παρούσας εργασίας είναι η αυτόνομη ρύθμιση προγραμμάτων που χρησιμοποιούν τη μονάδα επεξεργασίας γραφικών (GPU). Πιο συγκεκριμένα, αποσκοπεί, αρχικά στη μελέτη και μετέπειτα στην επέκταση προγραμμάτων εφαρμογών σε GPU, ώστε μέσα από διαδοχικές επαναλήψεις εκτέλεσης, το σύστημα να αυτορρυθμίζεται με σκοπό να ελαχιστοποιείται ο χρόνος εκτέλεσης σε μελλοντικές εκτελέσεις. Έχει αποδειχθεί ότι η χρήση των μονάδων επεξεργασίας γραφικών, σε συνδυασμό με την κεντρική μονάδα επεξεργασίας, μπορεί να βελτιώσει σημαντικά την απόδοση πολλών εντατικών υπολογιστικών εφαρμογών. Η κατάλληλη χρήση των GPU είναι ακόμα ένα ανοιχτό ερευνητικό θέμα. Ένα από τα προβλήματα είναι η κατάλληλη ρύθμιση παραμέτρων εκτέλεσης του συστήματος σε GPU και σε αυτό επικεντρώνεται αυτή η εργασία. Δηλαδή για ένα πρόγραμμα που δέχεται διαφορετικές παραμέτρους αναζητείται η καλύτερη τιμή για το πλήθος των νημάτων ανά μπλοκ και το πλήθος των μπλοκ στο πλέγμα, που θα οδηγήσει στο μικρότερο χρόνο εκτέλεσης. Για την πρόσβαση στη κάρτα γραφικών και τη συγγραφή των προγραμμάτων που χρησιμοποιήθηκαν έγινε χρήση της τεχνολογίας CUDA της NVIDIA. Στα πρώτα κεφάλαια του κειμένου της εργασίας γίνεται αναφορά στην τεχνολογία CUDA και ακολουθεί εξήγηση των προγραμμάτων που υλοποιήθηκαν σε αυτήν. Το υπόλοιπο μέρος της εργασίας είναι αφιερωμένο σε τεχνικές αποτελεσματικής ρύθμισης και ανάλυση του προφίλ των χρόνων εκτέλεσης μέσα από πειράματα και κλείνει με έναν αλγόριθμο που επιτυγχάνει αυτόνομη ρύθμιση σε πραγματικό χρόνο. i

3 A B S T R A C T The object of this work is the autonomous tuning of programs that use the graphics processing unit (GPU). More specifically, aims firstly to research and subsequent to expand application programs that run on GPU, so through successive iterations of the application, the system would regulate itself in order to minimize the execution time in future executions. It has been proven that the use of graphics processing units, coupled with the central processing unit, can significantly improve the performance of many computational intensive applications. The proper use of the GPU is still an open research topic. One of the existing problems is the appropriate tuning of the system parameters while it run in the GPU and the work focuses exactly on this matter. Namely for a program that accepts different parameters the program seek out the best value for the number of threads per block and the number of blocks in the grid, that will lead to the smaller possible runtime. The technology CUDA of the NVIDIA company was used for accessing the graphics card and for writing the parallel programs that were used. At the first chapters of this paper reference is made at CUDA technology and follows an explanation of the programs that have been implemented with this technology. The remaining part of this paper is dedicated to techniques for effective regulation and analysis of the profile execution times through experiments and closes with an algorithm that achieves autonomous tuning in real time. ii

4 Ε Υ Χ Α Ρ Ι Σ Τ Ι Ε Σ Πριν την παρουσίαση των αποτελεσμάτων της παρούσας εργασίας, αισθάνομαι την υποχρέωση να ευχαριστήσω τον υπεύθυνο ακαδημαϊκό που είχε την ευθύνη για την επίβλεψη αυτής της εργασίας, τον κύριο Αναστάσιο Γούναρη, για την καθοδήγηση και την βοήθεια που μου πρόσφερε. Οι συμβουλές που πήρα ήταν πολύ χρήσιμες και καθοριστικές για την ολοκλήρωση της εργασίας αυτής. iii

5 Κατάλογος περιεχομένων 1 Εισαγωγή Τεχνολογία CUDA...3 Α. Βασικές γνώσεις...3 Β. Αρχιτεκτονικές NVIDIA...6 α. Νέα γενιά Fermi...6 β. Τρίτη γενιά πολυεπεξεργαστών συνεχούς ροής (SM)...8 Γ. Σημερινά δεδομένα και τελευταίες εκδόσεις λογισμικού...11 Δ. Βασικός προγραμματισμός CUDA...12 α. Τύποι συναρτήσεων και μεταβλητών...12 β. Ενσωματωμένες Built-in μεταβλητές διανυσματικού τύπου...14 γ. Ενσωματωμένες Built-in μεταβλητές...16 δ. Ορισμός παραμέτρων εκτέλεσης...17 ε. Συναρτήσεις διαχείρισης συσκευής...18 στ. Συναρτήσεις διαχείρισης μνήμης Τεχνικές λεπτομέρειες των προγραμμάτων CUDA...21 Α. Πρόγραμμα 1ο - simple...21 Β. Πρόγραμμα 2ο - mean...24 Γ. Πρόγραμμα 3ο - primes Τεχνικές αυτορρύθμισης - βασισμένες στην ανάλυση προφίλ...31 Α. Πρώτη τεχνική ανεξάρτητες διαστάσεις...32 Β. Δεύτερη τεχνική - εξαρτημένο γινόμενο Ενδείξεις κυμαινόμενης απόδοσης Τεχνική αυτορρύθμισης σε πραγματικό χρόνο Συμπεράσματα...46 iv

6 Κατάλογος εικόνων Εικόνα 2 1: Η οργάνωση των νημάτων στην CUDA. (από [1] )...4 Εικόνα 2 2: Πολυεπεξεργαστής συνεχούς ροής ( από [2] )...8 Εικόνα 2 3: Οργάνωση των Warp (από [2] )...10 Εικόνα 4 1: Όλοι οι δυνατοί συνδυασμοί για συγκεκριμένες τιμές στο μπλοκ και στο πλέγμα, με το μπλοκ στον άξονα x...35 Εικόνα 4 2: Όλοι οι δυνατοί συνδυασμοί για συγκεκριμένες τιμές στο μπλοκ και στο πλέγμα, με το πλέγμα στον άξονα x...35 Εικόνα 5 1: Όλοι οι δυνατοί συνδυασμοί για μονοδιάστατες τιμές στο μπλοκ και στο πλέγμα, με το μπλοκ στον άξονα x - mean...37 Εικόνα 5 2: Όλοι οι δυνατοί συνδυασμοί για μονοδιάστατες τιμές στο μπλοκ και στο πλέγμα, με το μπλοκ στον άξονα x - mean (μεγέθυνση)...38 Εικόνα 5 3: Όλοι οι δυνατοί συνδυασμοί για μονοδιάστατες τιμές στο μπλοκ και στο πλέγμα, με το μπλοκ στον άξονα x - primes...38 Εικόνα 5 4: Όλοι οι δυνατοί συνδυασμοί για μονοδιάστατες τιμές στο μπλοκ και στο πλέγμα, με το μπλοκ στον άξονα x - primes (μεγέθυνση)...39 Εικόνα 5 5: Όλοι οι δυνατοί συνδυασμοί για μονοδιάστατες τιμές στο μπλοκ και στο πλέγμα, με το πλέγμα στον άξονα x - primes...40 Εικόνα 5 6: Όλοι οι δυνατοί συνδυασμοί για μονοδιάστατες τιμές στο μπλοκ και στο πλέγμα, με το πλέγμα στον άξονα x - primes (μεγέθυνση)...40 Εικόνα 5 7: Μεταβλητό πλέγμα στον άξονα x για σταθερό μπλοκ ίσο με primes...41 v

7 1 Εισαγωγή Για την πρόσβαση στην μονάδα επεξεργασίας γραφικών (GPU) έγινε χρήση της τεχνολογίας CUDA, την παράλληλη υπολογιστική πλατφόρμα και μοντέλο προγραμματισμού. Χάρη στην τεχνολογία αυτή η ανάπτυξη προγραμμάτων που χρησιμοποιούν την GPU έγινε πιο εύκολη από ποτέ. Σε συνδυασμό -απαραίτητα- με την κεντρική μονάδα επεξεργασίας (ΚΜΕ) και με τον κατάλληλο προγραμματισμό, έχει αποδειχθεί ότι μπορεί να βελτιώσει σημαντικά την απόδοση πολλών εφαρμογών που απαιτούν εκτεταμένη υπολογιστική ισχύ. Για την επίτευξη της εργασίας το πρώτο βήμα ήταν η δημιουργία προγραμμάτων που αξιοποιούν την τεχνολογία CUDA. Αυτά τα προγράμματα λειτουργούν με τον ίδιο τρόπο σε μερικά σημεία, δεχόμενα τις ίδιες παραμέτρους και έχουν γενική ευελιξία ως προς τις διαφορετικές τιμές που λαμβάνουν. Το καθένα επιλύει ένα διαφορετικό πρόβλημα καθώς διαφέρουν οι υπολογισμοί της εκάστοτε εξόδου μεταξύ των εισερχόμενων δεδομένων. Με τη χρήση αυτών των προγραμμάτων γίνεται η συλλογή των δεδομένων που θα επεξεργαστούν για να επιτευχθούν οι στόχοι της εργασίας. Σκοπός της εργασίας είναι η εμφάνιση, η ερμήνευση και μελέτη της διαφοράς στο χρόνο εκτέλεσης αλλάζοντας τις βασικές παραμέτρους. Οι παράμετροι που ρυθμίζονται είναι το πλήθος των νημάτων ανά μπλοκ και το πλήθος των μπλοκ. Για να μην υπάρξει σύγχυση στην πορεία να διευκρινίσουμε ότι όταν παίρνει τιμή το μπλοκ εννοείται το πλήθος των νημάτων ανά μπλοκ και όταν αναφερόμαστε στο πλέγμα εννοείται το πλήθος των μπλοκ. Το Κεφάλαιο 2 που ακολουθεί είναι αφιερωμένο στην τεχνολογία CUDA και αποσαφηνίζονται οι ορισμοί που αναφέρονται εδώ. Κατά την εκτέλεση των προγραμμάτων υπάρχει διαφορά στον χρόνο εκτέλεσης για εκτελέσεις με μεταβλητό μπλοκ ή πλέγμα. Η εργασία επικεντρώνεται σε αυτή την ιδιότητα και το ιδανικό είναι να βρεθούν οι τιμές για τις οποίες η εκτέλεση είναι βέλτιστη και ο χρόνος εκτέλεσης παίρνει την πιο μικρή δυνατή τιμή. Μετά το Κεφάλαιο 2 που δίνει τη βασική γνώση για την αρχιτεκτονική, την τεχνολογία και τον προγραμματισμό σε CUDA, στο επόμενο κεφάλαιο (3 Τεχνικές λεπτομέρειες των προγραμμάτων CUDA) γίνεται λεπτομερής περιγραφή των προγραμμάτων που αναπτύχθηκαν. Στο επόμενο στάδιο (Κεφάλαιο 4 ) γίνεται μία προσπάθεια εύρεσης του βέλτιστου χρόνου εκτέλεσης. Οι δύο βασικές τεχνικές για την επίτευξη αυτού του επιθυμητού αποτελέσματος είναι πρώτον να θεωρήσουμε ότι το μέγεθος του μπλοκ (block) και το μέγεθος του πλέγματος (grid) είναι πλήρως ανεξάρτητα, ακόμα και ως προς τις δικές τους διαστάσεις (x, y, z). Δηλαδή θεωρούμε ότι αν αλλάξει η μεταβλητή της πρώτης διάστασης του μπλοκ (block.x) δεν θα αλλάξει η τιμή της δεύτερης διάστασης του μπλοκ όσων αφορά την βέλτιστη εκτέλεση. Ουσιαστικά βελτιώνουμε σταδιακά μία μία τις τιμές των μεταβλητών κατά σειρά ελπίζοντας ότι τα ξεχωριστά βέλτιστα που βρίσκουμε θα μας 1

8 αποκαλύψουν και το πραγματικό συνολικό βέλτιστο. Στο υπόκεφαλαιο 4 Α αναλύουμε γιατί αυτό που είπαμε δεν μπορεί να ισχύει και στη συνέχεια της εργασίας θεωρείται δεδομένη η εξάρτηση μεταξύ των τιμών, αναζητώντας μια καλύτερη τεχνική. Αμέσως μετά αναλύεται μία δεύτερη τεχνική που χωρίζεται σε δύο μέρη. Αρχικά βρίσκει τα βέλτιστα για μονοδιάστατες τιμές και έπειτα τις αναλύει. Παράλληλα εξηγείται το γιατί δεν έχει σημασία πως θα μοιραστούν οι τιμές στο μπλοκ και στο πλέγμα, από τι στιγμή που θα έχουν το ίδιο πλήθος νημάτων ανά μπλοκ και πλήθος μπλοκ αντίστοιχα. Το Κεφάλαιο 5 επικεντρώνεται στις γραφικές παραστάσεις που δείχνουν την καμπύλη της απόδοσης για διαφορετικές ρυθμίσεις. Οι διάφορες οπτικές γωνίες βοηθούν στην καλύτερη κατανόηση του φαινομένου. Τέλος στο Κεφάλαιο 6 γίνεται μία επισκόπηση των συμπερασμάτων από το πρώτο στάδιο και γίνεται μία προσπάθεια αυτορρύθμισης σε πραγματικό χρόνο, με σκοπό το βέλτιστο. Ο αλγόριθμος αυτορρύθμισης προβλέπει στην ελαχιστοποίηση του χρόνου εκτέλεσης σε μελλοντικές εκτελέσεις μέσα από διαδοχικές επαναλήψεις. Για την εργασία χρησιμοποιήθηκε κάρτα της σειράς GeForce 400 και συγκεκριμένα η κάρτα γραφικών GeForce GTS 450/PCIe/SSE2. Όσον αφορά το λογισμικό που χρησιμοποιήθηκε και όλα τα σχετικά δεδομένα, αναφέρονται μέσα στο κείμενο, στα κεφάλαια που ανήκουν. 2

9 2 Τεχνολογία CUDA Α. Βασικές γνώσεις CUDA είναι μια υπολογιστική πλατφόρμα και μοντέλο προγραμματισμού που εφευρέθηκε από την NVIDIA. Είναι η αρχιτεκτονική υλικού και λογισμικού που επιτρέπει στα προγράμματα να εκτελούνται στις κάρτες γραφικών της NVIDIA, χωρίς να γίνεται χρήση κάποιας εξεζητημένης τεχνολογίας γραφικών, με απλό και καθαρό κώδικα. Επιτρέπει δραματικές αυξήσεις στις επιδόσεις των υπολογιστών με την εκμετάλλευση της δύναμης της μονάδας επεξεργασίας γραφικών (GPU). Με τα εκατομμύρια των καρτών που έχουν πουληθεί μέχρι σήμερα και υποστηρίζουν την CUDA, επιστήμονες και ερευνητές βρίσκουν ευρεία χρήση για τον υπολογισμό αποτελεσμάτων με τη χρήση της. Είναι μια ολόκληρη παράλληλη υπολογιστική πλατφόρμα για C, C++, Fortran, OpenCL, DirectCompute και άλλες γλώσσες προγραμματισμού, που εκτελείται πάνω στην κάρτα γραφικών. Ή ανάπτυξη της έγινε έτσι ώστε να μην χρειάζεται ο προγραμματιστής να μάθει μία τελείως καινούργια γλώσσα προγραμματισμού ή μία νέα διεπαφή προγραμματισμού εφαρμογών (API). Ένα πρόγραμμα CUDA καλεί παράλληλους πυρήνες. Ένας πυρήνας εκτελείται παράλληλα σε ένα σύνολο παράλληλων νημάτων. Ο προγραμματιστής ή ο μεταγλωττιστής οργανώνει αυτά τα νήματα σε μπλοκ νημάτων καθώς και σε πλέγματα από μπλοκ. Κάθε νήμα μέσα σε ένα μπλοκ νημάτων εκτελεί τον ίδιο κώδικα με τα υπόλοιπα. Είναι κατά κάποιον τρόπο μια εικόνα του πυρήνα που αντιγράφεται σε κάθε μικροεπεξεργαστή και εκτελείται ανεξάρτητα. Η τεχνολογία που συζητάμε μπορεί να παρουσιαστεί σαν μία σύγχρονη εκδοχή των εντολών fork() και exec(), τις γνωστές και βασικές εντολές/κλήσεις του unix εδώ και δεκαετίες. Για τους γνώστες, συνιστούν το βασικό και κλασικό τρόπο πολυεπεξεργασίας (multitasking/multiprocessing) λειτουργιών. Με την ίδια λογική και τα σημερινά νήματα αποκτούνε τον ίδιο κώδικα με τα υπόλοιπα στην ίδια ομάδα. Συνεπώς με τον ίδιο τρόπο γίνεται μία διαφοροποίηση στο τι πραγματικά θα εκτελέσει το κάθε νήμα. Έτσι το pid του unix (το αναγνωριστικό του κάθε νήματος) εξελίχθηκε σε συνδυασμό των threadidx και blockidx. Επειδή μπορεί να μην έγινε πλήρως κατανοητό, προτού συνεχίσουμε με την εξήγηση για το πως πραγματοποιείται η πολυεπεξεργασία, θα πούμε τα βασικά στοιχεία του κάθε μικροεπεξεργαστή, ώστε να έχουμε μία σφαιρική εικόνα της σημερινής τεχνολογίας, χωρίς άλλη σύγκριση με προγενέστερες. Ο κάθε επεξεργαστής που αναλαμβάνει ένα μόνο νήμα, έχει ένα αναγνωριστικό αριθμό στο μπλοκ των νημάτων, ένα μετρητή προγράμματος, τους δικούς του καταχωρητές, ιδιωτική μνήμη, είσοδο και έξοδο για τα αποτελέσματα. Ένα μπλοκ νημάτων είναι ένα σύνολο ταυτόχρονης εκτέλεσης νημάτων, που μπορούν να συνεργάζονται μεταξύ τους 3

10 μέσω συγχρονισμού φραγμού και της κοινόχρηστης μνήμης. Ένα μπλοκ έχει ένα αναγνωριστικό αριθμό ( blockidx ) στο πλέγμα του. Ένα πλέγμα είναι μία συστοιχία από μπλοκ που εκτελούν τον ίδιο πυρήνα, διαβάζουν εισόδους από την κοινή ( global ) μνήμη, γράφουν τα αποτελέσματα πίσω στη μνήμη και συγχρονίζονται από τις εξαρτήσεις της κλήσης που πυρήνα. Η σχέση του πλέγματος με τα μπλοκ και τα νήματα εμφανίζεται στο σχήμα της εικόνα Εικόνα 2 1 που ακολουθεί. Χωρίς περιορισμό αποτελεί το πιο χαρακτηριστικό και διαδεδομένο σχήμα, όσον αφορά τη οργάνωση των νημάτων. Επίσης είναι απλοποιημένο σε δύο μόνο διαστάσεις για να γίνει εύκολα κατανοητό. Εικόνα 2 1: Η οργάνωση των νημάτων στην CUDA. (από [1] ) Δεν είναι, όμως, δύσκολο να φανταστεί κανείς τη λειτουργία σε τρεις διαστάσεις για τα εικονιζόμενα: πλέγμα (Grid) και μπλοκ (Block) και ακόμα πιο εύκολα για την περίπτωση που υπάρχει μόνο μία διάσταση ή κάποιος συνδυασμός αυτών. Με την στοίχιση που επικρατεί κάθε νήμα έχει μοναδικό συνδυασμό από τα αναγνωριστικά ID στη θέση του στο πλέγμα και στη θέση του στο μπλοκ. Αυτό συμβαίνει γιατί μόνο ένα νήμα θα βρίσκεται για παράδειγμα στη θέση μηδέν (0) του μποκ που βρίσκεται στη θέση μηδέν (0) του πλέγματος. Το εντυπωσιακό για τα αναγνωριστικά (0,0) είναι ότι πάντα θα υπάρχει νήμα με αυτά γιατί αποτελούν την αρχή όλων των αριθμών. Το πλήθος αυτών των νημάτων και το πως θα είναι οργανωμένα ορίζεται από συγκεκριμένες μεταβλητές. Αυτές οι μεταβλητές και 4

11 όλα τα απαραίτητα, για αυτές, στοιχεία που πρέπει να γνωρίζουμε αναλύονται στα κεφάλαια 2 Δ. γ Ενσωματωμένες Built-in μεταβλητές και 2 Δ. δ Ορισμός παραμέτρων εκτέλεσης. Με αυτά που έχουμε πει μέχρι στιγμής ξέρουμε ότι κάθε νήμα έχει ένα μοναδικό συνδυασμό από αναγνωριστικούς αριθμούς (ID). Αυτή την ιδιότητα αξιοποιούμε έτσι ώστε να γίνει διαχωρισμός των εργασιών που πρέπει να γίνουν και να κατανεμηθούν ομοιόμορφα στα νήματα που θα δρομολογηθούν. Η διαδικασία ποικίλει, ανάλογα με τον τρόπο προγραμματισμού που συγγράφεται και θα δώσουμε το πιο απλό παράδειγμα, ταυτόχρονα θα μπορούσαμε να το χαρακτηρίσουμε και συγκαταβατικό γιατί έχει μία ευδιάκριτη ανεκτικότητα ως προς τα ορίσματα που λαμβάνει. Το παρακάτω τμήμα κώδικα εμφανίζεται στα δύο πρώτα προγράμματα που υλοποιήθηκαν σε CUDA για την εργασία: int index = threadidx.x; index += threadidx.y * blockdim.x; index += blockidx.x * blockdim.x * blockdim.y; index += blockidx.y * blockdim.x * blockdim.y * griddim.x; Το παραπάνω κομμάτι πλέον θα αναφέρεται και σαν τμήμα indexing. Η δουλειά που κάνει είναι να παίρνει όλους τους αναγνωριστικούς αριθμούς του κάθε νήματος που έχουν ένα μοναδικό συνδυασμό και να παράγει από αυτούς έναν μοναδικό ακέραιο αριθμό. Ο αριθμός αυτός παίρνει τιμή από το μηδέν μέχρι και τον αριθμό του συνολικού πλήθους των νημάτων στο πρόγραμμα μείον ένα. Για τα προγράμματα που επεξεργάζονται μοναδικά κελιά πίνακα το παραπάνω αποτελεί ιδανικό πρότυπο. Για να κατανοηθεί όμως, όλες οι μεταβλητές που φαίνονται εξηγούνται παρακάτω σε αυτό το κεφάλαιο. Στο CUDA μοντέλο παράλληλου προγραμματισμού, κάθε νήμα έχει ένα ιδιωτικό χώρο μνήμης που χρησιμοποιείται για διαρροές των καταχωρητών, κλήσεις συναρτήσεων, και αυτόματες μεταβλητές πίνακα της C. Κάθε μπλοκ νημάτων έχει κοινόχρηστο χώρο μνήμης που χρησιμοποιείται για την επικοινωνία μεταξύ των νημάτων, την ανταλλαγή δεδομένων, και την κοινή χρήση των αποτελεσμάτων των παράλληλων αλγορίθμων. Το πλέγμα των μπλοκ μεταφέρει τα αποτελέσματα στο global χώρο μνήμης μετά τον συνολικό συγχρονισμό όλου του πυρήνα που εκτελείτε. Η ιεραρχία της CUDA από χάρτες νημάτων σε μια ιεραρχία των επεξεργασιών στη GPU είναι με την εξής σειρά: Μία GPU εκτελεί ένα ή περισσότερα πλέγματα πυρήνων. Ένας συνεχούς ροής πολυεπεξεργαστής (Streaming Multiprocessor ) εκτελεί ένα ή περισσότερα μπλοκ νημάτων. Και οι CUDA πυρήνες κι άλλες μονάδες εκτέλεσης μέσα στον SM, εκτελούνε τα νήματα. 5

12 Β. Αρχιτεκτονικές NVIDIA Οι κάρτες γραφικών την NVIDIA που υπάρχουν στην αγορά έχουν διάφορες αρχιτεκτονικές. Η πρώτη αρχιτεκτονική που γέννησε το νέο μοντέλο προγραμματισμού ήταν η G80, που πρωτοεμφανίστηκε το 2006 και έλαβε μία μείζονα αναθεώρηση το Η G80 ήταν η πρώτη που υποστήριζε C, επιτρέποντας στους προγραμματιστές να χρησιμοποιήσουν τη δύναμη της GPU, χωρίς να χρειάζεται να μάθουν μια νέα γλώσσα προγραμματισμού. Η δεύτερη γενιά ενοποιημένης αρχιτεκτονικής ονομάστηκε GT200, αύξησε τον αριθμό των πυρήνων του επεξεργαστή συνεχούς ροής (streaming processor cores) από 128 σε 240. Στη συνέχεια αυτοί οι πυρήνες αναφέρονται ως πυρήνες CUDA. Όλοι οι καταχωρητές του επεξεργαστή διπλασιάστηκαν σε μέγεθος, επιτρέποντας σε μεγαλύτερο αριθμό νημάτων να εκτελείται στην κάρτα σε κάθε δεδομένη στιγμή. Το υλικό πρόσβασης στη μνήμη συσσωρεύτηκε, για βελτίωση της αποδοτικότητας της πρόσβασης στη μνήμη. Υποστηρίχθηκαν πράξεις διπλής ακρίβειας κινητής υποστήριξη για να αντιμετωπίσει τις ανάγκες των επιστημόνων και των εφαρμογών υψηλής απόδοσης. α. Νέα γενιά Fermi Η τελευταία αρχιτεκτονική που σχεδίασε η εταιρία έχει την κωδική ονομασία Fermi. Η οποία είναι το πιο σημαντικό άλμα προς τα εμπρός μετά την αρχική G80. Η GT200 επέκτεινε την απόδοση και τη λειτουργικότητα της G80. Με τη Fermi όμως, έχει ληφθεί όλη η γνώση από τις δύο προηγούμενες αρχιτεκτονικές και από όλες αυτές τις εφαρμογές που γράφτηκαν για αυτές. Ώστε, χρησιμοποιείται μια εντελώς νέα προσέγγιση στο σχεδιασμό για να δημιουργηθεί η πρώτη στον κόσμο υπολογιστική δύναμη για εφαρμογές που εκτελούνται στη GPU. Θα συνεχίσουμε με μία επισκόπηση της αρχιτεκτονικής Fermi. Οι αλλαγές που έγιναν σε αυτή της νέας γενιάς αρχιτεκτονική, ήταν αρκετές και συνδυασμένες με τις απαιτήσεις των χρηστών. Παρόλο που οι πράξεις με αριθμούς μονής ακρίβειας κινητής υποδιαστολής έκαναν πιο γρήγορη την απόδοση έως και δέκα φορές από τους απλούς επεξεργαστές γραφείου, πολλές εφαρμογές πληροφορικής επιθυμούσαν πράξεις με διπλής ακρίβειας αριθμούς κινητής υποδιαστολής. Η οποία εφαρμογή τελικά -της βελτίωσης της διπλής ακρίβειας- συνεπάγεται και καλύτερη απόδοση. Η υποστήριξη ECC- GPU επιτρέπει στους χρήστες υπολογιστών να αναπτύξουν με ασφάλεια μεγάλο αριθμό από κάρτες γραφικών σε εγκαταστάσεις κέντρων δεδομένων. Αυτή η τεχνολογία (Error- Correcting Code) εντοπίζει και διορθώνει τα πιο συνηθισμένα λάθη στην αποθήκευση των δεδομένων και είναι αναπόσπαστο στοιχείο σε όλους τους εξυπηρετητές. Μπορεί να διασφαλίσει ότι εφαρμογές με ευαίσθητα δεδομένα όπως ιατρικές ή οικονομικές επιλογές τιμολόγησης προστατεύονται από σφάλματα μνήμης. Επειδή όμως δεν είναι σε όλους τους χρήστες απαραίτητη αυτή η τεχνολογία, υπάρχει η επιλογή για απενεργοποίηση της. Συνεχίζοντας, φτιάχτηκε αληθινή ιεραρχία cache γιατί μερικοί παράλληλοι αλγόριθμοι δεν 6

13 ήταν σε θέση να χρησιμοποιούν τη κοινόχρηστη μνήμη της GPU, και οι χρήστες ζήτησαν μια αληθινή αρχιτεκτονική cache για να τους βοηθήσει. Όσων αφορά τις μνήμες, τα 16 KB της κοινόχρηστης μνήμης του κάθε SM ήταν μικρή για να επιταχύνει τις εφαρμογές και αυξήθηκε στα 49 KB. Η πρώτη βασισμένη σε αυτήν την αρχιτεκτονική μονάδα επεξεργασίας γραφικών (GPU) ήταν υλοποιημένη με 3 δισεκατομμύρια τρανζίστορ και διέθετε μέχρι και 512 πυρήνες CUDA (CUDA cores). Οι πυρήνες δεν έχουν πραγματική διαφορά από τους επεξεργαστές stream που έχει η ATI. Ακόμα κι αν διαφέρουν στο πλήθος, κάνουν την ίδια δουλειά έχοντας όμως διαφορετικές ρυθμίσεις. Οι stream processors και οι πυρήνες CUDA (ATI / nvidia αντιστοίχως) είναι μικρές σε μέγεθος και σε δυνατότητες, μονάδες επεξεργασίας που έχουν οι κάρτες γραφικών, άλλα πολλές σε αριθμό. Μία από τις πιο σημαντικές δουλειές που κάνουν είναι ότι επεξεργάζονται τα εφέ στα γραφικά των παιχνιδιών και όχι μόνο, όπως παρουσιάζεται και σε αυτή την εργασία. Η επιτυχία που σημειώνεται στα γραφικά οφείλεται γιατί η επεξεργασία γίνεται ανά pixel, όποτε ο κάθε πυρήνας αναλαμβάνει να επεξεργαστεί μόνο λίγα pixel. Ένας πυρήνας CUDA εκτελεί μια πράξη κινητής υποδιαστολής ή ακέραια, ανά κύκλο ρολογιού για κάθε νήμα. Οι 512 CUDA cores είναι οργανωμένοι σε 16 SΜ από 32 πυρήνες ο καθένα. Χωρίς όμως να είναι απόλυτο ότι όλες οι κάρτες έχουν 512 πυρήνες και είναι οργανωμένες ακριβώς με αυτόν τον τρόπο. Μπορεί να έχουν για παράδειγμα 96 πυρήνες ή 192 όπως αυτή που χρησιμοποιήθηκε για την εργασία που αποτελείτε από 4 SM με 48 πυρήνες το καθένα. Ο αριθμός των μπλοκ και των warp που μπορούν να βρίσκονται και να υποβάλλονται μαζί σε επεξεργασία από τον πολυεπεξεργαστή (SM), για έναν συγκεκριμένο πυρήνα (kernel) εξαρτάται από την ποσότητα των καταχωρητών και της κοινής μνήμης που χρησιμοποιείται από τον πυρήνα και από το πλήθος των καταχωρητών και την κοινόχρηστη μνήμη που διατίθενται στον πολυεπεξεργαστή. Υπάρχει, επίσης, ένας μέγιστος αριθμός από μπλοκ και μέγιστος αριθμός από warp που μπορούν να βρίσκονται στον πολυεπεξεργαστή. Τα όρια αυτά, καθώς και το πλήθος των καταχωρητών και της κοινόχρηστης μνήμης που διατίθενται στον πολυεπεξεργαστή είναι συνάρτηση της υπολογιστικής ικανότητας της συσκευής. Αν δεν υπάρχουν αρκετοί καταχωρητές ή αρκετή κοινόχρηστη μνήμη διαθέσιμη ανά πολυεπεξεργαστή, για να επεξεργάζονται τουλάχιστον ένα μπλοκ, ο πυρήνας θα αποτύχει να ξεκινήσει. Η GPU έχει 6 κατατμήσεις 64-bit μνήμης, για ένα 384-bit δίαυλο μνήμης, υποστηρίζοντας μέχρι συνολικά 6 GB μνήμης GDDR5 DRAM. Μια διεπαφή υποδοχής συνδέει τη GPU στη ΚΜΕ μέσω του PCI-Express. Τέλος ο global GigaThread χρονοπρογραμματιστής διανέμει τα μπλοκ νημάτων στα SM. 7

14 β. Τρίτη γενιά πολυεπεξεργαστών συνεχούς ροής (SM) Η τρίτη γενιά πολυεπεξεργαστών συνεχούς ροής (SM) εισάγει διάφορες αρχιτεκτονικές καινοτομίες που το καθιστούν όχι μόνο το πιο ισχυρό SM που έχει ακόμα κατασκευαστεί, αλλά και το πιο αποδοτικό και προγραμματιζόμενο[2]. Όπως έχουμε ήδη αναφέρει η εξέλιξη της αρχιτεκτονικής Fermi, έγινε με βάση την απόδοση και τις απαιτήσεις των χρηστών. Επειδή ακόμα ο παράλληλος προγραμματισμός δεν έχει απόλυτα όρια, όπως ο σειριακός, η ανατροφοδότηση που γίνεται από τους χρήστες της, οδηγεί την εταιρία κάθε φορά στην επόμενη βελτίωση. Θα αναφέρουμε κάποια στοιχεία του κομβικού αυτού κομματιού (SM) της αρχιτεκτονικής. Στα πρώιμα στάδια της νέας γενιάς κάθε SM είχε 32 επεξεργαστές CUDA μια τετραπλάσια αύξηση σε σχέση με την προηγούμενη σχεδίαση των SM. Οι επεξεργαστές CUDA Εικόνα 2 2: Πολυεπεξεργαστής συνεχούς ροής ( από [2] ) κανονικά ονομάζονται CUDA cores και μεταφράζονται σαν πυρήνες, αλλά εδώ θα αναφέρονται σαν επεξεργαστές για να μην γίνεται σύγχυση με τους πυρήνες που μεταφράζεται από το kernel. Η λέξη kernel ονομάζει το τμήμα του κώδικα το οποίο εκτελείτε στην GPU. Επομένως, κάθε επεξεργαστής CUDA έχει μία πλήρως διοχετεύσιμη ακέραια αριθμητική/λογική μονάδα (ALU) και μονάδα κινητής υποδιαστολής (FPU). Η αρχιτεκτονική Fermi έκανε μετάβαση σε ένα νέο πρότυπο κινητής υποδιαστολής, παρέχοντας το fused multiply-add (FMA) οδηγίες και για μονής αλλά και διπλής αρκίβειας αριθμητικές πράξεις. Το FMA εκτελεί την πράξη z+x*y σε μία μόνο αριθμητική εντολή [3], κάνοντας τον πολλαπλασιασμό και πρόσθεση με ένα ενιαίο τελικό βήμα στρογγυλοποίησης, χωρίς απώλεια της ακρίβειας στην προσθήκη. Με σαφές πλεονέκτημα την ταχύτητα εκτέλεσης και την ύπαρξη ενός μόνο σφάλματος στρογγύλευσης. Το FMA είναι πιο ακριβές από την εκτέλεση των εργασιών ξεχωριστά. 8

15 Στην προηγούμενη γενιά ο ακέραιος ALU περιοριζόταν σε 24-bit ακρίβεια για πράξεις πολλαπλασιασμού. Σαν αποτέλεσμα, η εξομοίωση της αλληλουχίας εντολών πολλαπλασιασμού ήταν απαραίτητη για την ακέραια αριθμητική. Στη Fermi, η πρόσφατα σχεδιασμένη ALU υποστηρίζει πλήρη 32-bit ακρίβεια για όλες τις εντολές, σύμφωνα με τις απαιτήσεις του προτύπου της γλώσσα προγραμματισμού. Ο ακέραιος ALU είναι επίσης βελτιστοποιημένος για να υποστηρίζει αποτελεσματικά 64-bit και εκτεταμένες εργασίες ακριβείας. Με αυτή την αλλαγή διάφορες λειτουργίες υποστηρίζονται πιο καλά, συμπεριλαμβανομένων των: λογική, μετατόπιση, μετακίνηση, σύγκριση, μετατροπή, καταμέτρηση και άλλες. Όσων αφορά την φόρτωση και την αποθήκευση, κάθε SM έχει 16 μονάδες load/store. Επιτρέποντας τις διευθύνσεις προέλευσης και προορισμού να αξιοποιούν δεκαέξι νήματα ανά κύκλο ρολογιού. Υποστηρίζοντας μονάδες φόρτωσης και αποθήκευσης στα δεδομένα σε κάθε διεύθυνση στη μνήμη cache ή στη DRAM. Ένα άλλο χαρακτηριστικό των SM είναι ότι έχουμε τέσσερις Μονάδες Ειδικής Λειτουργίας (SFUs). Οι οποίες εκτελούν εξειδικευμένες οδηγίες όπως ημίτονο, συνημίτονο και τετραγωνική ρίζα. Κάθε SFU εκτελεί μία εντολή ανά νήμα, ανά κύκλο ρολογιού. Ο αγωγός SFU είναι αποσυνδεδεμένος από τη μονάδα αποστολής, επιτρέποντας στη μονάδα αποστολής να εκδώσει την εργασία σε άλλη μονάδα επεξεργασίας, όταν το SFU είναι κατειλημμένο. Όπως έχουμε αναφέρει, η διπλή αριθμητική ακρίβεια βρίσκεται στο επίκεντρο για εφαρμογών Υψηλής Απόδοσης ( High Performance Computing, HPC ) όπως η γραμμική άλγεβρα, η αριθμητική προσομοίωση, και η κβαντική χημεία. Η αρχιτεκτονική Fermi έχει σχεδιαστεί ειδικά για να προσφέρει ανεπανάληπτες επιδόσεις σε διπλής ακρίβεια πράξεις. Με έως 16 διπλής ακριβείας λειτουργία συρρικνωμένης πράξης πολλαπλασιασμούπρόσθεσης, να μπορούν να εκτελεστούν ανά SM, ανά κύκλο ρολογιού. Μια δραματική βελτίωση σε σχέση με την αρχιτεκτονική GT200. Το SM χρονοπρογραμματίζει τα νήματα σε ομάδες των 32 παράλληλων νημάτων που ονομάζεται warp. Κάθε SM διαθέτει δύο warp προγραμματιστές και δύο μονάδες αποστολής των εντολών αυτών. Επιτρέποντας σε δύο warp να μεταβαίνουν και να εκτελούνται ταυτόχρονα. Ο χρονοπρογραμματισμός στην αρχιτεκτονική Fermi των διπλών warp επιλέγει δύο warp και μεταφέρει μία εντολή από το καθένα σε μία ομάδα με δεκαέξι πυρήνες, δεκαέξι μονάδες φόρτωσης και αποθήκευσης, ή σε τέσσερα SFU. Επειδή τα warp εκτελούνται ανεξάρτητα, ο χρονοπρογραμματιστής δεν χρειάζεται να ελέγξει για εξαρτήσεις από την ροή των διαδοχικών εντολών. Χρησιμοποιώντας αυτό το κομψό μοντέλο της διπλής έκδοσης (dual-issue), η Fermi επιτυγχάνει πολύ κοντά στη μέγιστη απόδοση του υλικού. Ακολουθεί ένα σχήμα με το πως μπορούμε να απεικονίσουμε αυτή τη διαδικασία. 9

16 Εικόνα 2 3: Οργάνωση των Warp (από [2] ) Οι περισσότερες οδηγίες μπορούν να είναι διπλές, για παράδειγμα δύο ακέραιες εντολές, δύο εντολές κινητής υποδιαστολής. Ή ένας συνδυασμός μεταξύ των ακέραιο, κινητής υποδιαστολής, φόρτωσης, αποθήκευσης και εντολής SFU μπορούν να δρομολογηθούν ταυτόχρονα. Οι εντολές διπλής ακρίβειας δεν υποστηρίζουν διπλή αποστολή με οποιαδήποτε άλλη λειτουργία. Μία ακόμα αρχιτεκτονική καινοτομία, από τις πιο βασικές που βελτίωσαν σε μεγάλο βαθμό τόσο τον προγραμματισμό και τις επιδώσεις των εφαρμογών GPU, είναι η on-chip ρυθμιζόμενη κοινόχρηστη ( shared ) μνήμη και L1 cache. Η Κοινόχρηστη μνήμη που βρίσκεται μέσα στο τσιπ της κάρτας γραφικών, επιτρέπει νήματα μέσα στο ίδιο μπλοκ νημάτων να συνεργαστούν, διευκολύνει την εκτεταμένη επαναχρησιμοποίηση των δεδομένων που παραμένουν στο τσιπ, και σε μεγάλο βαθμό μειώνει της εξωτερική κυκλοφορία. Η κοινόχρηστη μνήμη αποτελεί βασικό παράγοντα για πολλές εφαρμογές CUDA υψηλής απόδοσης. Η G80 και GT200 έχουν 16 KB κοινόχρηστης μνήμης ανά SM. Στην αρχιτεκτονική Fermi, κάθε SM έχει 64 KB της επί του τσιπ μνήμης, που μπορεί να διαμορφωθεί ως 48 KB κοινόχρηστης μνήμης με 16 KB L1 cache ή 16 KB της Κοινόχρηστη μνήμη με 48 KB L1 cache. Για τις υπάρχουσες εφαρμογές που κάνουν εκτεταμένη χρήση της κοινόχρηστης μνήμης, τριπλασιάζοντας το ποσό της, αποφέρουν σημαντικές βελτιώσεις στην απόδοση, ειδικά για τα προβλήματα που περιορίζονται από το εύρος ζώνης. Για τις υπάρχουσες εφαρμογές που χρησιμοποιούν την κοινόχρηστη μνήμη ως λογισμικό διαχείρισης cache, ο κώδικας μπορεί να εκσυγχρονιστεί, ώστε να επωφελείται από το σύστημα προσωρινής αποθήκευσης υλικού, ενώ εξακολουθεί να έχει πρόσβαση σε τουλάχιστον 16 KB μνήμη της κοινής μνήμης ρητά για συνεργασία νημάτων. 10

17 Το καλύτερο από όλα είναι ότι εφαρμογές που δεν χρησιμοποιούν την κοινόχρηστη μνήμη αυτόματα επωφελούνται από τη μνήμη cache L1, επιτρέποντας υψηλής απόδοσης προγράμματα CUDA που θα κατασκευαστούν με ελάχιστο χρόνο και προσπάθεια. Γ. Σημερινά δεδομένα και τελευταίες εκδόσεις λογισμικού Ένα σημαντικό αναγνωριστικό χαρακτηριστικό που δεν έχουμε πει τίποτα ακόμα για αυτό, υπάρχει για όλες τις κάρτες γραφικών και λέγεται ικανότητα (capability). Η υπολογιστική ικανότητα του συστήματος ορίζεται από ένα σημαντικό αριθμό έκδοσης ακολουθούμενο από έναν μικρότερης σημασίας. Για παράδειγμα στην έκδοση 1.6 το ένα (1) είναι ο σημαντικός αριθμός και το έξι (6) ο δευτερεύων. Συσκευές με τον ίδιο σημαντικό αριθμό έκδοσης είναι της ίδιας βασικής αρχιτεκτονικής. Ο κύριος αριθμός αναθεώρησης είναι 2 για συσκευές που βασίζονται στην αρχιτεκτονική Fermi, και 1 για συσκευές που βασίζονται στην αρχιτεκτονική Tesla. Ο μικρός αριθμός έκδοσης αντιστοιχεί σε μια σταδιακή βελτίωση στην κεντρική αρχιτεκτονική, ενδεχομένως περιλαμβάνει και κάποια νέα χαρακτηριστικά. Για περισσότερες πληροφορίες για όλες τις συσκευές που υποστηρίζουν CUDA μαζί με την υπολογιστική ικανότητα τους, καθώς και τεχνικές προδιαγραφές της κάθε υπολογιστικής ικανότητας μπορούν να βρεθούν εδώ: [4]. Αφού εξηγήσαμε τι ορίζει η ικανότητα, με τα σημερινά δεδομένα η τελευταία έκδοση που έχει βγει και χρησιμοποιείται για την εργασία είναι η 2.1. Επίσης τελευταία έκδοση του λογισμικού -το οποίο και χρησιμοποιήθηκε- για ανάπτυξη των εφαρμογών σε CUDA, είναι το CUDA 4.2, που περιλαμβάνει το σύνολο των εργαλείων CUDA TOOLKID 4.2 και το πακέτο με τα παραδείγματα των βασικών λειτουργιών GPU Computing SDK 4.2. Για την πρόσβαση στην κάρτα γραφικών χρησιμοποιήθηκε αναγκαστικά ο κλειστός οδηγός της NVIDIA γιατί δεν υπάρχει ανοιχτή γνώση για την πλήρη αξιοποίηση της κάρτας με τους ελεύθερους οδηγούς. Η έκδοση του οδηγού που έγιναν οι εκτελέσεις είναι η NVIDIA Driver Version: _Linux-x86_64. Όλα όσα αναφέραμε είναι οι πιο νέες εκδόσεις αυτή τη στιγμή. Από την πρώτη εμφάνιση το 2006, η CUDA έχει ευρέως αναπτυχθεί, με χιλιάδες εφαρμογές και δημοσιευμένες ερευνητικές εργασίες. Πλέων υποστηρίζεται από περισσότερες των 300 εκατομμυρίων GPUs σε φορητούς υπολογιστές, σταθμούς εργασίας, computer clusters και υπερυπολογιστές. Λόγω της ραγδαίας αυτής εξέλιξης στο πολύ κοντινό μέλλον θα δούμε το CUDA 5 και κάρτες με ικανότητα της σειράς

18 Δ. Βασικός προγραμματισμός CUDA Σε αυτή την ενότητα θα παρουσιαστεί ο τρόπος με τον οποίον μπορούν να προγραμματιστούν εφαρμογές για να χρησιμοποιούν την υπολογιστική δύναμη της κάρτας γραφικών. Θα γίνει κατανοητό πώς φαίνονται όλα όσα αναλύθηκαν προηγουμένως από την πλευρά του προγραμματιστή, τι δυνατότητες προσφέρονται και πώς παρουσιάζονται στο Πακέτο Ανάπτυξης Λογισμικού (Software Development Kit ή SDK) της CUDA. Χρησιμοποιήθηκε η CUDA σαν μία επέκταση της γλώσσας προγραμματισμού C, με κάποια στοιχεία από τη C++. Οι επεκτάσεις και οι προσθήκες δεν είναι κάτι το σημαντικά διαφορετικό, απλά παρέχουν τον τρόπο, ώστε να δίνουν τη δυνατότητα σε επίδοξους προγραμματιστές να εκμεταλλευτούν όσα προσφέρει η παρουσιαζόμενη τεχνολογία. Ο λόγος για τον οποίο επιλέχθηκε να γίνει κάτι τέτοιο είναι το γεγονός, ότι πρωταρχικός στόχος ήταν να γίνει πιο προσιτό σε όλους να προγραμματίσουν κάρτες γραφικών για γενικές εφαρμογές, και οι γλώσσες C και C++ είναι ίσως οι πιο διαδεδομένες και εύχρηστες γλώσσες προγραμματισμού. Θα παρουσιαστούν κατά σειρά οι σημαντικότερες επεκτάσεις που προσφέρονται και χρησιμοποιήθηκαν στο Κεφάλαιο 3. Περισσότερες πληροφορίες και λεπτομέρειες μπορούν να αναζητηθούν στο [*CUDA_C_Programming_Guide]. α. Τύποι συναρτήσεων και μεταβλητών Υπάρχουν κάποιες συγκεκριμένες δεσμευμένες λέξεις οι οποίες χρησιμοποιούνται για να δηλώνουν από πού θα καλούνται και πού θα εκτελούνται οι συναρτήσεις. Υπενθυμίζεται ότι η CUDA χρησιμοποιεί την GPU σαν συνεπεξεργαστή της ΚΜΕ και άρα υπάρχει μια συνεχής συνεργασία αυτών των δύο συσκευών. Υπάρχουν, δηλαδή, δυο μέρη στα οποία μπορεί να εκτελείται μια συνάρτηση ή από τα οποία μπορεί να καλείται: η πλευρά του host (ΚΜΕ) και η πλευρά της συσκευής (GPU). Ακολουθούν οι δεσμευμένες λέξεις κλειδιά που αρχίζουν και τελειώνουν με δύο κάτω παύλες, και κάθε μία αντιπροσωπεύει ένα διαφορετικό είδος των συναρτήσεων: host : Χρησιμοποιείται σαν πρόθεμα στις συναρτήσεις που μεταγλωττίζονται και εκτελούνται στον host. Αυτές οι συναρτήσεις μπορούν να κληθούν μόνο από συναρτήσεις που τρέχουν κι αυτές στον host. Όλες οι συναρτήσεις που γράφουμε σε προγράμματα για το CUDA και δεν προηγείται κάποιο αναγνωριστικό, αυτόματα θεωρούνται σαν host συναρτήσεις. device : Χρησιμοποιείται για συναρτήσεις οι οποίες μεταγλωττίζονται και εκτελούνται στην συσκευή, αλλά καλούνται μόνο από άλλες συναρτήσεις που εκτελούνται στη συσκευή. Αυτός ο χαρακτηρισμός μπορεί επίσης να χρησιμοποιηθεί και σε συνδυασμό με τον host, κάτι που θα έχει αποτέλεσμα η εν λόγω διπλά συνάρτηση να μπορεί κληθεί είτε από συναρτήσεις 12

19 του host είτε από συναρτήσεις που τρέχουν στη συσκευή. global : Αυτή η λέξη χαρακτηρίζει ουσιαστικά τις συναρτήσεις που θα αποτελούν τον υπολογιστικό πυρήνα των εφαρμογών. Καλούνται μόνο από τον host, ενώ εκτελούνται αποκλειστικά στη συσκευή. Υποχρεωτικά δεν επιστρέφουν τίποτα (void), σε αντίθεση με τις άλλες δυο κατηγορίες, οι οποίες μπορούν να επιστρέφουν οτιδήποτε. Πίνακας 2.Δ.α 1 Τέλος, αναφέρεται ότι για όσες συναρτήσεις εκτελούνται στην συσκευή, δηλαδή όσες ορίζονται με device και global, δεν υποστηρίζεται η αναδρομή και απαγορεύονται δηλώσεις static μεταβλητών εντός του κώδικα τους. Όσον αφορά τις μεταβλητές, υπάρχουν και σε αυτές αυτού του ειδικού τύπου χαρακτηριστικές λέξεις, οι οποίες επιτρέπουν να δηλώνεται πού ακριβώς είναι επιθυμητό να αποθηκεύεται η κάθε μία. Το οποίο μας δίνει τη δυνατότητα να αξιοποιηθεί όλη την ιεραρχία της μνήμης της αρχιτεκτονικής. Ακολουθούν αναλυτικά οι βασικές από αυτές και στο τέλος ένας πίνακας που τις συνοψίζει όλες μαζί. device : Αυτή η λέξη με τα ειδικά σύμβολα, δηλώνει ότι η μεταβλητή την οποία ορίζει αποθηκεύεται στη μνήμη της συσκευής. Μπορεί να χρησιμοποιηθεί σε συνδυασμό με τις άλλες, αλλά εάν είναι μόνη της, σηματοδοτεί ότι αυτή η μεταβλητή θα στεγάζεται στην καθολική μνήμη. Η διάρκεια ζωής της μεταβλητής θα είναι όση και η διάρκεια ζωής της εφαρμογής. Αυτές οι μεταβλητές μπορούν να προσπελαστούν από όλα τα νήματα της εκάστοτε εφαρμογής, ενώ μέσω της προγραμματιστικής διεπαφής που προσφέρετε, είναι εφικτό να προσπελαστούν με τον κατάλληλο τρόπο και από τον host. Το τελευταίο συνήθως γίνεται μετά το πέρας της εκτέλεσης για την συλλογή των αποτελεσμάτων, γιατί έχει αρκετό κόστος σε χρόνο. constant : Μπορεί να χρησιμοποιηθεί είτε μόνο του είτε σε συνδυασμό με το device, δηλώνοντας ότι η μεταβλητή η οποία χαρακτηρίζει βρίσκεται στη μνήμη σταθερών. Η διάρκεια ζωής αυτών των μεταβλητών είναι ίση με το χρόνο ζωής της εφαρμογής στην οποία χρησιμοποιείται. Μπορούν να προσπελαστούν από όλα τα νήματα της εφαρμογής, μόνο για ανάγνωση. Ενώ έχει πρόσβαση σε αυτή και ο host ο οποίος μπορεί να την αλλάξει, να τη διαβάσει και να γράψει μέσω της διεπαφής προγραμματισμού. shared : Αυτή η ειδική λέξη μπορεί να χρησιμοποιηθεί είτε μόνη, είτε σε 13

20 συνδυασμό με το device, δηλώνοντας ακριβώς το ίδιο πράγμα, οπότε το δεύτερο είναι επί της ουσίας περιττό. Χρησιμοποιείται για μεταβλητές οι οποίες στεγάζονται στις διαμοιραζόμενες μνήμες των SM. Οι μεταβλητές αυτές μπορούν να προσπελαστούν από όλα τα νήματα ενός μπλοκ, ενώ η διάρκεια ζωής τους είναι όσο αυτή του συγκεκριμένου μπλοκ. Η ΚΜΕ δεν μπορεί να έχει καμία αλληλεπίδραση ή πρόσβαση σε αυτές τις μεταβλητές. Συνήθως το shared χρησιμοποιείται για πίνακες στους οποίους είναι επιθυμητό να έχουν πρόσβαση όλα τα νήματα του μπλοκ και το μέγεθος των πινάκων πρέπει να είναι δηλωμένο πριν την εκτέλεση του kernel. Αν δεν είναι σταθερό κατά τη μεταγλώττιση πρέπει ο συγκεκριμένος πίνακας να δηλωθεί ως extern και το μέγεθός του να περαστεί σαν όρισμα. Ένα σημαντικό στοιχείο που πρέπει να αναφερθεί είναι το τι γίνεται στην περίπτωση που σε μια μεταβλητή της συσκευής δεν υπάρχει κανένας από τους παραπάνω τύπους. Σε αυτήν την περίπτωση οι μεταβλητές είναι τελείως τοπικές και θα αποθηκεύονται στους καταχωρητές του νήματος και θα έχουν διάρκεια ζωής όσο και η διάρκεια ζωής του νήματος στο οποίο ανήκουν. Με άλλα λόγια είναι σαν να λέμε στο τελευταίο στάδιο της ιεραρχίας της μνήμης και είναι η πιο τοπική μεταβλητή σε όλο το πρόγραμμα. Στις περιπτώσεις μεγάλων πινάκων ή μεγάλου αριθμού μεταβλητών, χρησιμοποιείται η τοπική μνήμη αντί του αρχείου των καταχωρητών. β. Ενσωματωμένες Built-in μεταβλητές διανυσματικού τύπου Στα επόμενα υποκεφάλαια γίνεται χρήση ειδικών μεταβλητών που πρέπει να εξηγήσουμε πριν προχωρήσουμε. Έχουμε πει πως το πλέγμα και το μπλοκ μπορούν να πάρουν τιμές μέχρι και σε τρεις διαστάσεις. Για αυτό το λόγο γίνεται χρήση της ειδικής μεταβλητής dim3, μαζί με τη συνάρτηση της dim3(), καθώς η uint3. Παραμένει το ερώτημα τι ακριβώς είναι αυτοί οι τύποι δεδομένων και η απάντηση είναι λίγο πιο γενική για να συμπεριλάβει ολόκληρη την κατηγορία από τις μεταβλητές διανυσματικού τύπου στην οποία ανήκουν. Η CUDA προσφέρει κάποιους τύπους δεδομένων διαφόρων ειδών που είναι ουσιαστικά μικρά διανύσματα το πολύ τεσσάρων διαστάσεων. Παρατίθεται η λίστα αυτών των τύπων και ακολουθεί η εξήγηση του τι αντιπροσωπεύει ο καθένας: 14

21 char1, uchar1, char2, uchar2, char3, uchar3, char4, uchar4, short1, ushort1, short2, ushort2, short3, ushort3, short4, ushort4, int1, uint1, int2, uint2, int3, uint3, int4, uint4, long1, ulong1, long2, ulong2, long3, ulong3, long4, ulong4, longlong1, ulonglong1, longlong2, ulonglong2, float1, float2, float3, float4, double1, double2 Αυτοί είναι οι τύποι είναι διανυσματικοί, που προέρχονται από τους βασικούς τύπους ακεραίων και κινητής υποδιαστολής. Ο κάθε ένας από τους παραπάνω αποτελεί ένα διάνυσμα με τόσες διαστάσεις όσες δηλώνει ο αριθμός στο τέλος του ονόματος του τύπου (1, 2, 3, 4) και η κάθε διάσταση είναι προσβάσιμη με τα πεδία x, y, z, και w, αντίστοιχα. Ενώ στην κάθε διάστασή του περιλαμβάνει δεδομένα του τύπου που δηλώνει το υπόλοιπο του ονόματός του (char, short, int, long, float). Τέλος, σε όσους από τους παραπάνω τύπους υπάρχει ένα u στην αρχή σημαίνει ότι στις διαστάσεις τα δεδομένα είναι χωρίς πρόσημο (unsigned). Έτσι, για παράδειγμα, ο τύπος int3 αποτελεί ένα διάνυσμα τριών διαστάσεων, σε κάθε μια από τις οποίες περιλαμβάνει έναν ακέραιο αριθμό (integer- int). Όλα είναι εξοπλισμένα με μια λειτουργία κατασκευαστή του make_ <type name>; Για παράδειγμα με τον παρακάτω τρόπο δημιουργεί ένα διάνυσμα τύπου int2 με τιμές (x, y). int2 make_int2 (int x, int y); Σε αυτό το έγγραφο χρησιμοποιούμε κυρίως δύο μεταβλητές διανυσματικού τύπου, την uint3 η οποία είναι στη λίστα με αυτές που μόλις εξηγήσαμε, καθώς και η dim3. Η μεταβλητή τύπου dim3 ουσιαστικά αποτελεί μια μεταβλητή τύπου uint3, στην οποία κάθε διάσταση που δεν αρχικοποιείται παίρνει αυτόματα τιμή ένα (1). Οι μεταβλητές dim3 είναι διανύσματα ακεραίων των 32bit με διάσταση τρία και παίρνουν τιμή μέσω της συνάρτησης: dim3(int x, int y, int z) Μπορούμε να ορίσουμε μία μεταβλητή τύπου dim3 όπως κάθε άλλο τύπο: dim3 variable; και τέλος μπορούμε να δώσουμε και άμεσα τιμές στα στοιχεία του διανύσματος αρκεί να λάβουμε υπόψη την αναπαράσταση της, όπου ισχύουν τα ίδια ακριβώς με την πρόσβαση σε κάθε πεδίο σύμφωνα με τα αντίστοιχα λατινικά γράμματα: 15

22 struct dim3 { int x; int y; int z; } Ας δούμε και ένα παράδειγμα: θέλουμε να ορίσουμε τη μεταβλητή που έχει το μέγεθος του μπλοκ σε δύο διαστάσεις, από δεκαέξι (16) η καθεμία, με συνολικό πλήθος νημάτων ανά μπλοκ διακόσα πενήντα έξι (256). Για να το επιτύχουμε δηλώνουμε το εξής: dim3 blocksize = dim3 ( 16, 16, 1 ) ; το οποίο έχει το ίδιο ακριβώς αποτέλεσμα με το: dim3 blocksize = dim3 ( 16, 16 ) ; Στο υποκεφάλαιο που ακολουθεί (2 Δ. γ) εξηγούμε τις λεπτομερώς τις ιδιότητες των μεταβλητών που ορίζονται στο πρόγραμμα και αμέσως μετά (2 Δ. δ) το πως αυτές περνάνε σαν όρισμα στην συνάρτηση που θα εκτελεστεί στη κάρτα γραφικών. γ. Ενσωματωμένες Built-in μεταβλητές Υπάρχουν τέσσερις μεταβλητές στις οποίες έχει πρόσβαση κάθε νήμα της εφαρμογής και αποτιμώνται κατά την εκκίνηση εκτέλεσης του εκάστοτε υπολογιστικού πυρήνα. Οποιαδήποτε συνάρτηση του τύπου global και device έχουν πρόσβαση στις παρακάτω μεταβλητές. Οι δύο πρώτες είναι οι μεταβλητές που προσπαθούμε να ρυθμίσουμε σε αυτήν την εργασία, για να βρούμε αυτές που θα μας οδηγήσουν στην πιο γρήγορη εκτέλεση. Αν και ασχολούμαστε με αυτές σε όλη την εργασία, σε αυτήν την ενότητα θα κάνουμε μία πιο γενική επισκόπηση, ή αλλιώς μία καταγραφή για να τις έχουμε συγκεντρωμένες. griddim : Αυτή η μεταβλητή είναι τύπου dim3 και περιλαμβάνει το μέγεθος των διαστάσεων του πλέγματος που εκτελείται τη δεδομένη στιγμή. Το πλέγμα μπορεί να είναι από μονοδιάστατο μέχρι τρισδιάστατο και η τιμή που μπορεί να πάρει η κάθε διάσταση είναι μέχρι Η griddim έχει την ίδια τιμή για όλα τα νήματα της εφαρμογής. blockdim : Η μεταβλητή αυτή αντιπροσωπεύει το πλήθος των νημάτων ανά μπλοκ και είναι κι αυτή, τύπου dim3. Δηλαδή περιλαμβάνει τα μεγέθη των διαστάσεων του κάθε μπλοκ νημάτων. Εφόσον όλα τα μπλοκ της εφαρμογής θα έχουν την ίδια διάσταση, αυτή η μεταβλητή θα έχει την ίδια τιμή σε όλα τα νήματα της εφαρμογής 16

23 ανεξάρτητα από το σε ποιο μπλοκ ανήκει. Μπορεί κι αυτή όπως και η προηγούμενη, να είναι από μονοδιάστατη μέχρι τρισδιάστατη. Με τη διαφορά ότι οι δύο πρώτες διαστάσεις μπορούν να πάρουν μέγιστη τιμή 1024 και η τρίτη μέγιστη τιμή 64. Επίσης το μέγιστο πλήθος τον νημάτων ανά μπλοκ δεν μπορεί να υπερβαίνει τα Αυτό σημαίνει ότι το γινόμενο των τριών διαστάσεων που αναφέραμε απαγορεύεται να ξεπερνάει αυτήν την τιμή. blockidx : Η μεταβλητή είναι τύπου uint3 και περιλαμβάνει τις συντεταγμένες της θέσης του μπλοκ στο οποίο ανήκει το συγκεκριμένο νήμα εκτέλεσης. Συνεπώς τα νήματα του ίδιου μπλοκ θα έχουν την ίδια τιμή. threadidx : Κι αυτή η μεταβλητή είναι τύπου uint3 και περιλαμβάνει τις συντεταγμένες της θέσης του συγκεκριμένου νήματος, στο μπλοκ στο οποίο ανήκει. Όλα τα νήματα ενός μπλοκ έχουν διαφορετική τιμή στη μεταβλητή threadidx του καθενός. Δεν επιτρέπετε οποιαδήποτε αλλαγή στην τιμή των παραπάνω μεταβλητών κατά τη διάρκεια της εκτέλεσης, ενώ η διεύθυνσή τους στη μνήμη δεν μπορεί να παρθεί. Τονίζεται ότι η χρησιμότητα των παραπάνω μεταβλητών είναι πολύ μεγάλη, καθώς ουσιαστικά είναι αυτές που εκμεταλλεύεται κανείς, ώστε να διαφοροποιεί την ροή εκτέλεσης και τα δεδομένα προς επεξεργασία σε κάθε ξεχωριστό νήματος. δ. Ορισμός παραμέτρων εκτέλεσης Η κλήση του υπολογιστικού πυρήνα που γίνεται από τη ΚΜΕ, πρέπει να συμπεριλαμβάνει και τις παραμέτρους εκτέλεσης του συγκεκριμένου πυρήνα. Αυτοί οι παράμετροι εκτέλεσης περιλαμβάνουν τη διάταξη και την οργάνωση του πλέγματος και των μπλοκ που το αποτελούν. Ουσιαστικά, μέσω αυτών των παραμέτρων γνωστοποιείται στη συσκευή το μέγεθος των διαστάσεων του πλέγματος, καθώς και το μέγεθος των διαστάσεων του κάθε μπλοκ. Για να γίνει κάτι τέτοιο, χρησιμοποιούνται οι δύο μεταβλητές τύπου dim3 που αναφέραμε στην προηγούμενη ενότητα. Για να περαστούν σαν παράμετροι γίνεται χρήση των συμβόλων <<< και >>>, τα οποία περικλείουν τις δύο μεταβλητές. Αυτό το όρισμα τοποθετείτε μεταξύ του ονόματος της συνάρτησης που καλείτε και της λίστας των παραμέτρων της κατά την κλήση του υπολογιστικού πυρήνα. Ένα παράδειγμα είναι το εξής: kernel_function<<< griddim, blockdim >>>(...); Στην περίπτωση που έχουμε μόνο μία παράμετρο επιτρέπεται αντί για μεταβλητή τύπου dim3 να χρησιμοποιηθεί μία ακέραια τιμή. Να πούμε ακόμα ότι υπάρχει και άλλη μια προαιρετική παράμετρος, η οποία μπορεί να περαστεί στη συσκευή κατά την κλήση 17

24 οποιουδήποτε πυρήνα. Αυτή είναι το μέγεθος της διαμοιραζόμενης μνήμης που χρειάζεται να δεσμευτεί σε κάθε μπλοκ (SM). Εφόσον, όμως, έχει γραφτεί ρητά στον κώδικα ότι αυτό το όρισμα είναι απαραίτητο. Αυτή είναι μια ακέραια μεταβλητή, η οποία περιλαμβάνει το ποσό μνήμης που θέλουμε σε bytes. Η παράμετρος είναι προαιρετική με προεπιλεγμένη τη μηδενική τιμή για τα bytes της διαμοιραζόμενης μνήμης. Η παραπάνω παράμετρος περνιέται σαν επιπρόσθετη παράμετρος, στο τέλος, εντός των συμβόλων <<< >>>. Η εκτέλεση σε αυτή τη περίπτωση γίνεται της μορφής: kernel_function<<< griddim, blockdim, SharedSize >>>(...); Όλες αυτές οι παράμετροι εκτέλεσης αποτιμούνται πριν την εκτέλεση του πυρήνα και περνάνε στη συσκευή μέσω της διαμοιραζόμενης μνήμης. Όπως άλλωστε και οι παράμετροι που λαμβάνει με τις πληροφορίες που θα επεξεργαστεί. Σε περίπτωση που οι δύο πρώτες παράμετροι δεν είναι εντός των επιτρεπόμενων ορίων. Αν κάποια διάσταση έχει μεγαλύτερο μέγεθος από το επιτρεπόμενο ή αν το σύνολο των μπλοκ ή των νημάτων ανά μπλοκ έχει ξεπεράσει το μέγιστο. Τότε ο πυρήνας αποτυγχάνει αμέσως. Επίσης, αν το ποσό διαμοιραζόμενης μνήμης που είναι επιθυμητό να δεσμευτεί, ξεπερνά το μέγεθος της διαμοιραζόμενης μνήμης, ο πυρήνας επίσης αποτυγχάνει. Το τελευταίο λάθος αναφέρετε κατά τη μεταγλώττιση, η οποία αποτυγχάνει, αν είναι η λανθασμένη τιμή είναι ορισμένη από την αρχή. ε. Συναρτήσεις διαχείρισης συσκευής Σε ένα σύστημα είναι δυνατόν να υπάρχουν παραπάνω από μια κάρτες γραφικών διαθέσιμες. Οι οποίες μπορεί να είναι επιθυμητό να χρησιμοποιηθούν συνεργατικά σε κάποια εφαρμογή. Όμως, χρειάζεται ένα ξεχωριστό νήμα εκτέλεσης του host για να εκτελεστεί κώδικας σε κάθε μια από τις διαθέσιμες συσκευές. Πρέπει, δηλαδή, να υπάρχει μια ένα-προς-ένα αντιστοιχία μεταξύ νημάτων του host και συσκευών που χρησιμοποιούνται. Η CUDA προσφέρει έναν αριθμό συναρτήσεων με τις οποίες μπορεί κανείς να διαχειριστεί τις διαθέσιμες στο σύστημά συσκευές. Οι σημαντικότερες από αυτές περιγράφονται στην συνέχεια: cudagetdevicecount(): Αυτή η συνάρτηση επιστρέφει σε μια μεταβλητή στον host, τον αριθμό των ενεργοποιημένων συσκευών που υπάρχουν στο σύστημα και υποστηρίζουν το CUDA (CUDA-enable devices). cudagetdeviceproperties(): Αυτή η συνάρτηση είναι πιο εξεζητημένη σε σχέση με την προηγούμενη και εκτός από απλή απαρίθμηση των διαθέσιμων συσκευών, επιστρέφει και τα χαρακτηριστικά τους: τον αριθμό των SM, το μέγεθος της καθολικής και διαμοιραζόμενης μνήμης, το μέγεθος του αρχείου καταχωρητών, μέγιστο μέγεθος και διαστάσεις πλέγματος και μπλοκ και άλλα. Όλα αυτά 18

25 επιστρέφονται σε μια δομή που ονομάζεται cudadeviceprop. cudasetdevice() : Με αυτήν την συνάρτηση επιλέγεται σε ποια συσκευή θα τρέξει ο συγκεκριμένος kernel που καλεί ο host. Αυτό γίνεται με το πέρασμα του αύξοντος αριθμού της επιθυμητής συσκευής σαν παράμετρο αυτής της συνάρτησης. στ. Συναρτήσεις διαχείρισης μνήμης Η CUDA προσφέρει έναν αριθμό από συναρτήσεις για δέσμευση και απελευθέρωση της μνήμης στην κάρτα γραφικών. Καθώς και για την μεταφορά δεδομένων μεταξύ του host και των συσκευών. Οι κυριότερες συναρτήσεις είναι οι εξής: cudamalloc(): Αυτή η συνάρτηση χρησιμοποιείται για τη δέσμευση χώρου μνήμης στην καθολική (global) μνήμη της συσκευής. Η σημασιολογία της είναι αντίστοιχη της γνωστής malloc της πρότυπης βιβλιοθήκης της C. cudamallochost(): Αυτή η συνάρτηση μπορεί να χρησιμοποιηθεί για δέσμευση μνήμης στη μεριά του host αντί για την κλασική malloc() της C. Εάν προτιμηθεί αυτή η συνάρτηση, όταν γίνει η μεταφορά δεδομένων από την κύρια μνήμη, σε θέσεις της καθολικής μνήμης της συσκευής. Τότε επιτυγχάνονται μεγαλύτερες ταχύτητες μεταφοράς σε σχέση με κάθε άλλον τρόπο. cudamemcpy(): Αυτή είναι βασική συνάρτηση που θα χρησιμοποιηθεί για μεταφορές δεδομένων από τον host στη συσκευή και το αντίστροφο. Μέσα στις παραμέτρους αυτής της συνάρτησης καθορίζεται η φορά της μεταφοράς. Επειδή είναι σαν ξεχωριστές συναρτήσεις θα της αναφέρουμε με την σειρά. Η συνάρτηση επιστρέφει όταν ολοκληρωθεί η μεταφορά, και δεν αρχίζει την μεταφορά μέχρι την ολοκλήρωση όλων των προηγούμενων κλήσεων συναρτήσεων. cudamemcpyhosttohost: μεταφέρει δεδομένα από τη μνήμη του host σε μια άλλη θέση μνήμης, πάλι του host. cudamemcpyhosttodevice: μεταφέρει δεδομένα από τη μνήμη του host σε δεσμευμένο χώρο στην καθολική μνήμη της συσκευής. cudamemcpydevicetohost: κάνει μεταφορά από τη μνήμη της συσκευής στον host. cudamemcpydevicetodevice: μεταφέρει δεδομένα από τη συσκευή σε μία άλλη θέση μνήμης της συσκευής. cudamemcpyasync(): Όλες όμως, οι λειτουργίες μνήμης μπορούν επίσης να είναι γίνουν και ασύγχρονα, ώστε να επιστρέφουν αμέσως. Αυτή η συνάρτηση είναι ένα παράδειγμα για την επίτευξη της ασύγχρονης αντιγραφής. 19

26 3 Τεχνικές λεπτομέρειες των προγραμμάτων CUDA Για τους σκοπούς της εργασία γράφτηκαν τρία (3) προγράμματα σε CUDA. Τα οποία έχουν την ιδιότητα να τρέχουν επιτυχώς για οποιοδήποτε παράμετρο παίρνουν κατά την εκτέλεση. Οι παράμετροι που δέχονται είναι πέντε (5). Πρώτα λαμβάνουνε τον αριθμό των στοιχείων που θα επεξεργαστούν. Για τα δύο πρώτα ο αριθμός αυτός υψώνεται στο τετράγωνο γιατί εκ των προτέρων θέλουμε τα στοιχεία που θα επεξεργαστούν να καλύπτουν όσο το δυνατών όλη τη χωρητικότητα της μνήμης της κάρτας γραφικών (1GB), για να γίνεται αξιοποίηση των δυνατοτήτων της. Οι υπόλοιπες 4 παράμετροι είναι οι τιμές των διαστάσεων του μεγέθους του μπλοκ και του μεγέθους του πλέγματος. Παρόλο που το μπλοκ και το πλέγμα μπορούν να πάρουν τιμές σε (3) διαστάσεις (x, y, z). Όλες οι υλοποιήσεις γίνονται για 2 διαστάσεις γιατί τα πρώτα δείγματα έδειξαν ότι δεν έχει σημασία στο πως θα σπάσει η τιμή από τι στιγμή που το γινόμενο θα είναι το ίδιο. Είτε βάλεις μπλοκ σε δύο διαστάσεις με τιμές 256 και 2, είτε βάλεις απευθείας σε μία διάσταση την τιμή 512 δεν θα έχει καμία διαφορά στον χρόνο εκτέλεσης. Εννοείτε ότι στην περίπτωση που ορίζουμε μόνο μία διάσταση η δεύτερη παίρνει αυτομάτως την τιμή ένα. Φυσικά αυτό θα αναλυθεί εκτεταμένα στο επόμενο κεφάλαιο, όπου θα φαίνεται ξεκάθαρα το συμπέρασμα με χρήση πειραμάτων. Α. Πρόγραμμα 1 ο - simple Το πρώτο πρόγραμμα είναι κάτι το πολύ απλό για αυτό και ονομάστηκε simple. Αρχικά φορτώνει στην μνήμη της κάρτας γραφικών 2 πίνακες με το ίδιο μέγεθος, έχοντας πρώτα συμπληρωθεί με τυχαίες θετικές ακέραιες τιμές. Η GPU αναλαμβάνει να κάνει μία πράξη μεταξύ των κελιών της ίδιας θέσης του κάθε πίνακα. Ο κάθε μικροεπεξεργαστής εκτελεί τον κώδικα του indexing και αποκτάει ένα μοναδικό αριθμό, ο οποίος δεν υπερβαίνει το μέγεθος του πίνακα και αντιπροσωπεύει την θέση της οποίας θα κάνει την πράξη. Δηλαδή το πρώτο νήμα με αναγνωριστικό αριθμό (id) νήματος (θέση που έχει στο μπλοκ που ανήκει) ίσο με το 0 αλλά και αναγνωριστικό id του μπλοκ (η τιμή του μπλοκ στο σύνολο των μπλοκ που υπάρχουν, το οποίο ορίζει η τιμή του πλέγματος) ίσο με το 0, θα εκτελέσει την πράξη μεταξύ της θέσης 0 του πίνακα Α και της θέσης 0 του πίνακα Β. Θα υπολογίσει αυτή την τιμή σε μία τοπική μεταβλητή και θα την αποθηκεύσει στον πίνακα Α. Από τη στιγμή που δεν υπάρχει καμία εξάρτηση μεταξύ των κελιών και το κάθε νήμα αναλαμβάνει μία πράξη που δεν έχει καμία επίπτωση σε κανένα άλλο νήμα δεν χρειάζεται κάποιος συγχρονισμός. Αφού γίνει η πράξη δεν χρειάζονται πλέων οι συγκεκριμένες τιμές των πινάκων Α και Β στη μνήμη. Για αυτό και αποθηκεύεται το αποτέλεσμα σε έναν εκ των δύο πινάκων, τον Α, που έχουν ήδη δεσμεύσει χώρο στην μνήμη. Αποφεύγοντας έτσι να γίνει χρήση ενός επιπλέον για να κρατάει τα αποτελέσματα. Η πράξη που αναφέρεται θα μπορούσε να είναι ένας απλός πολλαπλασιασμός. Όμως για λόγους αύξησης του χρόνου 20

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

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

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

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

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

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

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

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

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

Παράλληλος προγραμματισμός σε επεξεργαστές γραφικών

Παράλληλος προγραμματισμός σε επεξεργαστές γραφικών Παράλληλος προγραμματισμός σε επεξεργαστές γραφικών Συστήματα Παράλληλης Επεξεργασίας 9ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Νοέμβριος 2010 Περιεχόμενα...1 Σύντομη Ιστορική Αναδρομή...2

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

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 2 η Τύποι Δεδομένων Δήλωση Μεταβλητών Έξοδος Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 7 η Πίνακες Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή Σωτήρης Χριστοδούλου

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

Μάθημα 5: Χαρακτηριστικά της Κ.Μ.Ε.

Μάθημα 5: Χαρακτηριστικά της Κ.Μ.Ε. Μάθημα 5: Χαρακτηριστικά της Κ.Μ.Ε. 5.1 Το ρολόι Κάθε μία από αυτές τις λειτουργίες της Κ.Μ.Ε. διαρκεί ένα μικρό χρονικό διάστημα. Για το συγχρονισμό των λειτουργιών αυτών, είναι απαραίτητο κάποιο ρολόι.

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

Κεφάλαιο 8. Αριθμητική Λογική μονάδα

Κεφάλαιο 8. Αριθμητική Λογική μονάδα Κεφάλαιο 8 Αριθμητική Λογική μονάδα 8.1 Εισαγωγή Στη μηχανική υπολογιστών η αριθμητική/λογική μονάδα (ALU) είναι ένα ψηφιακό κύκλωμα το οποίο εκτελεί αριθμητικούς και λογικούς υπολογισμούς. Η ALU είναι

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

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Α Γενικού Λυκείου (Μάθημα Επιλογής)

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Α Γενικού Λυκείου (Μάθημα Επιλογής) ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α Γενικού Λυκείου (Μάθημα Επιλογής) Σύγχρονα Υπολογιστικά Συστήματα τους υπερυπολογιστές (supercomputers) που χρησιμοποιούν ερευνητικά εργαστήρια τα μεγάλα συστήματα (mainframes)

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

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή 1 Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή μνήμη(cache). Η cache είναι πολύ σημαντική, πολύ γρήγορη,

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΧΗΜΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΟ ΚΕΝΤΡΟ Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού Μάθημα 2ο Aντώνης Σπυρόπουλος v2_061015 Οροι που

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Αρχιτεκτονική Υπολογιστών Άσκηση 6: Ασκήσεις Εξαμήνου Μέρος Β Νοέμβριος 2016 Στην άσκηση αυτή θα μελετήσουμε την εκτέλεση ενός

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

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής Κεφάλαιο 4 ο Ο Προσωπικός Υπολογιστής Μάθημα 4.3 Ο Επεξεργαστής - Εισαγωγή - Συχνότητα λειτουργίας - Εύρος διαδρόμου δεδομένων - Εύρος διαδρόμου διευθύνσεων - Εύρος καταχωρητών Όταν ολοκληρώσεις το μάθημα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 2: Εκφράσεις, πίνακες και βρόχοι 14 Απριλίου 2016 Το σημερινό εργαστήριο

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

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

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

8 FORTRAN 77/90/95/2003

8 FORTRAN 77/90/95/2003 ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 1: Εισαγωγή... 17 1.1. Ανασκόπηση της ιστορίας των υπολογιστών... 18 1.2. Πληροφορία και δεδομένα... 24 1.3. Ο Υπολογιστής... 26 1.4. Δομή και λειτουργία του υπολογιστή... 28 1.5.

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

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

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

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

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

CUDA Compute Unified Device Architecture

CUDA Compute Unified Device Architecture CUDA Compute Unified Device Architecture Καλέρης Κωνσταντίνος Πεµπτοετής φοιτητής του τµήµατος Ηλεκτρολόγων Μηχανικών & Τεχνολογίας Η/Υ του Πανεπιστηµίου Πατρών ee5972@upnet.gr Καλλέργης Γεώργιος Πεµπτοετής

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

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

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

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

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών Η επεξεργασία των δεδομένων ακολουθεί μια στερεότυπη διαδρομή: τα δεδομένα εισάγονται στο υπολογιστικό σύστημα, υφίστανται μια ορισμένη επεξεργασία και

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

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας Κεφάλαιο 3 ο Αρχιτεκτονική Υπολογιστών Μάθημα 3.: Κεντρική Μονάδα Επεξεργασίας Όταν ολοκληρώσεις το κεφάλαιο θα μπορείς: Να σχεδιάζεις την εσωτερική δομή της ΚΜΕ και να εξηγείς τη λειτουργία των επιμέρους

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ www.cslab.ece.ntua.gr Διπλωματικές

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

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

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

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

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

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

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

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

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

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος Κεφάλαιο 10 Υποπρογράμματα 1 10.1 Τμηματικός προγραμματισμός Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης των προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα προγραμμάτων.

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

Τύποι δεδομένων, τελεστές, μεταβλητές

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

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

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

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

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

9. Συστολικές Συστοιχίες Επεξεργαστών

9. Συστολικές Συστοιχίες Επεξεργαστών Κεφάλαιο 9: Συστολικές συστοιχίες επεξεργαστών 208 9. Συστολικές Συστοιχίες Επεξεργαστών Οι συστολικές συστοιχίες επεξεργαστών είναι επεξεργαστές ειδικού σκοπού οι οποίοι είναι συνήθως προσκολλημένοι σε

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

Υπολογιστικά Συστήματα

Υπολογιστικά Συστήματα Υπολογιστικά Συστήματα Ενότητα 3: Βασικά στοιχεία της γλώσσας προγραμματισμού Visual Basic for Applications (VBA) Σαπρίκης Ευάγγελος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά) Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών Συστήματα Παράλληλης Επεξεργασίας 9ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Φεβρουάριος 2014 Περιεχόμενα 1 Εισαγωγή 2 Επεξεργαστές

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ Σχεδιασμός και υλοποίηση υποδομής σημείωσης διεργασιών στον

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1 Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί

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

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

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

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ Η Κεντρική Μονάδα Επεξεργασίας (Central Processing Unit -CPU) ή απλούστερα επεξεργαστής αποτελεί το μέρος του υλικού που εκτελεί τις εντολές ενός προγράμματος υπολογιστή

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

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

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

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

Pascal. 15 Νοεμβρίου 2011

Pascal. 15 Νοεμβρίου 2011 Pascal 15 Νοεμβρίου 011 1 Procedures σε Pascal Στην Pascal μπορούμε να ορίσουμε διαδικασίες (procedures). Αυτές είναι ομάδες εντολών οι οποίες έχουν ένα όνομα. Γράφοντας το όνομα μιας διαδικασίας μπορούμε

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

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

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

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

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΡΧΗ 1ης ΣΕΛΙ ΑΣ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΦΕΒΡΟΥΑΡΙΟΥ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : 7 ΘΕΜΑ Α :

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 2: Μεταβλητές και Σταθερές Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Οργάνωση Η/Υ Ενότητα 1η: Εισαγωγή στην Οργάνωση Η/Υ Άσκηση 1: Αναλύστε τη διαδοχική εκτέλεση των παρακάτω εντολών MIPS με βάση τις

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

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

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

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

Α. Ερωτήσεις Ανάπτυξης

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

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

Μάθημα 4: Κεντρική Μονάδα Επεξεργασίας

Μάθημα 4: Κεντρική Μονάδα Επεξεργασίας Μάθημα 4: Κεντρική Μονάδα Επεξεργασίας 4.1 Γενικά Ο υπολογιστής επεξεργάζεται δεδομένα ακολουθώντας βήμα βήμα, τις εντολές ενός προγράμματος. Το τμήμα του υπολογιστή, που εκτελεί τις εντολές και συντονίζει

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

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών

Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών Παράλληλος Προγραμματισμός σε Επεξεργαστές Γραφικών Συστήματα Παράλληλης Επεξεργασίας 9ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Δεκέμβριος 2015 Περιεχόμενα 2 01 / 2014 Προγραμματισμός

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

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

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

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

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1 Το λειτουργικό σύστημα Προγραμματισμός II 1 lalis@inf.uth.gr Συστήματα υπολογιστών Ειδικού σκοπού συστήματα για μια συγκεκριμένη εφαρμογή η εφαρμογή είναι γνωστή εκ των προτέρων περιορισμένοι υπολογιστικοί

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

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

Παράλληλος Προγραμματισμός με OpenCL

Παράλληλος Προγραμματισμός με OpenCL Παράλληλος Προγραμματισμός με OpenCL Συστήματα Παράλληλης Επεξεργασίας 9ο εξάμηνο, ΣΗΜΜΥ Εργαστήριο Υπολογιστικών Συστημάτων (CSLab) Δεκέμβριος 2017 1 Γενικά για OpenCL 2 Platform Model 3 Execution Model

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

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

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΙΚΟΣ ΔΙΚΤΥΩΝ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΙΚΟΣ ΔΙΚΤΥΩΝ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΕΡΓΑΣΙΑ ΜΕ ΤΙΤΛΟ ΕΠΕΞΕΡΓΑΣΤΕΣ - CPU Μπακρατσάς Γιώργος geback007@yahoo.gr Δεκέμβριος, 2014 Περιεχόμενα ΕΙΣΑΓΩΓΗ... 3 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ... 4 ΧΡΟΝΟΛΟΓΙΕΣ

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

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος Κεφάλαιο 10 Υποπρογράμματα 1 10.1 Τμηματικός προγραμματισμός Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης των προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα προγραμμάτων.

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

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

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ (Τμήματα Υπολογιστή) ΕΚΠΑΙΔΕΥΤΗΣ:ΠΟΖΟΥΚΙΔΗΣ ΚΩΝΣΤΑΝΤΙΝΟΣ ΤΜΗΜΑΤΑ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΗ Κάθε ηλεκτρονικός υπολογιστής αποτελείται

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1

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

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Κεφάλαιο 3

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

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

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ ΣΤΑΘΕΡΕΣ είναι τα μεγέθη που δεν μεταβάλλονται κατά την εκτέλεση ενός αλγόριθμου. Εκτός από τις αριθμητικές σταθερές (7, 4, 3.5, 100 κλπ), τις λογικές σταθερές (αληθής και ψευδής)

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

All Pairs Shortest Path

All Pairs Shortest Path All Pairs Shortest Path χρησιμοποιώντας Κυπριώτη Αικατερίνη 6960 Μόσχογλου Στυλιανός 6978 20 Ιανουαρίου 2012 Περιεχόμενα 1 Πρόλογος 3 2 Ο σειριακός APSP 3 3 Η παραλληλοποίηση με 5 3.1 Το προγραμματιστικό

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

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

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

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης Κεφάλαιο 7 1. Σε τι διαφέρει ο Η/Υ από τις υπόλοιπες ηλεκτρικές και ηλεκτρονικές συσκευές; Που οφείλεται η δυνατότητά του να κάνει τόσο διαφορετικές

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι 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

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

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM). Μνήμες Ένα από τα βασικά πλεονεκτήματα των ψηφιακών συστημάτων σε σχέση με τα αναλογικά, είναι η ευκολία αποθήκευσης μεγάλων ποσοτήτων πληροφοριών, είτε προσωρινά είτε μόνιμα Οι πληροφορίες αποθηκεύονται

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

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C Master Mind εφαρμογή στη γλώσσα προγραμματισμού C Φεβρουάριος/Μάρτιος 2013 v. 0.1 Master-mind: κανόνες παιχνιδιού Στο master mind χρειάζεται να παράγονται κάθε φορά 4 τυχαία σύμβολα από ένα πλήθος 6 διαφορετικών

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

Πρώτη επαφή με το μαθηματικό πακέτο Mathematica

Πρώτη επαφή με το μαθηματικό πακέτο Mathematica Πρώτη επαφή με το μαθηματικό πακέτο Mathematica Με δύο λόγια, μπορούμε να πούμε ότι η Mathematica είναι ένα πρόγραμμα που το χρησιμοποιούμε για να κάνουμε αναλυτικούς και αριθμητικούς υπολογισμούς αλλά

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

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

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

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

Εισαγωγή στην Πληροφορική

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

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

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η 53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η ΠΑΓΚΡΑΤΙ: Φιλολάου & Εκφαντίδου 26 : 210/76.01.470 210/76.00.179 ΘΕΜΑ Α Α1. Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς

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

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init() Πληροφορική & Τηλεπικοινωνίες K18 Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο 2008 Αν. Καθηγητής Δημήτρης Γουνόπουλος Καθηγητής Γιάννης Ιωαννίδης 'Ασκηση 1: Στατικός Κατακερματισμός (Ημερομηνία

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

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΘΕΜΑ Α Α1. Να χαρακτηρίσετε τις προτάσεις που ακολουθούν, γράφοντας στο τετράδιό σας, δίπλα στο

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

Προγραμματισμός Συστημάτων Υψηλών Επιδόσεων (ΗΥ421) Εργασία Εξαμήνου

Προγραμματισμός Συστημάτων Υψηλών Επιδόσεων (ΗΥ421) Εργασία Εξαμήνου Προγραμματισμός Συστημάτων Υψηλών Επιδόσεων (ΗΥ421) Εργασία Εξαμήνου ΟΜΑΔΑ: Ιωαννίδης Σταύρος ΑΕΜ: 755 Ντελής Γιώργος ΑΕΜ: 726 Επιλογή της Εργασίας Για την εργασία μας επιλέξαμε την βελτιστοποίηση της

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΝΑΠΤΥΞΗ ΚΑΙ ΣΧΕΔΙΑΣΗ ΛΟΓΙΣΜΙΚΟΥ Η γλώσσα προγραμματισμού C ΕΡΓΑΣΤΗΡΙΟ 3: Πίνακες, βρόχοι, συναρτήσεις 1 Ιουνίου 2017 Το σημερινό εργαστήριο

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις 5 Απριλίου 01 1 Πίνακες Είδαμε ότι δηλώνοντας μία μεταβλητή κάποιου συγκεκριμένου τύπου δεσμεύουμε μνήμη κατάλληλη για να αποθηκευτεί μία οντότητα

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

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή 1. Ηλεκτρονικός Υπολογιστής Ο Ηλεκτρονικός Υπολογιστής είναι μια συσκευή, μεγάλη ή μικρή, που επεξεργάζεται δεδομένα και εκτελεί την εργασία του σύμφωνα με τα παρακάτω

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

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο 2015 2016 Ι. Ιωαννίδης Άσκηση 3: Αποθήκευση κατά στήλες Προθεσμία: 25 Ιανουαρίου 2016, 11:59μμ Ο σκοπός της εργασίας

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

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΚΕΦΑΛΑΙΑ 3 και 9 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΕΣ Δεδομένα αφαιρετική αναπαράσταση της πραγματικότητας και συνεπώς μία απλοποιημένη όψη της δηλαδή.

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια: Εργαστήριο 6: 6.1 Δομές Επανάληψης Βρόγχοι (Loops) Όταν θέλουμε να επαναληφθεί μια ομάδα εντολών τη βάζουμε μέσα σε ένα βρόχο επανάληψης. Το αν θα (ξανα)επαναληφθεί η εκτέλεση της ομάδας εντολών καθορίζεται

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

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου; 5.1 Επίδοση αλγορίθμων Μέχρι τώρα έχουμε γνωρίσει διάφορους αλγόριθμους (αναζήτησης, ταξινόμησης, κ.α.). Στο σημείο αυτό θα παρουσιάσουμε ένα τρόπο εκτίμησης της επίδοσης (performance) η της αποδοτικότητας

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

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο 2006-07

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο 2006-07 Ενότητα 4 Εισαγωγή στην Πληροφορική Κεφάλαιο 4Α: Αναπαράσταση πληροφορίας Κεφάλαιο 4Β: Επεξεργαστές που χρησιµοποιούνται σε PCs Χειµερινό Εξάµηνο 2006-07 ρ. Παναγιώτης Χατζηδούκας (Π..407/80) Εισαγωγή

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

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

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

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

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

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

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

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

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

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

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

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

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

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

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

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών 3.1.1 Λογισμικό και Υπολογιστικό Σύστημα Τι είναι το υλικό ενός υπολογιστικού συστήματος; Το σύνολο των ηλεκτρονικών και μηχανικών μερών του που έχουν

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

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2009 2010 Καθηγητής. Γουνόπουλος Άσκηση 1 Σκοπός της εργασίας αυτής είναι η κατανόηση της εσωτερικής λειτουργίας

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

Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής

Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής Βασισμένο σε μια εργασία των Καζαρλή, Καλόμοιρου, Μαστοροκώστα, Μπαλουκτσή, Καλαϊτζή, Βαλαή, Πετρίδη Εισαγωγή Η Εξελικτική Υπολογιστική

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

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

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

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

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

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

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

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα. ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης των προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα προγραμμάτων. Όταν ένα τμήμα προγράμματος επιτελεί ένα αυτόνομο

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

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

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΘΕΜΑ 1 (Α) Σημειώστε δίπλα σε κάθε πρόταση «Σ» ή «Λ» εφόσον είναι σωστή ή λανθασμένη αντίστοιχα. 1. Τα συντακτικά λάθη ενός προγράμματος

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 10 ΟΥ ΚΕΦΑΛΑΙΟΥ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Πως ορίζεται ο τμηματικός προγραμματισμός; Τμηματικός προγραμματισμός

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 1η εβδομάδα. Κοζάνη, 5 Οκτωβρίου 2007. Βασικά στοιχεία γραφής προγραμμάτων με τη C: α) Case Sensitive!!! β) Δυνατότητα εισαγωγής σχολίων με /*

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

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει; ΜΑΘΗΜΑ 7 Κλήση αλγορίθμου από αλγόριθμο Αναδρομή Σ χ ο λ ι κ ο Β ι β λ ι ο ΥΠΟΚΕΦΑΛΑΙΟ 2.2.7: ΕΝΤΟΛΕΣ ΚΑΙ ΔΟΜΕΣ ΑΛΓΟΡΙΘΜΟΥ ΠΑΡΑΓΡΑΦΟI 2.2.7.5: Κλήση αλγορίθμου από αλγόριθμο 2.2.7.6: Αναδρομή εισαγωγη

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

Το υλικό του υπολογιστή

Το υλικό του υπολογιστή Το υλικό του υπολογιστή Ερωτήσεις 1. Τι αντιλαμβάνεστε με τον όρο υλικό; Το υλικό(hardware) αποτελείται από το σύνολο των ηλεκτρονικών τμημάτων που συνθέτουν το υπολογιστικό σύστημα, δηλαδή από τα ηλεκτρονικά

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

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

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

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