Παράλληλα και Κατανεµηµένα Συστήµατα. Εισαγωγή

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

Download "Παράλληλα και Κατανεµηµένα Συστήµατα. Εισαγωγή"

Transcript

1 Παράλληλα και Κατανεµηµένα Συστήµατα 1 Εισαγωγή Στόχος της περιγραφής που ακολουθεί, αποτελεί η παρουσίαση του περιβάλλοντος διεπαφής ανταλλαγής µηνυµάτων (message passing interface) MPI δια της χρήσεως του οποίου είναι δυνατή η δηµιουργία εφαρµογών που στηρίζονται στις αρχές του παράλληλου προγραµµατισµού. Το πρότυπο MPI δεν είναι τίποτε άλλο από µια συλλογή συναρτήσεων που µπορεί να χρησιµοποιηθεί µέσα από προγράµµατα που είναι γραµµένα σε γλώσσα C ή σε γλώσσα Fortran και τα οποία επιτρέπουν τη δηµιουργία και χρήση ενός πλήθους διεργασιών που εκτελούνται παράλληλα στον ίδιο ή σε διαφορετικούς υπολογιστές και επικοινωνούν µεταξύ τους χρησιµοποιώντας το µοντέλο ανταλλαγής µηνυµάτων. Σε αντίθεση µε το σειριακό µοντέλο προγραµµατισµού στο οποίο λαµβάνει χώρα η χρήση ενός και µοναδικού επεξεργαστή που επικοινωνεί συνεχώς µε την κεντρική µνήµη του συστήµατος δια µέσου διαδικασιών ανάγνωσης και εγγραφής, στο αντίστοιχο παράλληλο µοντέλο υπονοείται η χρήση πολλών διαφορετικών επεξεργαστών κάθε ένας εκ των οποίων χρησιµοποιεί τη δική του περιοχή µνήµης και τις δικές του µεταβλητές προγράµµατος. Αυτό σηµαίνει πως οι εν λόγω επεξεργαστές δεν µοιράζονται κάποιο κοινό φυσικό χώρο διευθύνσεων µνήµης, και εποµένως οι ενέργειες µιας διεργασίας που εκτελείται σε ένα υπολογιστή, δεν είναι ορατές από τις υπόλοιπες διεργασίες του συστήµατος. Εάν δε, κάποια διεργασία απαιτεί τη χρήση µιας µεταβλητής η οποία ανήκει στο χώρο κάποιας άλλης διεργασίας, η µεταβλητή αυτή δεν είναι κοινή στις δύο διεργασίες, αλλά θα πρέπει να αποσταλεί από τη µια διεργασία στην άλλη δια µέσου κάποιου µηνύµατος (message). Υπάρχουν πολλές διαφορετικές προσεγγίσεις τις οποίες µπορούµε να ακολουθήσουµε για να προχωρήσουµε στη δηµιουργία παράλληλων εφαρµογών και στις σελίδες που ακολουθούν θα περιγράψουµε το πρότυπο MPI. Αν και οι πρώτες προσπάθειες για την ανάπτυξη παράλληλων εφαρµογών πραγµατοποιήθηκαν στις αρχές της δεκαετίας του 1980 µε την εισαγωγή της έννοιας της κατανεµηµένης µνήµης και του παράλληλου προγραµµατισµού, το πρότυπο MPI χρησιµοποιήθηκε για πρώτη φορά τον Απρίλιο του 1992 από το πανεπιστήµιο της Virginia, ενώ το Νοέµβριο του ιδίου έτους πραγµατοποιήθηκε η πρώτη συνάντηση της οµάδας εργασία στη Minneapolis. Στόχος αυτής της συνάντησης ήταν ο καθορισµός των βασικών χαρακτηριστικών του προτύπου και η δηµιουργία του MPI Forum µέσα από το οποίο ήταν δυνατή η περαιτέρω ανάπτυξη του εν λόγω περιβάλλοντος και η προτυποποίησή του. Το τελευταίο σηµαντικό στάδιο της σύντοµης ιστορίας του MPI είναι η διάσκεψη Supercomputing 93 όπου και παρουσιάζονται προσχέδια του MPI, ενώ η τελική έκδοση του εν λόγω προτύπου παρουσιάστηκε το Μάιο του Οι παραπάνω αναφορές αφορούν την πρώτη έκδοση του προτύπου MPI που είναι γνωστή ως MPI1 ενώ το εκέµβριο του 1995, το πρότυπο αυτό επεκτάθηκε και µετονοµάσθηκε σε MPI2, που είναι και το µοντέλο που χρησιµοποιείται µέχρι σήµερα.

2 Το περιβάλλον προγραµµατισµού MPI 2 Οι δοµικές µονάδες του MPI Η στοιχειώδης µονάδα µιας εφαρµογής MPI είναι η διεργασία (process) η οποία δηµιουργείται και εκτελείται ανεξάρτητα από τις υπόλοιπες διεργασίες του συστήµατος χρησιµοποιώντας τους δικούς της πόρους (resources). Η κάθε διεργασία ταυτοποιείται µε µοναδικό τρόπο από ένα κωδικό διεργασίας (Process Id, PID) που στην ορολογία του προτύπου ονοµάζεται τάξη (rank) και λαµβάνει τιµές µεγαλύτερες ή ίσες µε το µηδέν. Εάν το πλήθος των διεργασιών που εκτελούνται στο σύστηµα είναι γνωστό και ίσο µε Ν, τότε οι κωδικοί αυτών των διεργασιών θα έχουν τις Ν συνεχόµενες τιµές 0,1,2,3,.,Ν-1. Επειδή οι τάξεις των διεργασιών προσδιορίζουν τις διεργασίες του συστήµατος µε µοναδικό τρόπο, χρησιµοποιούνται πάρα πολύ συχνά από τους προγραµµατιστές των εφαρµογών MPI για να προσδιορίσουν την προέλευση και τον προορισµό των διακινούµενων µηνυµάτων. Ένα σύνολο Ν διατεταγµένων διεργασιών που χαρακτηρίζεται από τιµές τάξεων 0,1,2,,Ν-1 είναι γνωστό ως οµάδα (group). Σε µια εφαρµογή MPI µπορούµε να ορίσουµε πολλές οµάδες διεργασιών κάθε µια από τις οποίες χαρακτηρίζεται από το δικό της κωδικό (group id). Ας σηµειωθεί πως αυτός ο κωδικός είναι άγνωστος στο χρήστη, και υπό αυτή την έννοια µια οµάδα διεργασιών χαρακτηρίζεται ως ένα αδιαφανές αντικείµενο µε άγνωστη εσωτερική δοµή. Εάν ο χρήστης επιθυµεί να προσπελάσει τις τιµές των ιδιοτήτων µιας οµάδας διεργασιών θα πρέπει να χρησιµοποιήσει ειδικές συναρτήσεις του MPI προκειµένου να ανακτήσει αυτές τις τιµές. Ένα τελευταίο σηµαντικό χαρακτηριστικό του προτύπου MPI είναι η έννοια του µέσου επικοινωνίας (communicator) δια της χρήσεως του οποίου λαµβάνει χώρα η ανταλλαγή µηνυµάτων ανάµεσα σε δύο διεργασίες. Αυτή η ενδιάµεση οντότητα χαρακτηρίζεται και αυτή από την ύπαρξη κάποιου κωδικού, η ανάκτηση του οποίου µπορεί να λάβει χώρα χρησιµοποιώντας κάποια από τις συναρτήσεις του MPI. Είναι προφανές πως για να είναι δυνατή η επικοινωνία ανάµεσα σε δύο διεργασίες αυτές θα πρέπει να ανήκουν στον ίδιο communicator. Η χρήση αυτού του τρόπου επικοινωνίας διασφαλίζει το σωστό τρόπο διακίνησης της πληροφορίας και ελαχιστοποιεί την πιθανότητα εµφάνισης προβληµάτων όσον αφορά την αποστολή και λήψη των µηνυµάτων από τις διεργασίες της εφαρµογής. Μιλώντας γενικά, ένας communicator ορίζεται ως ένα τοπικό αντικείµενο (local object) που χρησιµοποιείται για την αναπαράσταση ενός χώρου µέσα στον οποίο ανήκουν οι διεργασίες που έρχονται σε επικοινωνία (communication domain). Αυτός ο χώρος ορίζεται ως µια καθολική (global) και κατανεµηµένη δοµή που επιτρέπει στις διεργασίες µιας οµάδας να επικοινωνήσουν είτε µεταξύ τους, είτε µε τις διεργασίες µιας άλλης οµάδας. Στην περίπτωση κατά την οποία οι διεργασίες που επικοινωνούν ανήκουν στην ίδια οµάδα, ο communicator είναι γνωστός ως intracommunicator ενώ στην περίπτωση κατά την οποία οι διεργασίες που επικοινωνούν ανήκουν σε διαφορετικές οµάδες, ο communicator είναι γνωστός ως intercommunicator. Μια διεργασία µπορεί να συµµετάσχει σε πολλούς επικοινωνιακούς χώρους (communication domains). Με τον ίδιο τρόπο, δύο επικοινωνιακοί χώροι µπορεί να περιέχουν οµάδες διεργασιών που να περιέχουν κοινές διεργασίες ή να επικαλύπτονται πλήρως (να περιέχουν τις ίδιες διεργασίες ή η µια να είναι υποσύνολο ή υπερσύνολο της άλλης). Αυτό το χαρακτηριστικό επιτρέπει σε µια διεργασία να επικοινωνήσει µε µια άλλη διεργασία δια µέσου δύο

3 Παράλληλα και Κατανεµηµένα Συστήµατα 3 διαφορετικών και διακριτών µεταξύ τους επικοινωνιακών χώρων. Αυτό σηµαίνει πως µια διεργασία µπορεί να ανήκει ταυτόχρονα σε πολλούς επικοινωνιακούς χώρους, σε κάθε έναν από τους οποίους θα περιγράφεται και από διαφορετική τιµή τάξης. Ένα τελευταίο χαρακτηριστικό που αξίζει να αναφερθεί, είναι η δυνατότητα που έχει µια διεργασία να αποστείλει ένα µήνυµα στον εαυτό της. Στην περίπτωση αυτή ωστόσο απαιτείται η αποθήκευση του µηνύµατος σε ένα χώρο ενδιάµεσης αποθήκευσης του συστήµατος (system buffer). Αυτό σηµαίνει πως το µήνυµα δεν θα µεταφερθεί απευθείας στην περιοχή µνήµης που έχει δεσµευθεί για την παραλαβή του, αλλά θα διατηρηθεί προσωρινά σε µία περιοχή ενδιάµεσης µνήµης. Ο τρόπος δέσµευσης αυτής της µνήµης καθώς και το µέγιστο µέγεθός της εξαρτώνται από την υλοποίηση που χρησιµοποιείται σε κάθε περίπτωση. Εποµένως γενικά δεν συνίσταται η αποστολή µηνυµάτων από µια διεργασία στον εαυτό της, κάτι που ισχύει ιδιαίτερα για τις παρεµποδιστικές επικοινωνίες που θα παρουσιαστούν στην επόµενη ενότητα. Είδη επικοινωνιών ανάµεσα σε διεργασίες Ο βασικός µηχανισµός επικοινωνίας του MPI είναι η µετάδοση δεδοµένων µεταξύ ενός ζεύγους διεργασιών, εκ των οποίων η πρώτη αποστέλλει το µήνυµα ενώ η δεύτερη το παραλαµβάνει. Αυτός ο τρόπος επικοινωνίας ονοµάζεται επικοινωνία από σηµείο σε σηµείο (point to point communication) και αποτελεί το µοντέλο επικοινωνίας για ένα πολύ µεγάλο εύρος εφαρµογών MPI. Το MPI προσφέρει ένα σύνολο συναρτήσεων που χρησιµοποιείται για την αποστολή και λήψη δεδοµένων µε τη µορφή µηνυµάτων. Το κάθε ένα από αυτά τα µηνύµατα χαρακτηρίζεται από µια τυποποίηση συγκεκριµένης µορφής και ταυτοποιείται µονοσήµαντα από µία ετικέτα (tag) που µας επιτρέπει να το ξεχωρίσουµε από τα υπόλοιπα µηνύµατα της εφαρµογής. Αυτή η τυποποίηση είναι εξαιρετικά σηµαντική και είναι ιδιαίτερα χρήσιµη σε περιπτώσεις επικοινωνίας διεργασιών που ανήκουν σε ετερογενή συστήµατα (δηλαδή σε συστήµατα που χαρακτηρίζονται από διαφορετική αρχιτεκτονική) και η οποία απαιτεί την ενδιάµεση µετατροπή των διακινούµενων δεδοµένων. Από την άλλη µεριά η χρήση της ετικέτας προσφέρει και αυτή αρκετά πλεονεκτήµατα, όπως είναι για παράδειγµα η δυνατότητα της σωστής ταξινόµησης µιας οµάδας µηνυµάτων που παραλαµβάνονται µε σειρά διαφορετική από εκείνη µε την οποία έχουν σταλεί. Σε πλήρη αναλογία µε τα πακέτα δεδοµένων που διακινούνται σε ένα δίκτυο υπολογιστών, ένα µήνυµα του προτύπου MPI δεν περιέχει µόνο τα δεδοµένα προς αποστολή, αλλά και πολλές άλλες πληροφορίες οι οποίες είναι αναγκαίες για την επιτυχή µετάδοση του µηνύµατος. Οι πληροφορίες αυτές περιλαµβάνουν µεταξύ των άλλων το πλήθος και τον τύπο των δεδοµένων που περιλαµβάνονται στο µήνυµα, τις τάξεις των διεργασιών αποστολής και λήψης, την ετικέτα του µηνύµατος και το όνοµα του πληροφοριοδότη δια της χρήσεως του οποίου επικοινωνούν οι δύο διεργασίες. Οι παραπάνω πληροφορίες διαβιβάζονται ως ορίσµατα στη συνάρτηση που χρησιµοποιείται για την αποστολή του µηνύµατος, ενώ εντελώς ανάλογη είναι

4 Το περιβάλλον προγραµµατισµού MPI 4 και η κλήση της συνάρτησης παραλαβής του µηνύµατος, η οποία ωστόσο περιέχει και ένα επιπλέον όρισµα που περιλαµβάνει πληροφορίες σχετικές µε τη διαδικασία παραλαβής. Χρησιµοποιώντας αυτές τις δύο συναρτήσεις (καθώς και ορισµένες άλλες που χρησιµοποιούνται για την αρχικοποίηση και τον τερµατισµό του προτύπου), µπορούµε να κατασκευάσουµε όλες σχεδόν τις εφαρµογές που χαρακτηρίζονται από αυτή τη διαδικασία ανταλλαγής µηνυµάτων. Το δεύτερο είδος επικοινωνίας που υποστηρίζει το πρωτόκολλο MPI, είναι οι συλλογικές επικοινωνίες (collective communications) οι οποίες χαρακτηρίζονται από την ύπαρξη περισσότερων από δύο διαδικασιών. Οι πιο σηµαντικές από αυτές τις µορφές επικοινωνίας, είναι η εκποµπή (broadcasting), όπου ένα µήνυµα αποστέλλεται ενιαίο σε όλες τις διεργασίες, η διασπορά (scattering) όπου ένα µήνυµα διασπάται σε µικρότερα κοµµάτια κάθε ένα εκ των οποίων αποστέλλεται και σε µια διαφορετική διεργασία, η συλλογή (gather) όπου το σύνολο των µηνυµάτων που αποστέλλονται από όλα τα µέλη µιας οµάδας διεργασιών παραλαµβάνεται από µια απλή διεργασία, και η µείωση (reduce) όπου µια διεργασία συλλέγει δεδοµένα από τις υπόλοιπες διεργασίες της οµάδας, και ταυτόχρονα υπολογίζει κάποια συνάρτηση αυτών των δεδοµένων (για παράδειγµα το µέσο όρο τους). Σε όλες τις παραπάνω διεργασίες, υπάρχει µια κεντρική διεργασία η οποία είτε αποστέλλει τις πληροφορίες στις υπόλοιπες διεργασίας της οµάδας, είτε συλλέγει τα µηνύµατα που αποστέλλονται από αυτές. Στην περίπτωση των διεργασιών από σηµείο σε σηµείο, οι συναρτήσεις του MPI εµφανίζονται σε δύο διαφορετικές µορφές που φέρουν τα ονόµατα παρεµποδιστικές (blocking) και µη παρεµποδιστικές (non blocking) συναρτήσεις. Μια συνάρτηση λέγεται παρεµποδιστική όταν η κλήση της µέσα από κάποια διεργασία αναστέλλει τη λειτουργία αυτής της διεργασίας, µέχρι την ολοκλήρωση της λειτουργίας της συνάρτησης που έχει κληθεί. Στην αντίθετη περίπτωση, κατά την οποία η κλήση της συνάρτησης δεν προκαλεί την αναστολή της λειτουργίας της διεργασίας, η εν λόγω συνάρτηση λέγεται µη παρεµποδιστική. Για να κατανοήσουµε τη διαφορά που υφίσταται ανάµεσα στις παρεµποδιστικές και στις µη παρεµποδιστικές συναρτήσεις, ας υποθέσουµε πως η συνάρτηση που χρησιµοποιείται για την αποστολή µηνυµάτων, ονοµάζεται send. Η συνάρτηση αυτή εκτός των άλλων θα δέχεται ως όρισµα και ένα δείκτη προς την περιοχή µνήµης στην οποία βρίσκονται τα δεδοµένα προς αποστολή. Ας υποθέσουµε πως αυτή η περιοχή µνήµης είναι ένας πίνακας που περιέχει 10 πραγµατικούς αριθµούς. Στο πρώτο βήµα της διαδικασίας, θα πρέπει να αρχικοποιήσουµε αυτή την περιοχή µνήµης, ορίζοντας το περιεχόµενο των θέσεων µνήµης που περιλαµβάνονται σε αυτή. Στη συνέχεια θα πρέπει να καλέσουµε τη συνάρτηση send για να αποστείλουµε αυτά τα δεδοµένα σε κάποια από τις διεργασίες της εφαρµογής. Εάν η εντολή send χρησιµοποιείται µε την παρεµποδιστική της µορφή, τότε για όσο χρονικό διάστηµα λαµβάνει χώρα η αποστολή των 10 πραγµατικών αριθµών στη διεργασία παραλήπτη, η λειτουργία της διεργασίας αποστολέα αναστέλλεται. Μετά την ολοκλήρωση της διαδικασίας αποστολής της παραπάνω πληροφορίας, η συνάρτηση send τερµατίζει τη λειτουργία της, κάτι που επιτρέπει τη συνέχιση και ολοκλήρωση της λειτουργίας της διεργασίας αποστολέα. Εντελώς ανάλογη µε την προηγούµενη κατάσταση, είναι και αυτή που συσχετίζεται µε τον τρόπο λειτουργίας της διεργασίας παραλήπτη. Εάν η εν λόγω

5 Παράλληλα και Κατανεµηµένα Συστήµατα 5 διεργασία χρησιµοποιεί την παρεµποδιστική έκδοση της receive η οποία νοείται ως η συνάρτηση που διαβάζει το περιεχόµενο του µηνύµατος που έχει σταλεί τότε η λειτουργία της διεργασίας παραλήπτη θα ανασταλεί κατά το χρονικό διάστηµα ανάγνωσης της πληροφορίας. Όταν η διακινούµενη πληροφορία έχει παραληφθεί στο σύνολό της από τη διεργασία παραλήπτη, η συνάρτηση receive θα αναστείλει τη λειτουργία της κάτι που θα επιτρέψει τη συνέχιση και τελικά την ολοκλήρωση της λειτουργίας της διεργασίας παραλήπτη. Στην περίπτωση κατά την οποία χρησιµοποιούνται οι µη παρεµποδιστικές εκδόσεις των συναρτήσεων αποστολής και παραλαβής µηνυµάτων, η κατάσταση είναι εντελώς διαφορετική. Στην περίπτωση αυτή η κλήση της µη παρεµποδιστικής έκδοσης της send, δεν αναστέλλει τη λειτουργία της διεργασίας αποστολέα, η οποία συνεχίζεται κανονικά και εκτελείται παράλληλα µε την αποστολή του µηνύµατος. Ωστόσο σε µια τέτοια διαδικασία, ενδέχεται να ανακύψουν σηµαντικά προβλήµατα στην περίπτωση διαδοχικών κλήσεων της send µέσα σε µικρό χρονικό διάστηµα. Αυτό σηµαίνει πως αν καλέσουµε την εν λόγω συνάρτηση για να αποστείλουµε το περιεχόµενο µιας περιοχής µνήµης και πριν την ολοκλήρωση αυτής της αποστολής καλέσουµε τη send για δεύτερη φορά µε το ίδιο όρισµα όσον αφορά τη θέση µνήµης αλλά διαφορετικό περιεχόµενο, τότε θα λάβει χώρα επανεγγραφή της περιοχής µνήµης και οριστική απώλεια του περιεχοµένου του πρώτου µηνύµατος που δεν έχει ακόµη αποσταλεί. Αυτό το πρόβληµα θα µεταφερθεί προφανώς και στη διεργασία παραλήπτη, η οποία θα διαβάσει εσφαλµένο περιεχόµενο από το οποίο δεν βγαίνει κανένα νόηµα. Τα παραπάνω προβλήµατα µπορούν να αποφευχθούν εάν πριν την αποστολή του δεύτερου µηνύµατος εξετάσουµε εάν η αποστολή του πρώτου µηνύµατος έχει ολοκληρωθεί. Εάν η αποστολή του πρώτου µηνύµατος έχει ολοκληρωθεί µπορούµε να στείλουµε το δεύτερο µήνυµα χωρίς κανένα πρόβληµα, ενώ στην αντίθετη περίπτωση θα πρέπει να περιµένουµε την περάτωση της αποστολής του πρώτου µηνύµατος, Οι παραπάνω διαδικασίες µπορούν να υλοποιηθούν πάρα πολύ εύκολα, αφού το MPI παρέχει συναρτήσεις που υποστηρίζουν πλήρως όλες αυτές τις διαφορετικές µορφές αποστολής και λήψης δεδοµένων. Ένα δεύτερο είδος διαχωρισµού που µπορούµε να εφαρµόσουµε για τις διαδικασίες επικοινωνίας από σηµείο σε σηµείο που λαµβάνουν χώρα ανάµεσα στις διεργασίες του συστήµατος, έχει να κάνει µε τη χρονική στιγµή περάτωσης της αποστολής του µηνύµατος σε σχέση µε τη χρονική στιγµή εκκίνησης της διαδικασίας παραλαβής του. Χρησιµοποιώντας αυτό το κριτήριο, µπορούµε να ορίσουµε τέσσερις διαφορετικές µορφές επικοινωνίας από σηµείο σε σηµείο, οι οποίες σε γενικές γραµµές, είναι οι εξής: Πρότυπη επικοινωνία (standard communication): σε αυτόν τον τύπο επικοινωνίας η απόφαση για τη δέσµευση ή όχι ενδιάµεσης περιοχής µνήµης στην οποία θα αποθηκευτεί προσωρινά το εξερχόµενο µήνυµα, λαµβάνεται από το MPI και όχι από το χρήστη. Στην περίπτωση κατά την οποία πραγµατοποιηθεί αυτή η διαδικασία της ενδιάµεσης αποθήκευσης του µηνύµατος, η διαδικασία αποστολής του δύναται να περατωθεί ακόµη και εάν η αντίστοιχη διαδικασία παραλαβής του

6 Το περιβάλλον προγραµµατισµού MPI 6 µηνύµατος δεν έχει ξεκινήσει ακόµη. Στην αντίθετη περίπτωση όµως, κατά την οποία δεν είναι διαθέσιµη η περιοχή ενδιάµεσης µνήµης, η διαδικασία αποστολής θα ολοκληρωθεί µόνο όταν έχει ξεκινήσει η αντίστοιχη διαδικασία παραλαβής και το µήνυµα έχει µεταφερθεί στην περιοχή αποθήκευσης της διεργασίας παραλήπτη. Επικοινωνία µε ενδιάµεση µνήµη (buffered communication): σε αυτόν τον τύπο επικοινωνίας η διαδικασία αποστολής µπορεί να ξεκινήσει ανεξάρτητα από το εάν έχει ξεκινήσει η αντίστοιχη διαδικασία παραλαβής, ενώ µπορεί ακόµη και να ολοκληρωθεί ανεξάρτητα από την εκκίνηση ή όχι της τελευταίας διαδικασίας. Στην περίπτωση αυτή ωστόσο είναι πιθανή η απαίτηση της τοπικής αποθήκευσης του εξερχόµενου µηνύµατος κάτι που σηµαίνει πως η εφαρµογή θα πρέπει να µεριµνήσει για την αναζήτηση και δέσµευση του κατάλληλου αποθηκευτικού χώρου. Εάν η µνήµη που δεσµεύεται για το λόγο αυτό είναι ανεπαρκής όσον αφορά το µέγεθός της και δεν δύναται να διατηρήσει το διακινούµενο µήνυµα, λαµβάνει χώρα εµφάνιση σφάλµατος. Στην αντίθετη περίπτωση το µήνυµα θα µεταφερθεί µε επιτυχία στη διεργασία παραλήπτη, κάτι που µας επιτρέπει να αποδεσµεύσουµε πλέον αυτή την τοπική περιοχή µνήµης που είχε δεσµευθεί για τη διακίνηση του µηνύµατος. Σύγχρονη επικοινωνία (synchronous communication): σε αυτόν τον τύπο επικοινωνίας µια διαδικασία αποστολής µπορεί να ξεκινήσει ανεξάρτητα από την εκκίνηση της διαδικασίας παραλαβής από τη διεργασία παραλήπτη. Ωστόσο στην περίπτωση αυτή η αποστολή θα ολοκληρωθεί µε επιτυχία µόνο όταν η διαδικασία παραλαβής έχει ξεκινήσει. Στην περίπτωση αυτή είναι δυνατή η χρήση του αποθηκευτικού χώρου της διαδικασίας αποστολέα για την αποστολή του επόµενου µηνύµατος. Επικοινωνία σε κατάσταση ετοιµότητας (ready state): σε αυτόν τον τύπο επικοινωνίας η διαδικασία επικοινωνίας µπορεί να ξεκινήσει µόνο όταν έχει ξεκινήσει και η αντίστοιχη διαδικασία παραλαβής. Στην αντίθετη περίπτωση η επικοινωνία χαρακτηρίζεται από την εµφάνιση σφαλµάτων και από εξαιρετικά χαµηλό βαθµό αξιοπιστίας. Για κάθε µια από τις παραπάνω µορφές επικοινωνίας υπάρχουν ξεχωριστές συναρτήσεις ειδικά σχεδιασµένες για αυτό το σκοπό, οι οποίες µπορούν να χρησιµοποιηθούν τόσο στην παρεµποδιστική όσο και στη µη παρεµποδιστική τους µορφή. Σε αντίθεση µε τη διαδικασία αποστολής, η παραλαβή ενός µηνύµατος πραγµατοποιείται πάντα από την ίδια συνάρτηση η οποία λειτουργεί µε βάση τις αρχές της πρότυπης επικοινωνίας (standard communication). Οι συναρτήσεις αυτές θα µελετηθούν σε επόµενη ενότητα. Οι τύποι δεδοµένων του MPI Αν και οι συναρτήσεις του προτύπου MPI µπορούν να κληθούν µέσα από ένα πρόγραµµα γραµµένο στη γλώσσα προγραµµατισµού C (η γλώσσα προγραµµατισµού Fortran επίσης υποστηρίζεται), οι τύποι δεδοµένων των ορισµάτων των εν λόγω συναρτήσεων, δεν είναι αυτοί που χρησιµοποιούνται στη γλώσσα C, καθώς το MPI χρησιµοποιεί τους δικού του τύπους δεδοµένων. Ο επόµενος πίνακας περιέχει τους στοιχειώδεις τύπους δεδοµένων που χρησιµοποιούνται από τις συναρτήσεις του MPI και τους τύπους δεδοµένων της γλώσσας C που αντιστοιχούν στους τύπους δεδοµένων του MPI.

7 Παράλληλα και Κατανεµηµένα Συστήµατα 7 MPI Datatype MPI_CHAR MPI_SHORT MPI_INT MPI_LONG MPI_UNSIGNED_CHAR MPI_UNSIGNED_SHORT MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_FLOAT MPI_DOUBLE MPI_LONG_DOUBLE C Datatype signed char signed short int signed int signed long int unsigned char unsigned short int unsigned int unsigned long int float double long_double Εκτός από τους παραπάνω βασικούς τύπους δεδοµένων (primitive data types) το MPI διαθέτει και άλλους δύο τύπους δεδοµένων που φέρουν τα ονόµατα MPI_BYTE και MPI_PACKED και δεν αντιστοιχούν σε τύπους δεδοµένων της γλώσσας C. Μία τιµή που ανήκει στον τύπο δεδοµένων MPI_BYTE απαιτεί για την αποθήκευσή της 1 byte (δηλαδή 8 bits). Στο πρότυπο MPI, ο τύπος δεδοµένων byte δεν είναι ισοδύναµος µε ένα χαρακτήρα, όπως συµβαίνει στις περισσότερες περιπτώσεις. Ανάλογα µε την αρχιτεκτονική που χρησιµοποιείται σε κάθε περίπτωση, ένας χαρακτήρας µπορεί να αναπαρίσταται µε διαφορετικό τρόπο και να απαιτεί τη χρήση περισσότερων από ένα byte. Από την άλλη πλευρά, ένα byte θα έχει την ίδια δυαδική τιµή σε όλες τις αρχιτεκτονικές. Η χρήση του τύπου MPI_PACKED θα µελετηθεί σε επόµενη ενότητα. Η σωστή χρήση των τύπων δεδοµένων έχει πολύ µεγάλη σηµασία για τη σωστή λειτουργία µιας εφαρµογής που στηρίζεται στην ανταλλαγή µηνυµάτων ανάµεσα στις διεργασίες της. Όπως θα µελετήσουµε αναλυτικά σε επόµενη ενότητα, ο τύπος δεδοµένων των στοιχείων που αποστέλλονται ή παραλαµβάνονται αποτελεί ένα από τα ορίσµατα των συναρτήσεων που χρησιµοποιούνται για αυτή τη διαδικασία αποστολής ή παραλαβής. Στην περίπτωση αυτή θα πρέπει ο τύπος δεδοµένων των στοιχείων που αποστέλλονται να είναι ο ίδιος µε εκείνον που καθορίζεται κατά την κλήση της συνάρτησης αποστολής. Με τον ίδιο ακριβώς τρόπο ο τύπος δεδοµένων των στοιχείων που παραλαµβάνονται θα πρέπει να είναι ο ίδιος µε εκείνον που καθορίζεται κατά την κλήση της συνάρτησης παραλαβής του µηνύµατος. Εάν µια εφαρµογή δεν λάβει υπ όψιν αυτή την αντιστοιχία ανάµεσα στους τύπους δεδοµένων

8 Το περιβάλλον προγραµµατισµού MPI 8 των διακινούµενων στοιχείων και στα αντίστοιχα ορίσµατα που χρησιµοποιούνται στις συναρτήσεις αποστολής ή παραλαβής, θα λάβει χώρα η εµφάνιση πολλών προβληµάτων και σφαλµάτων χρόνου εκτέλεσης (run time errors). Μία δεύτερη απαίτηση που θα πρέπει να ικανοποιείται όσον αφορά τη σωστή χρήση των τύπων δεδοµένων, είναι η χρήση του ιδίου τύπου δεδοµένων από τη συνάρτηση αποστολής του µηνύµατος και την αντίστοιχη συνάρτηση παραλαβής. Εάν για παράδειγµα µια διεργασία αποστείλει ένα µήνυµα που περιέχει 15 πραγµατικούς αριθµούς σε µια άλλη διεργασία, τότε η κλήση της συνάρτησης παραλαβής από αυτή τη διεργασία θα πρέπει να περιέχει την πληροφορία πως τα στοιχεία που πρόκειται για παραληφθούν είναι πραγµατικοί αριθµό και δεν ανήκουν σε κάποιον άλλο τύπο δεδοµένων. Αυτό σηµαίνει πως ένα από τα ορίσµατα της συνάρτησης παραλαβής θα πρέπει να είναι ο τύπος δεδοµένων MPI_DOUBLE. Εναλλακτικά, µπορούµε αντί για τον τύπο MPI_DOUBLE να χρησιµοποιήσουµε τον τύπο double της γλώσσας C το MPI επιτρέπει τέτοιου είδους αντιστοιχίες. Η παραπάνω αντιστοιχία ανάµεσα στους τύπους του MPI και στους αντίστοιχους τύπους της γλώσσας προγραµµατισµού, ισχύει για τους όλους τους βασικούς τύπους δεδοµένων που περιλαµβάνονται στον παραπάνω πίνακα, εκτός από τους τύπους MPI_BYTE και MPI_PACKED οι οποίοι αντιστοιχούν σε οποιοδήποτε byte της περιοχής αποθήκευσης, ανεξάρτητα από τον τύπο δεδοµένων της µεταβλητής που περιέχει αυτό το byte. Ο τύπος MPI_BYTE χρησιµοποιείται για να µεταφέρουµε τη δυαδική τιµή ενός byte µιας περιοχής µνήµης, ενώ ο τύπος MPI_PACKED χρησιµοποιείται για την αποστολή δεδοµένων που έχουν οµαδοποιηθεί µε την MPI_PACK ή έχει καταργηθεί η οµαδοποίησή τους µε την MPI_UNPACK. Ένα τελευταίο ζήτηµα που αφορά τη χρήση των τύπων δεδοµένων από τις συναρτήσεις του προτύπου MPI, είναι η µετατροπή των δεδοµένων στην περίπτωση που η διακίνησή τους γίνεται ανάµεσα σε ετερογενή συστήµατα που χαρακτηρίζονται από διαφορετικού τύπου αρχιτεκτονική. Υπάρχουν δύο είδη τέτοιων µετατροπών, η µετατροπή τύπου (type conversion) που µεταβάλλει τον τύπο δεδοµένων ενός στοιχείου (τυπικό παράδειγµα τέτοιας µετατροπής είναι αυτή από πραγµατικό αριθµό σε ακέραιο) και η µετατροπή αναπαράστασης (representation conversion) που µεταβάλλει τη δυαδική αναπαράσταση ενός αριθµού χαρακτηριστικό παράδειγµα τέτοιας µετατροπής είναι η µεταβολή της σειράς των bytes (byte ordering) ή η µεταβολή της αναπαράστασης των πραγµατικών αριθµών από 32 bits σε 64 bits. Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως οι κανόνες αντιστοιχίας των τύπων δεδοµένων που παρουσιάσαµε στις προηγούµενες παραγράφους προϋποθέτουν την απουσία οποιασδήποτε µετατροπής τύπων δεδοµένων. Από την άλλη πλευρά, το MPI απαιτεί πως η παραπάνω µετατροπή αναπαράστασης θα πρέπει να πραγµατοποιείται κάθε φορά που ένα στοιχείο που ανήκει σε κάποιο τύπο δεδοµένων ανταλλάσσεται ανάµεσα σε δύο συστήµατα που χρησιµοποιούν διαφορετικούς τύπους αναπαράστασης για αυτό το στοιχείο. Ωστόσο το MPI δεν καθορίζει τους κανόνες µε βάση τους οποίους θα πραγµατοποιηθεί αυτή η µετατροπή αναπαράστασης. Μια τέτοια µετατροπή αναµένεται να διατηρήσει την τιµή της µεταβλητής που µετατρέπεται (εάν πρόκειται για ακέραια µεταβλητή, λογική µεταβλητή ή µεταβλητή χαρακτήρα) ή να την προσαρµόσει στην πλησιέστερη προς αυτή τιµή που µπορεί να αναπαρασταθεί από το σύστηµα προορισµού (εάν πρόκειται για πραγµατική µεταβλητή).

9 Παράλληλα και Κατανεµηµένα Συστήµατα 9 Η παραπάνω διαδικασία µετατροπής της αναπαράστασης των τύπων δεδοµένων ανάµεσα στα συστήµατα αποστολής και παραλαβής της πληροφορίας, δύναται να οδηγήσει στην εµφάνιση σφαλµάτων υπερχείλισης (overflows) και υποχείλισης (underflows). Υπάρχει επίσης η πιθανότητα η µετατροπή ενός ακεραίου ή χαρακτήρα να οδηγήσει σε µία τιµή η οποία δεν δύναται να αναπαρασταθεί στο σύστηµα παραλήπτη. Τέτοιου είδους προβληµατικές καταστάσεις οδηγούν στη διακοπή της επικοινωνίας και στην αποτυχία της διαδικασίας αποστολής ή λήψης δεδοµένων. Για το λόγο αυτό, οι µετατροπές αυτού του είδους θα πρέπει να πραγµατοποιούνται µε πολύ µεγάλη προσοχή και όπου αυτό είναι αναγκαίο. Οι βασικές συναρτήσεις του MPI Αν και το πρότυπο MPI θεωρείται γενικά ως ένα πολύπλοκο µοντέλο επικοινωνίας, εν τούτοις, το σύνολο σχεδόν των παράλληλων εφαρµογών που στηρίζονται στη χρήση αυτού του προτύπου µπορεί να υλοποιηθεί χρησιµοποιώντας µόνο ένα µικρό πλήθος συναρτήσεων. Αυτές οι συναρτήσεις (καθώς και όλες οι συναρτήσεις του MPI) ορίζονται στο αρχείο επικεφαλίδας mpi.h το οποίο θα πρέπει να χρησιµοποιείται σε όλες τις εφαρµογές που χρησιµοποιούν το πρότυπο διαβίβασης µηνυµάτων. Η χρήση αυτού του αρχείου στη γλώσσα προγραµµατισµού C, θα γίνει κατά τα γνωστά δια της χρήσεως της εντολής του προεπεξεργαστή #include <mpi.h>. Είναι σηµαντικό να αναφερθεί στο σηµείο αυτό, πως πριν τη χρήση οποιασδήποτε εντολής MPI, θα πρέπει να λάβει χώρα η αρχικοποίηση αυτού του περιβάλλοντος, η οποία θα γίνει χρησιµοποιώντας τη συνάρτηση MPI_Init. Αυτό σηµαίνει πως αυτή η συνάρτηση θα πρέπει να καλείται πριν από οποιαδήποτε συνάρτηση MPI. Μετά τη χρήση των κατάλληλων σε κάθε περίπτωση συναρτήσεων του MPI, θα πρέπει να τερµατίζεται η λειτουργία αυτού του περιβάλλοντος, κάτι που γίνεται δια της χρήσεως της συνάρτησης MPI_Finalize(). Εποµένως η συνάρτηση αυτή θα πρέπει να καλείται πάντοτε τελευταία µέσα από τον πηγαίο κώδικα της εφαρµογής. Από την παραπάνω περιγραφή καθίσταται προφανές πως η δοµή ενός προγράµµατος που χρησιµοποιεί συναρτήσεις MPI θα είναι η ακόλουθη: #include <mpi.h> // Στο σηµείο αυτό µπορούµε να δηλώσουµε τα επιθυµητά σε κάθε περίπτωση // αρχεία επικεφαλίδας int main (int argc, char * argv[]) { // ήλωση των µεταβλητών του προγράµµατος // Κλήση συναρτήσεων της γλώσσας C MPI_Init (&argc, &argv); // Ανάµεσα στις συναρτήσεις MPI_Init() και MPI_Finalize() µπορούµε // να καλέσουµε συναρτήσεις του MPI και φυσικά οποιαδήποτε // συνάρτηση της γλώσσας C MPI_Finalize();

10 Το περιβάλλον προγραµµατισµού MPI 10 // Στο σηµείο αυτό µπορούµε να καλέσουµε συναρτήσεις της γλώσσας // C αλλά όχι και συναρτήσεις του MPI return (0); } Ως ένα πρώτο παράδειγµα προγράµµατος σε γλώσσα MPI ας δούµε το πιο απλό πρόγραµµα που µπορούµε να γράψουµε και το οποίο εκτυπώνει στην οθόνη του υπολογιστή µας το µήνυµα Hello World. Ο πηγαίος κώδικας για το απλό αυτό πρόγραµµα, παρουσιάζεται στη συνέχεια. #include <mpi.h> #include <stdio.h> int main (int argc, char * argv[0]) { char message [16] = Hello World!! MPI_Init (&argc, &argv); printf ( %s\n, message); MPI_Finalize(); return (0); } Το παραπάνω πρόγραµµα δεν χρησιµοποιεί καµία συνάρτηση του MPI και απλά αρχικοποιεί και τερµατίζει το προγραµµατιστικό αυτό περιβάλλον. Προκειµένου τώρα να δηµιουργήσουµε το εκτελέσιµο αρχείο, µπορούµε κατά τα γνωστά να χρησιµοποιήσουµε ένα οποιοδήποτε µεταγλωττιστή της γλώσσας C, όπως είναι για παράδειγµα ο µεταγλωττιστής gcc (GNU C compiler). Ωστόσο το MPI περιέχει εκτός των άλλων και ένα ενσωµατωµένο C compiler που εκτός από τις λειτουργίες ενός τυπικού µεταγλωττιστή περιέχει και εξειδικευµένες λειτουργίες που συσχετίζονται µε το περιβάλλον του MPI. Αυτός ο µεταγλωττιστής φέρει το όνοµα mpicc και χρησιµοποιείται µε το ίδιο ακριβώς τρόπο όπως και ο µεταγλωττιστής gcc. Έτσι για να κατασκευάσουµε το αρχείο αντικειµενικού κώδικα του παραπάνω αρχείου (το οποίο ας υποθέσουµε πως ονοµάζεται hello.c) θα πρέπει να χρησιµοποιήσουµε την εντολή mpicc c hello.c ενώ η κατασκευή του εκτελέσιµου αρχείου θα λάβει χώρα εάν γράψουµε mpicc o hello.exe mpi.o. Χρησιµοποιώντας το µεταγλωττιστή mpicc µε τον τρόπο που προαναφέραµε, θα λάβουµε το εκτελέσιµο αρχείο hello.exe. Χρησιµοποιώντας αυτό το αρχείο µπορούµε να κατασκευάσουµε ένα πλήθος Ν διεργασιών οι οποίες δύνανται να επικοινωνούν µεταξύ τους χρησιµοποιώντας τις συναρτήσεις του MPI. Ο τρόπος δηµιουργίας αυτών των διεργασιών είναι δια της χρήσεως της εφαρµογής mpirun που περιλαµβάνεται στο πακέτο διανοµής του προτύπου. Η αναλυτική παρουσίαση αυτής της εντολής θα γίνει σε επόµενη ενότητα. Για την ώρα όµως ας δούµε τον τρόπο µε τον οποίο θα χρησιµοποιήσουµε αυτή την εντολή για να δηµιουργήσουµε ένα πλήθος διεργασιών από την εφαρµογή hello.exe. Για να το κάνουµε αυτό θα πρέπει να καλέσουµε την εντολή µε το διακόπτη np συνοδευόµενο από το πλήθος των διεργασιών που θέλουµε να δηµιουργήσουµε. Έτσι καλώντας την εντολή mpirun µε τη µορφή mpirun np 5 hello.exe θα δηµιουργήσουµε πέντε διεργασίες (αντίγραφα του hello.exe) οι τάξεις (ranks) των οποίων θα είναι 0,1,2,3 και 4. Όσον αφορά το αποτέλεσµα της εκτέλεσης της παραπάνω εντολής, αυτό θα είναι η εκτύπωση του µηνύµατος Hello World!! από κάθε µια από αυτές τις διεργασίες. Αυτό σηµαίνει πως η έξοδος της εντολής mpirun np 5 hello.exe θα έχει τη µορφή Hello World!!

11 Παράλληλα και Κατανεµηµένα Συστήµατα 11 Hello World!! Hello World!! Hello World!! Hello World!! ύο άλλες ενδιαφέρουσες και πολύ χρήσιµες συναρτήσεις του MPI είναι η Get_Comm_rank που επιστρέφει την τάξη της τρέχουσας διεργασίας, και η Get_Comm_size που επιστρέφει το πλήθος των διεργασιών που περιλαµβάνονται στον τρέχοντα Communicator. Οι διεργασίες αυτές δέχονται δύο ορίσµατα εκ των οποίων το πρώτο όρισµα καθορίζει τον Communicator στον οποίο αναφερόµαστε, ενώ το δεύτερο όρισµα είναι ένας δείκτης προς µια ακέραια µεταβλητή, η οποία µετά την κλήση της συνάρτησης θα περιέχει τη ζητούµενη πληροφορία. Θεωρώντας δύο µεταβλητές rank και size τύπου integer, µπορούµε να βρούµε την τάξη της τρέχουσας διεργασίας και το συνολικό πλήθος των διεργασιών του προεπιλεγµένου Communicator που περιγράφεται από τη σταθερά MPI_COMM_WORLD, καλώντας τις παραπάνω συναρτήσεις µε τη µορφή MPI_Comm_rank (MPI_COMM_WORLD, &rank) και MPI_Comm_size (MPI_COMM_WORLD, &size). Εάν για παράδειγµα δηµιουργήσουµε πέντε αντίγραφα της διεργασίας hello.exe χρησιµοποιώντας την εντολή mpirun np 5 hello.exe, η κλήση της συνάρτησης MPI_Comm_size θα αποδώσει στην ακέραια µεταβλητή size την τιµή 5, ενώ η κλήση της συνάρτησης MPI_Comm_rank θα αποδώσει στη µεταβλητή rank την τάξη της τρέχουσας διεργασίας. Υπενθυµίζουµε στο σηµείο αυτό πως η κάθε διεργασία θα έχει τη δική της µεταβλητή rank, στην οποία θα καταχωρηθεί και η τάξη αυτής της διεργασίας. Αυτό σηµαίνει πως η µεταβλητή rank της πρώτης διεργασίας θα λάβει την τιµή 0, η µεταβλητή rank της δεύτερης διεργασίας θα λάβει την τιµή 1, η µεταβλητή rank της τρίτης διεργασίας θα λάβει την τιµή 2, η µεταβλητή rank της τέταρτης διεργασίας θα λάβει την τιµή 3, και η µεταβλητή rank της πέµπτης διεργασίας θα λάβει την τιµή 4. Προκειµένου να κατανοήσουµε το ρόλο και τον τρόπο χρήσης των συναρτήσεων MPI_Comm_rank και MPI_Comm_size ας εµπλουτίσουµε το πρόγραµµα Hello.c έτσι ώστε εκτός από το µήνυµα Hello World!! να εµφανίζει την τάξη της τρέχουσας διεργασίας και το συνολικό πλήθος των διεργασιών του Communicator. Σε πλήρη εφαρµογή της διαδικασίας που περιγράψαµε στην προηγούµενη παράγραφο, ας ορίσουµε δύο ακέραιες µεταβλητές rank και size και ας τις περάσουµε ως ορίσµατα στις αντίστοιχες συναρτήσεις. Ο νέος κώδικας που θα προκύψει µετά τις παραπάνω προσθήκες θα έχει τη µορφή #include <mpi.h> #include <stdio.h> int main (int argc, char * argv[0]) { int rank, size; MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); printf ( Hello World from process %d of %d\n, rank, size); MPI_Finalize();

12 Το περιβάλλον προγραµµατισµού MPI 12 return (0); } Εάν δηµιουργήσουµε το εκτελέσιµο αρχείο Hello.exe µε τον τρόπο που περιγράψαµε στην προηγούµενη παράγραφο και δηµιουργήσουµε τα πέντε αντίγραφα της διεργασίας χρησιµοποιώντας την εντολή mpirun np 5 hello.exe, το αποτέλεσµα που θα λάβουµε θα έχει τη µορφή Hello World from process 1 of 5 Hello World from process 2 of 5 Hello World from process 3 of 5 Hello World from process 4 of 5 Hello World from process 5 of 5 Παρατηρούµε λοιπόν πως η κάθε διεργασία κατά την εκτέλεσή της εκτυπώνει το µήνυµα Hello World εκτυπώνοντας την δική της τάξη και το συνολικό πλήθος των διεργασιών του Communicator. Οι δύο τελευταίες βασικές συναρτήσεις που θα παρουσιαστούν στο σηµείο αυτό, αφορούν τις παρεµποδιστικές συναρτήσεις αποστολής και λήψης µηνυµάτων οι οποίες φέρουν τα ονόµατα MPI_Send και MPI_Recv. Οι δύο αυτές συναρτήσεις παίρνουν ακριβώς τα ίδια ορίσµατα µε τη διαφορά πως η MPI_Recv δέχεται ένα επιπλέον όρισµα που περιέχει πληροφορίες σχετικά µε τη διαδικασία παραλαβής του µηνύµατος. Τα τρία πρώτα ορίσµατα των παραπάνω συναρτήσεων ταυτοποιούν το µήνυµα που αποστέλλεται ή λαµβάνεται. Πιο συγκεκριµένα, το πρώτο όρισµα είναι ένας δείκτης στην περιοχή µνήµης που περιέχει το µήνυµα προς αποστολή, το δεύτερο όρισµα περιέχει το πλήθος των αντικειµένων που περιλαµβάνονται σε αυτό το µήνυµα, ενώ το τρίτο όρισµα περιέχει τον τύπο αυτών των δεδοµένων. Ας υποθέσουµε για παράδειγµα, πως ορίζουµε ένα πίνακα 10 ακεραίων δια της χρήσεως µιας δήλωσης της µορφής int buffer [10]. Στην περίπτωση αυτή τα τρία πρώτα ορίσµατα της MPI_Send θα είναι τα (buffer, 10, MPI_INT). Τα υπόλοιπα ορίσµατα της συνάρτησης MPI_Send αφορούν τις υπόλοιπες παραµέτρους της επικοινωνίας. Έτσι το τέταρτο όρισµα περιέχει την τάξη της διαδικασίας η οποία θα παραλάβει το µήνυµα, το πέµπτο όρισµα περιέχει την ετικέτα του µηνύµατος, ενώ το τελευταίο όρισµα περιέχει τον Communicator στον οποίο ανήκουν οι διεργασίες ανάµεσα στις οποίες ανταλλάσσεται το τρέχον µήνυµα. Εάν δεν θέλουµε να χρησιµοποιήσουµε κάποια ετικέτα για το µήνυµα που αποστέλλεται, µπορούµε ως τιµή στο όρισµα της ετικέτας, να καταχωρήσουµε την τιµή MPI_ANY_TAG. Τέλος, εάν δεν έχουµε ορίσει κάποιο συγκεκριµένο Communicator αλλά οι δύο διεργασίες ανήκουν στον προεπιλεγµένο Communicator, θα χρησιµοποιήσουµε ως τιµή για το τελευταίο όρισµα της συνάρτησης MPI_Send, τη σταθερά MPI_COMM_WORLD. Τυπικό παράδειγµα της συνάρτησης MPI_Send είναι η κλήση της µε τη µορφή MPI_Send (&a, 1, MPI_INT, 5, MPI_ANY_TAG, MPI_COMM_WORLD) η οποία αποστέλλει στη διεργασία µε τιµή τάξης ίση µε 5 που ανήκει στον προεπιλεγµένο Communicator, την τιµή της µεταβλητής a. Επειδή η a είναι µία απλή ακέραια µεταβλητή που έχει δηλωθεί δια µέσου µιας δήλωσης της µορφής int a=10, τα τρία πρώτα ορίσµατα της συνάρτησης MPI_Send, θα είναι τα &a, 1 και MPI_INT. Στο παραπάνω παράδειγµα, η τιµή της ετικέτας του µηνύµατος προς αποστολή δεν

13 Παράλληλα και Κατανεµηµένα Συστήµατα 13 χρειάζεται ή δεν µας ενδιαφέρει για το λόγο αυτό ως τιµή για αυτή την ετικέτα χρησιµοποιείται η σταθερά MPI_ANY_TAG. Στην περίπτωση της διαδικασίας παραλαβής µηνυµάτων αυτή λαµβάνει χώρα δια της χρήσεως της συνάρτησης MPI_Recv. Αυτή η συνάρτηση δέχεται ακριβώς τα ίδια ορίσµατα µε την MPI_Send αλλά διαφέρει µε αυτή σε δύο σηµεία: (α) το τέταρτο όρισµα της συνάρτησης αναφέρεται προφανώς στην τάξη της διεργασίας από την οποία η τρέχουσα διεργασία παραλαµβάνει το αποστελλόµενο µήνυµα (source rank). Εάν επιθυµούµε να λάβουµε µηνύµατα από οποιαδήποτε από τις διεργασίες που υπάρχουν στο σύστηµα θα αποδώσουµε στην παράµετρο αυτή την τιµή MPI_ANY_SOURCE και (β) µετά το έκτο όρισµα που ταυτοποιεί τον Communicator στον οποίο ανήκουν οι δύο διεργασίες, υπάρχει ένα επιπλέον όρισµα που ανήκει στον σύνθετο τύπο δεδοµένων MPI_Status και περιέχει πληροφορίες σχετικά µε τις παραµέτρους παραλαβής του µηνύµατος. Αυτός ο τύπος δεδοµένων ορίζεται ως µια δοµή που περιέχει τρία πεδία: από τα πεδία αυτά το MPI_SOURCE περιέχει τη τάξη της διεργασίας αποστολέα, το MPI_TAG περιέχει την ετικέτα του µηνύµατος που έχει παραληφθεί, και το MPI_ERROR περιέχει τον κωδικό του σφάλµατος που έχει λάβει χώρα, εάν έχει καταγραφεί ένα τέτοιο σφάλµα. Αν και οι πληροφορίες σχετικά µε την τάξη της διαδικασίας αποστολέα και της ετικέτας του µηνύµατος µπορούν να ανακτηθούν και από τα αντίστοιχα ορίσµατα της συνάρτησης MPI_Recv, εν τούτοις, η δοµή MPI_Status είναι ιδιαίτερα χρήσιµη σε περιπτώσεις κατά τις οποίες οι πληροφορίες αυτές δεν έχουν καθορισθεί (αυτό σηµαίνει πως ως τιµές στα πεδία sourcerank και messagetag χρησιµοποιήθηκαν οι τιµές MPI_ANY_SOURCE και MPI_ANY_TAG). Τυπικό παράδειγµα χρήσης της συνάρτησης MPI_Recv, είναι η κλήση της µε τη µορφή MPI_Recv (&a, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, status) η οποία παραλαµβάνει από τη διεργασία µε τάξη 0, την τιµή της µεταβλητής a. Ένα άλλο θέµα που θα πρέπει να αναφέρουµε στο σηµείο αυτό είναι ο ρόλος του ορίσµατος count που είναι το δεύτερο από τα ορίσµατα της συνάρτησης MPI_Recv. Αυτό το όρισµα δεν αναφέρεται στο ακριβές πλήθος των στοιχείων που περιλαµβάνονται στο µήνυµα που πρόκειται να παραληφθεί, αλλά στο µέγιστο πλήθος αυτών των στοιχείων. Εάν σε αυτό το όρισµα καταχωρήσουµε µια ακέραια µεταβλητή Ν, αυτό σηµαίνει πως το µήνυµα που θα παραλάβουµε θα πρέπει να περιέχει το πολύ Ν στοιχεία στην αντίθετη περίπτωση η συνάρτηση παραλαβής δεν θα ολοκληρωθεί µε επιτυχία αλλά θα επιστρέψει ένα κωδικό σφάλµατος. Αξίζει επίσης να σηµειωθεί πως η χρήση του ορίσµατος count µας επιτρέπει να εκφράσουµε το µέγεθος του µηνύµατος, όχι σε bytes αλλά σε πλήθος στοιχείων που περιλαµβάνονται σε αυτό. Η τεχνική αυτή καθιστά την εφαρµογή µας ανεξάρτητη από την αρχιτεκτονική στην οποία εκτελείται και υπό αυτή την έννοια της προσδίδει πολύ µεγαλύτερο βαθµό φορητότητας (portability). Ας σηµειωθεί πως είναι δυνατή η αποστολή µε µηδενικό πλήθος στοιχείων αυτό σηµαίνει πως το όρισµα count έχει τιµή ίση µε το µηδέν. Στην περίπτωση αυτή η διεργασία αποστολέας αποστέλλει µόνο την επικεφαλίδα του µηνύµατος ενώ το τµήµα των δεδοµένων (data section) δεν υφίσταται.

14 Το περιβάλλον προγραµµατισµού MPI 14 Στο σηµείο αυτό έχουµε ολοκληρώσει την πρώτη ποιοτική περιγραφή των έξι βασικών συναρτήσεων του MPI, και είναι καιρός να περάσουµε στην αυστηρή περιγραφή της λειτουργίας τους και του τρόπου µε τον οποίο καλούνται. Σε γενικές γραµµές λοιπόν, οι συναρτήσεις MPI_Init, MPI_Finalize, MPI_Comm_rank, MPI_Comm_size, MPI_Send και MPI_Recv χαρακτηρίζονται από τις ακόλουθες ιδιότητες: MPI_Init: Η συνάρτηση αυτή αρχικοποιεί το πρότυπο MPI και δηµιουργεί όλες τις δοµές δεδοµένων που είναι αναγκαίες για τη λειτουργία του (όπως είναι για παράδειγµα ο προεπιλεγµένος Communicator MPI_COMM_WORLD). Όπως έχει ήδη αναφερθεί, η συνάρτηση αυτή θα πρέπει να κληθεί µία και µοναδική φορά, πριν την κλήση οποιασδήποτε άλλης συνάρτησης του MPI η κλήση της για δεύτερη φορά µέσα από την εφαρµογή θα προκαλέσει την εµφάνιση µηνύµατος λάθους. Το πρωτότυπο της συνάρτησης MPI_Init έχει τη µορφή MPI_Init (int * argc, char ** arcv[]) όπου argc και argv είναι τα ορίσµατα που χρησιµοποιούµε κατά την κλήση της συνάρτησης main. Από τα ορίσµατα αυτά το πρώτο αναφέρεται στο πλήθος των ορισµάτων µε τα οποία καλείται το εκτελέσιµο αρχείο της εφαρµογής, ενώ το δεύτερο είναι ένας πίνακας συµβολοσειρών ή ισοδύναµα ένας δισδιάστατος πίνακας χαρακτήρων που περιέχει τα ονόµατα αυτών των ορισµάτων. MPI_Finalize: η συνάρτηση MPI_Finalize είναι η τελευταία συνάρτηση που θα πρέπει να κληθεί και ο ρόλος της είναι ο τερµατισµός της λειτουργίας του προτύπου MPI. Αυτό σηµαίνει πως κάθε φορά που χρησιµοποιούµε συναρτήσεις MPI µέσα από ένα πρόγραµµα C, θα πρέπει υποχρεωτικά να χρησιµοποιούµε τη συνάρτηση MPI_Finalize για να απελευθερώσουµε τη µνήµη που δεσµεύεται από τις δοµές δεδοµένων του προτύπου και γενικά για να τερµατίσουµε τη λειτουργία του. Η συνάρτηση MPI_Finalize καλείται χωρίς ορίσµατα. MPI_Comm_rank: η συνάρτηση MPI_Comm_rank επιστρέφει την τάξη της τρέχουσας διεργασίας. Η κλήση της συνάρτησης χαρακτηρίζεται από τη σύνταξη MPI_Comm_rank (MPI_comm comm, int * rank) όπου η µεταβλητή comm χρησιµοποιείται για τον καθορισµό του Communicator στον οποίο ανήκει η διεργασία, ενώ η µεταβλητή rank είναι µια ακέραια µεταβλητή που µετά την επιτυχή κλήση της συνάρτησης θα περιέχει την τάξη της τρέχουσας διεργασίας. Τυπικό παράδειγµα χρήσης της συνάρτησης MPI_Comm_rank είναι η κλήση της µε τη µορφή MPI_Comm_rank (MPI_COMM_WORLD, &rank) η οποία επιστρέφει στη µεταβλητή rank την τάξη της τρέχουσας διεργασίας που ανήκει στον προεπιλεγµένο Communicator MPI_COMM_WORLD. MPI_Comm_size: η συνάρτηση MPI_Comm_size επιστρέφει το µέγεθος ενός Communicator, δηλαδή το πλήθος των διεργασιών που περιλαµβάνονται σε αυτόν. Η κλήση αυτής της συνάρτησης χαρακτηρίζεται από τη σύνταξη MPI_Comm_size (MPI_comm comm, int * size) όπου η µεταβλητή comm χρησιµοποιείται για τον καθορισµό του Communicator του οποίου το µέγεθος θέλουµε να ανακτήσουµε, ενώ η µεταβλητή size είναι µια ακέραια µεταβλητή που µετά την επιτυχή κλήση της συνάρτησης θα περιέχει το πλήθος των διεργασιών που περιλαµβάνονται στον τρέχοντα Communicator. Τυπικό παράδειγµα χρήσης της συνάρτησης MPI_Comm_size είναι η κλήση της µε τη µορφή MPI_Comm_size (MPI_COMM_WORLD, &size) η οποία επιστρέφει στη µεταβλητή size το πλήθος

15 Παράλληλα και Κατανεµηµένα Συστήµατα 15 των διεργασιών που ανήκουν στον προεπιλεγµένο Communicator MPI_COMM_WORLD. MPI_Send: η συνάρτηση MPI_Send χρησιµοποιείται για την αποστολή ενός µηνύµατος σε κάποια από τις διεργασίες που περιλαµβάνονται στον τρέχοντα Communicator. Ας σηµειωθεί πως αυτή η συνάρτηση ανήκει στις επονοµαζόµενες παρεµποδιστικές συναρτήσεις, οι οποίες κατά το χρονικό διάστηµα της λειτουργίας τους, αναστέλλουν τη λειτουργία της διεργασίας που τις καλεί. Το πρωτότυπο της συνάρτησης MPI_Send έχει τη µορφή MPI_Send (void * buf, int count, MPI_Datatype datatype, int destrank, int mesagetag, MPI_Comm comm). Από τα ορίσµατα αυτά της συνάρτησης, τα τρία πρώτα ταυτοποιούν τα χαρακτηριστικά του µηνύµατος προς αποστολή. Πιο συγκεκριµένα το πρώτο όρισµα περιέχει τη διεύθυνση της περιοχής µνήµης στην οποία βρίσκονται τα δεδοµένα προς αποστολή, το δεύτερο όρισµα περιέχει το πλήθος των στοιχείων προς αποστολή, ενώ το τρίτο όρισµα περιέχει τον τύπο δεδοµένων για αυτά τα στοιχεία. Τα επόµενα τρία ορίσµατα αφορούν (µε τη σειρά µε την οποία αναγράφονται) την τάξη της διεργασίας προς την οποία πρόκειται να αποσταλεί το µήνυµα (διεργασία παραλήπτης), την ετικέτα του µηνύµατος που µας επιτρέπει να ξεχωρίσουµε αυτό το µήνυµα από τα υπόλοιπα (εάν δεν θέλουµε να καθορίσουµε κάποια ετικέτα µπορούµε να καταχωρήσουµε σε αυτό το όρισµα την τιµή MPI_ANY_TAG) και τον Communicator στον οποίο ανήκουν οι διεργασίες αποστολέας και παραλήπτης. Η ετικέτα του µηνύµατος είναι ένας ακέραιος αριθµός που παίρνει τιµές στο διάστηµα [0, UB], όπου η τιµή της σταθεράς UB εξαρτάται από την υλοποίηση που χρησιµοποιείται σε κάθε περίπτωση. Προκειµένου να ανακτήσουµε την τιµή αυτής της σταθεράς, θα πρέπει να ζητήσουµε από το σύστηµα να µας επιστρέψει την τιµή του µεγέθους MPI_TAG_UB. Είναι προφανές πως εφ όσον η ετικέτα είναι ένας ακέραιος αριθµός, η τιµή αυτού του µεγέθους δεν µπορεί να είναι µικρότερη από Τυπικό παράδειγµα χρήσης της συνάρτησης MPI_Send είναι η κλήση της µε τη µορφή MPI_Send (buffer, 100, MPI_CHAR, 1, 0, MPI_COMM_WORLD) η οποία προκαλεί την αποστολή µιας συµβολοσειράς 100 χαρακτήρων στη διεργασία µε τιµή τάξης ίση µε 1. Αυτή η συµβολοσειρά περιλαµβάνεται σε ένα µήνυµα η ετικέτα του οποίου έχει την τιµή 0, ενώ και οι δύο διεργασίες ανήκουν στον προεπιλεγµένο Communicator MPI_COMM_WORLD. Είναι προφανές πως η περιοχή της ενδιάµεσης µνήµης στην οποία βρίσκονται αποθηκευµένα τα δεδοµένα προς αποστολή, αποτελείται από count συνεχόµενα στοιχεία τύπου datatype, µε το πρώτο όρισµα της συνάρτησης MPI_Send (που περιγράφεται από το όνοµα buf) να είναι ένας δείκτης προς το πρώτο από αυτά τα συνεχόµενα στοιχεία. Εφ όσον ο τύπος δεδοµένων για αυτά τα συνεχόµενα στοιχεία είναι γνωστός, είναι πάρα πολύ εύκολο να υπολογίσουµε το συνολικό µέγεθος των δεδοµένων προς αποστολή. Στο παραπάνω παράδειγµα η ενδιάµεση περιοχή µνήµης που περιέχει τα δεδοµένα του µηνύµατος, περιλαµβάνει 100 συνεχόµενους χαρακτήρες, και εποµένως το µέγεθος της περιοχής buffer είναι ίσο µε 100 bytes. Είναι προφανές πως εφ όσον το δεύτερο όρισµα της συνάρτησης MPI_Send αναφέρεται στο πλήθος των στοιχείων που περιλαµβάνονται στην ενδιάµεση µνήµη,

16 Το περιβάλλον προγραµµατισµού MPI 16 και όχι στο µέγεθός της σε bytes, είναι δυνατή η µεταφορά των προγραµµάτων MPI και σε αρχιτεκτονικές που δεν είναι οργανωµένες µε βάση το byte. MPI_Recv: η συνάρτηση MPI_Recv χρησιµοποιείται για την παραλαβή ενός µηνύµατος από κάποια από τις διεργασίες που ανήκουν στον τρέχοντα Communicator. Ας σηµειωθεί πως η συνάρτηση αυτή είναι µια παρεµποδιστική συνάρτηση, κάτι που σηµαίνει πως κατά τη διάρκεια της παραλαβής κάποιου µηνύµατος, λαµβάνει χώρα αναστολή της διεργασίας που την καλεί. Η χρήση της συνάρτησης MPI_Recv χαρακτηρίζεται από µια κλήση της µορφής MPI_Recv (void * buf, int count, MPI_Datatype datatype, int sourcerank, int messagetag, MPI_Comm comm, MPI_Status status) και εποµένως η εν λόγω συνάρτηση χρησιµοποιείται µε τον ίδιο σχεδόν τρόπο όπως η MPI_Send. Στην περίπτωση αυτή βέβαια το τέταρτο όρισµα αναφέρεται στην τάξη της διεργασίας αποστολέα, ενώ υπάρχει και ένα επιπλέον όρισµα που δεν εµφανίζεται στη συνάρτηση MPI_Send, και το οποίο όπως έχουµε ήδη αναφέρει επιτρέπει την ανάκτηση πληροφοριών σχετικά µε την κατάσταση παραλαβής του µηνύµατος. Τυπικό παράδειγµα χρήσης της συνάρτησης MPI_Recv είναι η κλήση της µε τη µορφή MPI_Recv (buffer, 50, MPI_DOUBLE, 4, MPI_ANY_TAG, MPI_COMM_WORLD, status) η οποία διαβάζει ένα µήνυµα που περιέχει 50 πραγµατικούς αριθµούς διπλής ακρίβειας από τη διεργασία µε τιµή τάξης ίση µε 4. Οι δύο διεργασίες του εν λόγω παραδείγµατος ανήκουν στον προεπιλεγµένο Communicator MPI_COMM_WORLD ενώ η ετικέτα που µηνύµατος που παραλαµβάνεται δεν µας ενδιαφέρει, και για το λόγο αυτό ως τιµή στο αντίστοιχο όρισµα χρησιµοποιείται η σταθερά MPI_ANY_TAG. Είναι προφανές πως η επιτυχής παραλαβή ενός µηνύµατος απαιτεί τη δέσµευση του κατάλληλου σε κάθε περίπτωση αποθηκευτικού χώρου. Πιο συγκεκριµένα, το µέγεθος του µηνύµατος προς παραλαβή θα πρέπει να είναι µικρότερο ή ίσο µε το µέγεθος του χώρου ενδιάµεσης αποθήκευσης το όνοµα του οποίου περνάµε ως πρώτο όρισµα στη συνάρτηση MPI_Recv. Εάν το µέγεθος του µηνύµατος (το οποίο ας υποθέσουµε πως είναι ίσο µε Ν) είναι µικρότερο από το µέγεθος του αποθηκευτικού χώρου, το µήνυµα θα καταλάβει τις Ν πρώτες θέσεις της µνήµης, ενώ το υπόλοιπο τµήµα του ενδιάµεσου αποθηκευτικού χώρου θα παραµείνει αµετάβλητο. Αντίθετα εάν το µήνυµα είναι µεγαλύτερο από το µέγεθος του εν λόγω χώρου, η παραλαβή του δεν θα ολοκληρωθεί σωστά, και η MPI_Recv θα επιστρέψει ένα κωδικό σφάλµατος. Μια χρήσιµη συνάρτηση που χρησιµοποιείται σε συνδυασµό µε την MPI_Recv, είναι η συνάρτηση MPI_Get_count η οποία µας επιτρέπει να ανακτήσουµε το µέγεθος του µηνύµατος που έχει παραληφθεί από την MPI_Recv, δηλαδή το πλήθος των στοιχείων που περιλαµβάνονται σε αυτό. Η σύνταξη της MPI_Get_count έχει τη µορφή MPI_Get_count (MPI_Status * status, MPI_Datatype datatype, int * count) όπου status είναι το τελευταίο όρισµα της MPI_Recv και περιέχει πληροφορίες σχετικά µε τη διαδικασία παραλαβής του µηνύµατος, datatype είναι ο τύπος δεδοµένων των στοιχείων που έχουν παραληφθεί, ενώ count είναι µια ακέραια µεταβλητή που µετά την κλήση της MPI_Get_count θα περιέχει το πλήθος αυτών των στοιχείων. Τυπικό παράδειγµα συνδυασµένης χρήσης των συναρτήσεων MPI_Recv και MPI_Get_count παρουσιάζεται στη συνέχεια: MPI_Recv (&value,1,mpi_int,rank-1,0, MPI_COMM_WORLD, &status ); MPI_Get_count (status, MPI_INT, &items)

17 Παράλληλα και Κατανεµηµένα Συστήµατα 17 Στον παραπάνω κώδικα, το όρισµα status (που ανήκει στον τύπο δεδοµένων MPI_Status) είναι εκείνο που επιστρέφεται από την MPI_Recv, ενώ items είναι µια ακέραια µεταβλητή η οποία µετά την κλήση της MPI_Get_count θα περιέχει το πλήθος των στοιχείων που περιέχονται στο µήνυµα που έχει παραληφθεί. Τα πρώτα προγράµµατα MPI Μετά την παρουσίαση των έξι βασικών συναρτήσεων του MPI ας παρουσιάσουµε τώρα µερικά παραδείγµατα χρήσης τους σε πρακτικές εφαρµογές προκειµένου να κατανοήσουµε το ρόλο τους και τον τρόπο µε τον οποίο χρησιµοποιούνται. Για κάθε ένα από τα προγράµµατα που θα παραθέσουµε θα εξηγήσουµε µε αναλυτικό τρόπο τη δοµή τους και τη λειτουργία τους προκειµένου ο αναγνώστης να εξοικειωθεί µε τη χρήση των συναρτήσεων MPI στη διαδικασία ανάπτυξης παράλληλων εφαρµογών. Ως ένα πρώτο παράδειγµα εφαρµογής MPI ας εξετάσουµε τον επόµενο κώδικα που επιτρέπει την ανταλλαγή µηνυµάτων µεταξύ δύο διεργασιών. #include <mpi.h> #include <stdio.h> int main (int argc, char * argv[]) { int rank, size, retval; char inmessage, outmessage='x'; MPI_Status status; retval = MPI_Init(&argc,&argv); if (retval!= 0) { printf ("Error starting MPI program. Terminating.\n"); MPI_Abort (MPI_COMM_WORLD, retval); } MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); if (rank == 0) { MPI_Send(&outMessage,1,MPI_CHAR,1,MPI_ANY_TAG, MPI_COMM_WORLD); MPI_Recv(&inMessage,1,MPI_CHAR, 1,MPI_ANY_TAG, MPI_COMM_WORLD, &status); } else if (rank == 1) { MPI_Recv(&inMessage,1,MPI_CHAR,source,tag, MPI_COMM_WORLD, &Stat); MPI_Send(&outMessage,1,MPI_CHAR,dest,tag, MPI_COMM_WORLD); } MPI_Finalize(); return (0); }

18 Το περιβάλλον προγραµµατισµού MPI 18 Στην πρώτη γραµµή του προγράµµατος δηλώνουµε τις µεταβλητές που θα χρησιµοποιήσουµε. Στην προκειµένη περίπτωση χρειαζόµαστε τρεις ακέραιες µεταβλητές, εκ των οποίων στη µεταβλητή rank θα καταχωρήσουµε την τάξη της τρέχουσας διεργασίας, στη µεταβλητή size θα καταχωρήσουµε το πλήθος των διεργασιών του τρέχοντος Communicator, ενώ η µεταβλητή retval χρησιµοποιείται για την ανάκτηση των κωδικών σφάλµατος (error codes) που επιστρέφονται από τις συναρτήσεις του MPI. Εκτός από τις παραπάνω µεταβλητές, θα χρειαστούµε δύο µεταβλητές τύπου χαρακτήρα που θα περιέχουν τα µηνύµατα προς αποστολή και λήψη (οι µεταβλητές inmessage και outmessage) ενώ είναι αναγκαία και η χρήση της µεταβλητής status που ανήκει στον τύπο δεδοµένων MPI_Status και χρησιµοποιείται από τη συνάρτηση MPI_Recv. Σε πλήρη εφαρµογή της θεωρίας που παρουσιάσαµε στις προηγούµενες ενότητες, η πρώτη συνάρτηση που καλείται πριν την κλήση οποιασδήποτε συνάρτησης MPI, είναι η MPI_Init, η οποία δέχεται ως ορίσµατα δύο δείκτες προς τα αντίστοιχα ορίσµατα της συνάρτησης main. Ωστόσο στην προκειµένη περίπτωση δεν περιοριζόµαστε στην απλή κλήση της εν λόγω συνάρτησης, αλλά ανακτούµε τον κωδικό σφάλµατος που επιστρέφεται από αυτή, προκειµένου να ελέγξουµε εάν η διαδικασία αρχικοποίησης του MPI έχει περατωθεί οµαλά. Σύµφωνα µε τις προδιαγραφές του εν λόγω προτύπου, εάν η αρχικοποίηση του MPI ολοκληρωθεί χωρίς πρόβληµα, η συνάρτηση MPI_Init επιστρέφει τιµή ίση µε το µηδέν (η τιµή αυτή αντιστοιχεί στη σταθερά MPI_SUCCESS), ενώ εάν παρουσιαστεί κάποιο σφάλµα, αυτή η επιστρεφόµενη τιµή είναι διάφορη του µηδενός. Στην τελευταία περίπτωση θα πρέπει να καλέσουµε τη συνάρτηση MPI_Abort η οποία τερµατίζει όλες τις διεργασίες που περιλαµβάνονται στον τρέχοντα Communicator και χαρακτηρίζεται από µια σύνταξη της µορφής MPI_Abort (MPI_Comm comm, int errorcode). Μιλώντας γενικά, η συνάρτηση MPI_Abort θα πρέπει να καλείται κάθε φορά που η MPI_Init αποτύχει να διαµορφώσει µε επιτυχία το περιβάλλον του MPI. Στην περίπτωση κατά την οποία η εκκίνηση του MPI περατωθεί οµαλά, χρησιµοποιούµε δύο εντολές οι οποίες καλούνται σε όλες σχεδόν τις περιπτώσεις: την εντολή MPI_Comm_rank για να ανακτήσουµε την τάξη της τρέχουσας διεργασίας και την εντολή MPI_Comm_size για να ανακτήσουµε το πλήθος των διεργασιών που περιλαµβάνονται στον τρέχοντα Communicator. Σύµφωνα µε τον κώδικα του προηγούµενου παραδείγµατος, οι εν λόγω τιµές µετά την εκτέλεση αυτών των δύο εντολών θα βρίσκονται καταχωρηµένες στις µεταβλητές rank και size αντίστοιχα. Οι επόµενες οµάδες εντολών που χαρακτηρίζονται από τις συνθήκες ελέγχου if (rank==0) και if (rank==1) αποτελούν ένα πρώτο παράδειγµα εφαρµογής της τάξης µιας διεργασίας. Όπως έχει ήδη αναφερθεί, µετά τη δηµιουργία του εκτελέσιµου αρχείου και τη χρήση της εντολής mpirun για τη δηµιουργία του επιθυµητού σε κάθε περίπτωση πλήθους διεργασιών, η κάθε διεργασία χαρακτηρίζεται από τη δική της τάξη, το δικό της χώρο µνήµης και τη δική της οµάδα µεταβλητών. Εάν για παράδειγµα χρησιµοποιήσουµε την εντολή mpirun np 2 example.exe όπου example.exe είναι το όνοµα του εκτελέσιµου αρχείου τότε θα λάβει χώρα δηµιουργία δύο διεργασιών η πρώτη εκ των οποίων θα έχει τάξη ίση µε το µηδέν, ενώ η δεύτερη θα έχει τάξη ίση µε 1. Εποµένως, λαµβάνοντας υπ όψιν πως ο κώδικας του ανωτέρω παραδείγµατος θα εκτελεστεί δύο φορές µια για την κάθε διεργασία είναι προφανές πως στην περίπτωση της πρώτης διεργασίας (που έχει τιµή τάξης ίση µε το µηδέν) θα εκτελεστεί η οµάδα εντολών που αντιστοιχεί στη

19 Παράλληλα και Κατανεµηµένα Συστήµατα 19 συνθήκη ελέγχου if (rank==0), ενώ στην περίπτωση της δεύτερης διεργασίας (που έχει τιµή τάξης ίση µε 1) θα εκτελεστεί η οµάδα εντολών που αντιστοιχεί στη συνθήκη ελέγχου if (rank==1). Με τον τρόπο αυτό είναι δυνατή η χρήση διαφορετικών συναρτήσεων και η υλοποίηση διαφορετικών διαδικασιών για κάθε µια από τις διεργασίες του συστήµατος, ανάλογα µε την τιµή της τάξης η οποία αποδίδεται σε αυτές από το περιβάλλον του MPI. Ας περάσουµε τώρα στο είδος της διαδικασίας που υλοποιείται σε κάθε περίπτωση. Στην περίπτωση της διεργασίας µε τιµή τάξης ίση µε το µηδέν, λαµβάνει χώρα αποστολή ενός απλού χαρακτήρα στη διεργασία µε τάξη 1, και λήψη ενός απλού χαρακτήρα από την εν λόγω διεργασία. Με εντελώς ανάλογο τρόπο, η διεργασία µε τάξη ίση 1, διαβάζει ένα απλό χαρακτήρα από τη διεργασία µε τάξη µηδέν, και κατόπιν αποστέλλει σε αυτή, το δικό της απλό χαρακτήρα. Εποµένως το παραπάνω πρόγραµµα το µόνο που κάνει είναι να δηµιουργεί δύο διεργασίες οι οποίες ανταλλάσσουν υπό τη µορφή µηνύµατος ένα απλό χαρακτήρα. Στο παράδειγµα του παραπάνω κώδικα η ετικέτα του µηνύµατος είναι µία παράµετρος που δεν µας ενδιαφέρει και για το λόγο αυτό χρησιµοποιείται η σταθερά MPI_ANY_TAG. Όσον αφορά τον Communicator δια µέσου του οποίου επικοινωνούν οι δύο διεργασίες, αυτός είναι ο προεπιλεγµένος Communicator που ταυτοποιείται από τον κωδικό MPI_COMM_WORLD. Στο τελευταίο βήµα της διαδικασίας καλούµε κατά τα γνωστά τη συνάρτηση MPI_Finalize για να τερµατίσει το περιβάλλον του MPI και παράλληλα ολοκληρώνουµε τη λειτουργία της συνάρτησης main µε την εντολή return (0). Ας περάσουµε τώρα σε ένα δεύτερο παράδειγµα χρήσης των συναρτήσεων του MPI. Για να το κάνουµε αυτό ας υποθέσουµε πως διαθέτουµε ένα πλήθος Ν διεργασιών οι οποίες έχουν τάξεις µε τιµές από 0 έως Ν-1. Από αυτές τις διεργασίες, αυτή που έχει τάξη όση µε το µηδέν, διαβάζει από το πληκτρολόγιο ένα θετικό αριθµό και στη συνέχεια τον αποστέλλει σε όλες τις διεργασίες που υπάρχουν στο σύστηµα. Η κάθε µια από αυτές τις διεργασίες, παραλαµβάνει τον εν λόγω αριθµό και εκτυπώνει την τιµή του µαζί µε την τάξη της. Αυτή η διαδικασία συνεχίζεται µέχρι ο χρήστης καταχωρήσει από το πληκτρολόγιο ένα αρνητικό αριθµό. Ο πηγαίος κώδικας που υλοποιεί την παραπάνω διαδικασία, παρουσιάζεται στη συνέχεια. #include <stdio.h> #include <mpi.h> int main (int argc, char * argv[]) { int rank, input; MPI_Init (&argc, &argv); MPI_Comm_rank ( MPI_COMM_WORLD, &rank ); do { if (rank==0) scan f("enter input value : %d", &input); MPI_Bcast (&input, 1, MPI_INT, 0, MPI_COMM_WORLD ); printf ( "Process %d got input %d\n", rank, input);

20 Το περιβάλλον προγραµµατισµού MPI 20 MPI_Finalize (); return (0); } } while (input>=0); Στον παραπάνω κώδικα παρουσιάζεται ένα ακόµη παράδειγµα διαφοροποίησης της διαδικασίας που πραγµατοποιείται µέσα σε κάποια διεργασία, µε κριτήριο την τιµή της τάξης της: εάν η τάξη της τρέχουσας διεργασίας είναι ίση µε το µηδέν, τότε η διεργασία αυτή είναι και εκείνη που θα αναλάβει να διαβάσει από το πληκτρολόγιο την τιµή που καταχωρεί ο χρήστης. Στη συνέχεια η εν λόγω τιµή διαβιβάζεται σε όλες τις υπόλοιπες διεργασίες του συστήµατος, οι οποίες την διαβάζουν και την εκτυπώνουν µαζί µε την τιµή της τάξης τους. Οι υπόλοιπες συναρτήσεις του MPI που χρησιµοποιούνται στο παραπάνω κώδικα είναι οι MPI_Init και MPI_Finalize που χρησιµοποιούνται για την αρχικοποίηση και τον τερµατισµό της λειτουργίας του MPI, καθώς και η συνάρτηση MPI_Comm_rank που επιστρέφει την τάξη της τρέχουσας διεργασίας. Η νέα συνάρτηση που εµφανίζεται για πρώτη φορά στην παρούσα ανάλυση, είναι η συνάρτηση MPI_Bcast η οποία αποτελεί και το πρώτο παράδειγµα συλλογικής επικοινωνίας. Η συνάρτηση αυτή αποστέλλει το µήνυµα κάποιας διεργασίας, σε όλες τις διεργασίες του συστήµατος, και εποµένως η διαδικασία που λαµβάνει χώρα δια της χρήσεως αυτής της συνάρτησης, είναι µια διαδικασία εκποµπής της πληροφορίας. Η σύνταξη αυτής της συνάρτησης έχει τη µορφή MPI_Bcast (void * buffer, int count, MPI_Datatype datatype, int srcrank, MPI_Comm comm). Από τα πέντε ορίσµατα που δέχεται η εν λόγω συνάρτηση, τα τρία πρώτα ορίσµατα χρησιµοποιούνται για τον καθορισµό των χαρακτηριστικών του µηνύµατος, και πιο συγκεκριµένα της διεύθυνσης µνήµης που περιέχει τα δεδοµένα προς αποστολή, καθώς επίσης το πλήθος και τον τύπο αυτών των δεδοµένων. Το τέταρτο όρισµα της συνάρτησης αναφέρεται στην τάξη της διεργασίας που εκπέµπει το µήνυµα (source rank). Η πληροφορία αυτή είναι αρκετή για να περιγράψει πλήρως τη διαδικασία της επικοινωνίας δεδοµένου πως το µήνυµα θα αποσταλεί σε όλες τις διεργασίες, δεν απαιτείται ο καθορισµός της τάξης της διαδικασίας παραλήπτη. Το τελευταίο όρισµα της συνάρτησης MPI_Bcast αναφέρεται στον Communicator στον οποίο ανήκουν οι παραπάνω διεργασίες. Εάν δεν έχουµε ορίσει κάποιον άλλο Communicator, τότε χρησιµοποιείται ο προεπιλεγµένος Communicator MPI_COMM_WORLD. Παράδειγµα χρήσης της συνάρτησης MPI_Bcast είναι η κλήση της µε τη µορφή MPI_Bcasr (&a, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD) η οποία επιτρέπει την εκποµπή της τιµής της πραγµατικής µεταβλητής a από τη διεργασία µε τιµή τάξης 0 σε όλες τις διεργασίες του συστήµατος. Ας σηµειωθεί πως µετά τον τερµατισµό της λειτουργίας αυτής της συνάρτησης, όλες οι ενδιάµεσες µνήµες των διεργασιών της εφαρµογής έχουν τα ίδια περιεχόµενα αυτό σηµαίνει πως δεν είναι αναγκαία η χρήση της συνάρτησης MPI_Recv για την παραλαβή του µηνύµατος, καθώς αυτό έχει ήδη αναγνωσθεί. Επιστρέφοντας στο παραπάνω παράδειγµα, δεν είναι δύσκολο να καταλάβουµε πως εκείνο που κάνει η συνάρτηση MPI_Bcast είναι να εκπέµπει προς όλες τις διεργασίες του συστήµατος την τιµή της µεταβλητής input η οποία διαβάστηκε από το πληκτρολόγιο από τη διεργασία µε τιµή τάξης ίση µε το µηδέν. Εάν δηµιουργήσουµε το εκτελέσιµο αρχείο και στη συνέχεια δηµιουργήσουµε 5

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Ενότητα 1: OpenMPI Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

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

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

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

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

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

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

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD Σε ορισµένες περιπτώσεις είναι ιδιαίτερα χρήσιµη η δηµιουργία ιστοσελίδων ενηµερωτικού περιεχοµένου οι οποίες στη συνέχεια µπορούν να δηµοσιευθούν σε κάποιο τόπο

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

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++

1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Email: liliadis@fmenr.duth.gr 1. ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ Τα προγράµµατα αποτελούνται από εντολές οι οποίες γράφονται σε έναν απλό επεξεργαστή που προσφέρει και το Περιβάλλον της Visual C++. Οι εντολές

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 14 Δυναμική διαχείριση μνήμης Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Στατική δέσμευση μνήμης Με τη δήλωση απλών μεταβλητών

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

ΑΝΑΖΗΤΗΣΗ ΣΕ ΗΛΕΚΤΡΟΝΙΚΕΣ ΒΙΒΛΙΟΘΗΚΕΣ

ΑΝΑΖΗΤΗΣΗ ΣΕ ΗΛΕΚΤΡΟΝΙΚΕΣ ΒΙΒΛΙΟΘΗΚΕΣ ΑΝΑΖΗΤΗΣΗ ΣΕ ΗΛΕΚΤΡΟΝΙΚΕΣ ΒΙΒΛΙΟΘΗΚΕΣ Μία από τις πιο σηµαντικές υπηρεσίες που προσφέρει το διαδίκτυο στην επιστηµονική κοινότητα είναι η αποµακρυσµένη πρόσβαση των χρηστών σε ηλεκτρονικές βιβλιοθήκες

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Triggers, Stored procedures Γιώργος Μαρκοµανώλης Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια...

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

Κεφάλαιο 5ο: Εντολές Επανάληψης

Κεφάλαιο 5ο: Εντολές Επανάληψης Χρήστος Τσαγγάρης ΕΕ ΙΠ Τµήµατος Μαθηµατικών, Πανεπιστηµίου Αιγαίου Κεφάλαιο 5ο: Εντολές Επανάληψης Η διαδικασία της επανάληψης είναι ιδιαίτερη συχνή, αφού πλήθος προβληµάτων µπορούν να επιλυθούν µε κατάλληλες

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

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

ΑΣΚΗΣΗ 5 η Η σειριακή επικοινωνία ΙΙ 1.1 ΣΚΟΠΟΣ Σκοπός της άσκησης αυτής είναι η κατανόηση σε βάθος των λειτουργιών που παρέχονται από το περιβάλλον LabView για τον χειρισµό της σειριακής επικοινωνίας

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 13 Αρχεία Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Αρχεία Συλλογές δεδομένων Αποθηκεύονται στην περιφερειακή μνήμη π.χ. σκληρός

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

Μεταφραστής (Compiler)

Μεταφραστής (Compiler) Windows Καθαρισµος οθονης cls Unix clear Τελεστες ανακατευθυνσης > > >> >> < < Εντολες σε αρχεια * * (wild card) del Α rm Α ιαγραφη type Α cat Α Εµφανιση copy Α Β cp Α Β Αντιγραφη ren Α Β mv Α Β Αλλαγη

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

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα 1. Ποια είναι η σχέση της έννοιας του μικροεπεξεργαστή με αυτή του μικροελεγκτή; Α. Ο μικροεπεξεργαστής εμπεριέχει τουλάχιστο έναν μικροελεγκτή. Β. Ο

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

Παράλληλη Επεξεργασία

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στο OpenMP Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Τι είναι το OpenMP Πρότυπο Επέκταση στη C/C++ και τη Fortran

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

Εισαγωγή στις Συναρτήσεις

Εισαγωγή στις Συναρτήσεις Εισαγωγή στις Συναρτήσεις Η φιλοσοφία σχεδίασης της C βασίζεται στη χρήση των συναρτήσεων. Έχουμε ήδη δει και χρησιμοποιήσει πολλές συναρτήσεις που έχει το σύστημα, όπως είναι οι printf(), scanf(),αλλά

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

Η ΕΝΝΟΙΑ ΤΟΥ Ε ΟΜΕΝΟΥ ΚΑΙ ΤΟΥ ΤΥΠΟΥ Ε ΟΜΕΝΩΝ

Η ΕΝΝΟΙΑ ΤΟΥ Ε ΟΜΕΝΟΥ ΚΑΙ ΤΟΥ ΤΥΠΟΥ Ε ΟΜΕΝΩΝ Κεφάλαιο 1 Εισαγωγή Στο κεφάλαιο αυτό παρουσιάζεται µια συνοπτική εισαγωγή στη θεωρία των βάσεων δεδοµένων και των συστηµάτων διαχείρισης βάσεων δεδοµένων, προκειµένου ο αναγνώστης να κατανοήσει τις βασικές

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

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

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

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

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.1-2.4: Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 2.1-2.4: Εισαγωγή στην C ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγή στην C: Σύνταξη και Σηµασιολογία σχόλια µεταβλητές και σταθερές τύποι δεδοµένων Μετά αυτές τις δυο διαλέξεις

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

Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο

Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο Το Ηλεκτρονικό Ταχυδροµείο (e-mail) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο χρήστη µέσω υπολογιστή άνετα γρήγορα και φτηνά. Για να

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

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 1 Είσοδος/ Έξοδος Σε σχεδόν όλα τα προγράµµατα πρέπει να πάρουµε κάποια δεδοµένα και να δώσουµε

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

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

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

Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Σκοπός του μαθήματος Σκοπός του παρόντος μαθήματος είναι να μάθετε να κάνετε εισαγωγή δεδομένων σε πίνακες και περαιτέρω επεξεργασία

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

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

Outlook Express-User Instructions.doc 1

Outlook Express-User Instructions.doc 1 Οδηγίες προς τους υπαλλήλους του ήµου Θεσσαλονίκης για την διαχείριση της ηλεκτρονικής τους αλληλογραφίας µε το Outlook Express (Ver 1.0 22-3-2011) (Για οποιοδήποτε πρόβληµα ή απορία επικοινωνήστε µε τον

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

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

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

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

ΑΣΚΗΣΗ 1. Structural Programming

ΑΣΚΗΣΗ 1. Structural Programming ΑΣΚΗΣΗ 1 Structural Programming Στην άσκηση αυτή θα υλοποιήσετε σε C ένα απλό πρόγραµµα Βάσης εδοµένων το οποίο θα µπορούσε να χρησιµοποιηθεί από την γραµµατεία ενός πανεπιστηµίου για την αποθήκευση και

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

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 1.3-1.4: Εισαγωγή Στον Προγραµµατισµό ( ιάλεξη 2) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγικές Έννοιες - Ορισµοί Ο κύκλος ανάπτυξης προγράµµατος Παραδείγµατα Πότε χρησιµοποιούµε υπολογιστή?

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

Η πολυνηματική γλώσσα προγραμματισμού Cilk

Η πολυνηματική γλώσσα προγραμματισμού Cilk Η πολυνηματική γλώσσα προγραμματισμού Cilk Β Καρακάσης Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού Μεταπτυχιακό Μάθημα (688), ΣΗΜΜΥ Νοέμβριος 2009 Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client ΕΣΔ 516 Τεχνολογίες Διαδικτύου Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client Περιεχόμενα Περιεχόμενα Javascript και HTML Βασική σύνταξη Μεταβλητές Τελεστές Συναρτήσεις

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

Σενάριο 17: Παιχνίδι μνήμης με εικόνες

Σενάριο 17: Παιχνίδι μνήμης με εικόνες Σενάριο 17: Παιχνίδι μνήμης με εικόνες Φύλλο Εργασίας Τίτλος: Παιχνίδι μνήμης με εικόνες Γνωστικό Αντικείμενο: Εφαρμογές Πληροφορικής-Υπολογιστών Διδακτική Ενότητα: Διερευνώ - Δημιουργώ Ανακαλύπτω, Συνθετικές

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

Επιμερισμός δεδομένων

Επιμερισμός δεδομένων Επιμερισμός δεδομένων Διαίρει και βασίλευε Κ.Γ. Μαργαρίτης προσαρμογή από το μάθημα του Barry Wilkinson ITCS 4145/5145 2006Cluster Computing Univ. of North Carolina at Charlotte Επιμερισμός δεδομένων Κατανομή

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

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα Η ΓΛΩΣΣΑ C Η C είναι μια γλώσσα προγραμματισμού υψηλού επιπέδου η οποία αναπτύχθηκε στις αρχές της δεκαετίας του 70 από τον Dennis Ritchie στα Bell Labs. Η σημερινή μορφή της γλώσσας ακολουθεί το πρότυπο

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

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης ΚΕΦΑΛΑΙΟ 1ο 3ο 1. Συμπληρώστε τα κενά με τη λέξη που λείπει. α. Ένα πρόβλημα το χωρίζουμε σε άλλα απλούστερα, όταν είναι ή όταν έχει τρόπο επίλυσης. β. Η επίλυση ενός προβλήματος προϋποθέτει την του. γ.

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 12 Δομές (Structures) Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Αφαιρετικότητα Με τις συναρτήσεις επιτυγχάνουμε αφαιρετικότητα

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

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο 2005-06. Κατανεµηµένα συστήµατα αρχείων. Μέρη κατανεµηµένου συστήµατος αρχείων

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο 2005-06. Κατανεµηµένα συστήµατα αρχείων. Μέρη κατανεµηµένου συστήµατος αρχείων Εισαγωγή Ε-03: Λειτουργικά Συστήµατα ΙΙ Εαρινό Εξάµηνο 2005-06 «Κατανεµηµένα Συστήµατα Αρχείων (1/2)» ρ. Παναγιώτης Χατζηδούκας (Π..407/80) Σύστηµα αρχείων Αποθήκευση, προσπέλαση και διαχείριση δεδοµένων

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

1ο. Η αριθµητική του υπολογιστή

1ο. Η αριθµητική του υπολογιστή 1ο. Η αριθµητική του υπολογιστή 1.1 Τί είναι Αριθµητική Ανάλυση Υπάρχουν πολλά προβλήµατα στη µαθηµατική επιστήµη για τα οποία δεν υπάρχουν αναλυτικές εκφράσεις λύσεων. Στις περιπτώσεις αυτές έχουν αναπτυχθεί

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

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα Απλά Προγράμματα Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα Οι Βασικοί κανόνες Κατανόηση

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

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 8.6 Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 16-1 Πίνακες - Επανάληψη Στην προηγούµενη διάλεξη κάναµε µια εισαγωγή στην δοµή δεδοµένων Πίνακας Σε ένα πίνακα ένα σύνολο αντικειµένων

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

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

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Θεµατική Ενότητα ΠΛΗ 21: Ψηφιακά Συστήµατα Ακαδηµαϊκό Έτος 2009 2010 Γραπτή Εργασία #3 Παράδοση: 28 Μαρτίου 2010 Άσκηση 1 (15 µονάδες) Ένας επεξεργαστής υποστηρίζει τόσο

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΤΕΤΑΡΤΟ Insert, Update, Delete, Ένωση πινάκων Γιώργος Μαρκοµανώλης Περιεχόµενα Group By... 1 Having...1 Οrder By... 2 Εντολή Insert...

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

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

M:N, είναι προφανές, πως οι βαθµοί των µαθητών του σχολείου θα καταχωρηθούν σε ένα ενδιάµεσο πίνακα (ας τον ονοµάσουµε ΒΑΘΜΟΛΟΓΙΑ) που θα περιέχει

M:N, είναι προφανές, πως οι βαθµοί των µαθητών του σχολείου θα καταχωρηθούν σε ένα ενδιάµεσο πίνακα (ας τον ονοµάσουµε ΒΑΘΜΟΛΟΓΙΑ) που θα περιέχει Κεφάλαιο 12 Αναφορές Στο κεφάλαιο αυτό περιγράφεται η διαδικασία δηµιουργίας αναφορών οι οποίες εµφανίζουν τα δεδοµένα των πινάκων της βάσης ή τα αποτελέσµατα των ερωτηµάτων της εφαρµογής, σε µορφή κατάλληλη

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

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ. Επίπεδα Αφαίρεσης Σ Β. Αποθήκευση Εγγραφών - Ευρετήρια. ρ. Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, Επίπεδο Όψεων.

ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ. Επίπεδα Αφαίρεσης Σ Β. Αποθήκευση Εγγραφών - Ευρετήρια. ρ. Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, Επίπεδο Όψεων. ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ Χειµερινό Εξάµηνο 2002 Αποθήκευση Εγγραφών - Ευρετήρια ρ Βαγγελιώ Καβακλή ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ, ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Επίπεδα Αφαίρεσης Σ Β Επίπεδο Όψεων Όψη Όψη

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

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

Γ' ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΚΦΩΝΗΣΕΙΣ 1 Γ' ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΘΕΜΑ 1 ο ΕΚΦΩΝΗΣΕΙΣ Α. Να γράψετε στο τετράδιό σας τον αριθµό καθεµιάς από τις παρακάτω προτάσεις 1-5 και δίπλα τη

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

Διάλεξη 18η: Διαχείρηση Αρχείων

Διάλεξη 18η: Διαχείρηση Αρχείων Διάλεξη 18η: Διαχείρηση Αρχείων Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Αρχεία CS100, 2015-2016 1 / 24 Η βιβλιοθήκη Εισόδου/Εξόδου Στο stdioh

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

KΕΦΑΛΑΙΟ 5 ΨΗΦΙΑΚΕΣ ΥΠΟΓΡΑΦΕΣ

KΕΦΑΛΑΙΟ 5 ΨΗΦΙΑΚΕΣ ΥΠΟΓΡΑΦΕΣ KΕΦΑΛΑΙΟ 5 ΨΗΦΙΑΚΕΣ ΥΠΟΓΡΑΦΕΣ 1 Γενικά Η ψηφιακή υπογραφή είναι µια µέθοδος ηλεκτρονικής υπογραφής όπου ο παραλήπτης ενός υπογεγραµµένου ηλεκτρονικού µηνύµατος µπορεί να διαπιστώσει τη γνησιότητα του,

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II (Κεφάλαια 25.2, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132

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

Προγραµµατιστική Εργασία 1 ο Μέρος

Προγραµµατιστική Εργασία 1 ο Μέρος Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών 4 Νοεµβρίου 2011 ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος 2011-12 ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία 1 ο Μέρος Ηµεροµηνία

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

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2014-15 Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, και Ε/Ε) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

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

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1) Αντικείμενα (Objects) στην Java Αντικείμενα στη Java Παύλος Εφραιμίδης Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας μηνύματα το ένα στο άλλο

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

Η Υπηρεσία του Ηλεκτρονικού Ταχυδροµείου (E-mail)

Η Υπηρεσία του Ηλεκτρονικού Ταχυδροµείου (E-mail) Η Υπηρεσία του Ηλεκτρονικού Ταχυδροµείου (E-mail) Η υπηρεσία του ηλεκτρονικού ταχυδροµείου (E-mail), είναι µια από τις περισσότερο δηµοφιλείς υπηρεσίες του ιαδικτύου (Internet). Μαζί µε την υπηρεσία του

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

Κεφάλαιο 7 Εισαγωγή στη Microsoft Access

Κεφάλαιο 7 Εισαγωγή στη Microsoft Access Κεφάλαιο 7 Εισαγωγή στη Microsoft Access Το κεφάλαιο αυτό περιλαµβάνει µια συνοπτική εισαγωγή στην Microsoft Access 2000, που είναι και το σχεσιακό σύστηµα διαχείρισης βάσεων δεδοµένων µε το οποίο θα ασχοληθούµε.

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

Ενότητα 3. Στρώµα Ζεύξης: Αρχές Λειτουργίας & Το Υπόδειγµα του Ethernet

Ενότητα 3. Στρώµα Ζεύξης: Αρχές Λειτουργίας & Το Υπόδειγµα του Ethernet Ενότητα 3 Στρώµα Ζεύξης: Αρχές Λειτουργίας & Το Υπόδειγµα του Ethernet Εισαγωγή στις βασικές έννοιες του στρώµατος Ζεύξης (Data Link Layer) στα δίκτυα ΗΥ Γενικές Αρχές Λειτουργίας ηµιουργία Πλαισίων Έλεγχος

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΩΤΗΣΕΙΣ 1. Τι καλείται ψευδοκώδικας; 2. Τι καλείται λογικό διάγραμμα; 3. Για ποιο λόγο είναι απαραίτητη η τυποποίηση του αλγόριθμου; 4. Ποιες είναι οι βασικές αλγοριθμικές δομές; 5. Να περιγράψετε τις

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

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση

ΚΕΦΑΛΑΙΟ 18. 18 Μηχανική Μάθηση ΚΕΦΑΛΑΙΟ 18 18 Μηχανική Μάθηση Ένα φυσικό ή τεχνητό σύστηµα επεξεργασίας πληροφορίας συµπεριλαµβανοµένων εκείνων µε δυνατότητες αντίληψης, µάθησης, συλλογισµού, λήψης απόφασης, επικοινωνίας και δράσης

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

III. Πως μετατρέπεται το πηγαίο πρόγραμμα σε εκτελέσιμο πρόγραμμα;

III. Πως μετατρέπεται το πηγαίο πρόγραμμα σε εκτελέσιμο πρόγραμμα; ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΙΑΓΩΝΙΣΜΑ ΟΝΟΜΑΤΕΠΩΝΥΜΟ: Θέμα 1ο I. Τι πρέπει να ικανοποιεί ένα κομμάτι κώδικα ώστε να χαρακτηριστεί ως υποπρόγραμμα; Τα υποπρογράμματα πρέπει

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β. ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Σύνολο χαρακτήρων της Pascal Για

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

Κεφάλαιο 9 ο Κ 5, 4 4, 5 0, 0 0,0 5, 4 4, 5. Όπως βλέπουµε το παίγνιο δεν έχει καµιά ισορροπία κατά Nash σε αµιγείς στρατηγικές διότι: (ΙΙ) Α Κ

Κεφάλαιο 9 ο Κ 5, 4 4, 5 0, 0 0,0 5, 4 4, 5. Όπως βλέπουµε το παίγνιο δεν έχει καµιά ισορροπία κατά Nash σε αµιγείς στρατηγικές διότι: (ΙΙ) Α Κ Κεφάλαιο ο Μεικτές Στρατηγικές Τώρα θα δούµε ένα παράδειγµα στο οποίο κάθε παίχτης έχει τρεις στρατηγικές. Αυτό θα µπορούσε να είναι η µορφή που παίρνει κάποιος µετά που έχει απαλείψει όλες τις αυστηρά

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

Εισαγωγή στο ιαδικαστικό Προγραµµατισµό C

Εισαγωγή στο ιαδικαστικό Προγραµµατισµό C ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΗΜΕΙΩΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ Εισαγωγή στο ιαδικαστικό Προγραµµατισµό C Ελευθέριος. Πολυχρονόπουλος Επίκουρος Καθηγητής ΠΑΤΡΑ 2008

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

Αρχιτεκτονική Υπολογιστών II 16-2-2012. Ενδεικτικές απαντήσεις στα θέματα των εξετάσεων

Αρχιτεκτονική Υπολογιστών II 16-2-2012. Ενδεικτικές απαντήσεις στα θέματα των εξετάσεων Αρχιτεκτονική Υπολογιστών II 6 --0 Ενδεικτικές απαντήσεις στα θέματα των εξετάσεων Θέμα. Τι γνωρίζετε για την τοπικότητα των αναφορών και ποιών μονάδων του υπολογιστή ή τεχνικών η απόδοση εξαρτάται από

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C Ιανουάριος 2013 Τι είναι ένα πρόγραμμα; Πρόγραμμα είναι μία σειρά από οδηγίες που δίνουμε στον υπολογιστή προκειμένου αυτός να κάνει κάποια συγκεκριμένη εργασία Πώς

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

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση 2012-2013 27 Μαρτίου 2013 Περίληψη Σκοπός της παρούσας εργασίας είναι η εξοικείωσή σας με τις θεμελιώδεις θεωρητικές και πρακτικές πτυχές

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

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ Python & NLTK: Εισαγωγή Εισαγωγή Γιατί Python? Παρουσίαση NLTK Πηγές και χρήσιμα εργαλεία Φροντιστήριο σε Python Στο φροντιστήριο: Εισαγωγή στην Python Ζητήματα προγραμματισμού για

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

ΠΡΩΤΟΚΟΛΟ HTTP ΕΝΤΟΛΩΝ ΔΙΑΣΥΝΔΕΣΗΣ ΕΚΔΟΣΗ 1.2

ΠΡΩΤΟΚΟΛΟ HTTP ΕΝΤΟΛΩΝ ΔΙΑΣΥΝΔΕΣΗΣ ΕΚΔΟΣΗ 1.2 ΠΡΩΤΟΚΟΛΟ HTTP ΕΝΤΟΛΩΝ ΔΙΑΣΥΝΔΕΣΗΣ ΕΚΔΟΣΗ 1.2 1 ΠΕΡΙΕΧΟΜΕΝΑ Πρωτόκολο http εντολών έκδοση 1.0 Σελ:2...περιεχόμενα Σελ:3...τι θα βρείτε σε αυτό το βιβλίο Σελ:3...γενικά τεχνικά χαρακτηριστικά Σελ:4-5...πως

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

Εισαγωγή στα ψηφιακά Συστήµατα Μετρήσεων

Εισαγωγή στα ψηφιακά Συστήµατα Μετρήσεων 1 Εισαγωγή στα ψηφιακά Συστήµατα Μετρήσεων 1.1 Ηλεκτρικά και Ηλεκτρονικά Συστήµατα Μετρήσεων Στο παρελθόν χρησιµοποιήθηκαν µέθοδοι µετρήσεων που στηριζόταν στις αρχές της µηχανικής, της οπτικής ή της θερµοδυναµικής.

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

το ιαδίκτυο συνδέει εκατοµµύρια χρήστες αποτελώντας την µεγαλύτερη πηγή πληροφοριών και ανταλλαγής µηνυµάτων στον πλανήτη.

το ιαδίκτυο συνδέει εκατοµµύρια χρήστες αποτελώντας την µεγαλύτερη πηγή πληροφοριών και ανταλλαγής µηνυµάτων στον πλανήτη. το ιαδίκτυο Μέχρι τώρα µάθαµε να εργαζόµαστε σε έναν από τους υπολογιστές του Εργαστηρίου µας. Όµως παρατηρήσαµε ότι οι υπολογιστές αυτοί µπορούν να ανταλλάσσουν στοιχεία, να τυπώνουν όλοι σε έναν εκτυπωτή

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

2. Στοιχεία Πολυδιάστατων Κατανοµών

2. Στοιχεία Πολυδιάστατων Κατανοµών Στοιχεία Πολυδιάστατων Κατανοµών Είναι φανερό ότι έως τώρα η µελέτη µας επικεντρώνεται κάθε φορά σε πιθανότητες που αφορούν µία τυχαία µεταβλητή Σε αρκετές όµως περιπτώσεις ενδιαφερόµαστε να εξετάσουµε

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο. Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 7 Ο Αριθμητικές πράξεις Τυχαίοι αριθμοί Εφαρμογές σε προβλήματα ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 Εισαγωγή Οι αριθμητικές πράξεις που εκτελούνται στον υπολογιστή αποτελούν το

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

Αναπαράσταση Μη Αριθμητικών Δεδομένων

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

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

Σηµειώσεις στις σειρές

Σηµειώσεις στις σειρές . ΟΡΙΣΜΟΙ - ΓΕΝΙΚΕΣ ΕΝΝΟΙΕΣ Σηµειώσεις στις σειρές Στην Ενότητα αυτή παρουσιάζουµε τις βασικές-απαραίτητες έννοιες για την µελέτη των σειρών πραγµατικών αριθµών και των εφαρµογών τους. Έτσι, δίνονται συστηµατικά

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

7.8 Σύστηµα ονοµάτων περιοχών (Domain Name System, DNS)

7.8 Σύστηµα ονοµάτων περιοχών (Domain Name System, DNS) 7.8 ύστηµα ονοµάτων περιοχών (Domain Name System, DNS) Ερωτήσεις 1. Γιατί χρησιµοποιούµε συµβολικά ονόµατα αντί για τις διευθύνσεις; 2. ε τι αναφέρονται το όνοµα και η διεύθυνση ενός υπολογιστή; Πώς και

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΗΥ340 ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2010 Ι ΑΣΚΩΝ: ΑΝΤΩΝΙΟΣ ΣΑΒΒΙ ΗΣ ΒΑΣΙΚΗ ΕΡΓΑΣΙΑ ΦΑΣΗ 2η από 5 Ανάθεση: Πέµπτη 15 Απριλίου 2010, 11:00 (πρωί)

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

Ασφάλειες Database Οδηγίες Χρήσης Εφαρµογής

Ασφάλειες Database Οδηγίες Χρήσης Εφαρµογής Ασφάλειες Database Οδηγίες Χρήσης Εφαρµογής Εφαρµογή ιαχείρισης Ασφαλιστικού Γραφείου-Πρακτορείου ΠΕΡΙΕΧΟΜΕΝΑ 1.Γενικά Ταξινόµηση Εναλλαγή µεταξύ των ανοικτών παραθύρων Εξαγωγή εδοµένων Συνηµµένα Αρχεία

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

3. Σελιδοποίηση μνήμης 4. Τμηματοποίηση χώρου διευθύνσεων

3. Σελιδοποίηση μνήμης 4. Τμηματοποίηση χώρου διευθύνσεων ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ MHXANIKOI Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΙΠΕ Ο ΜΗΧΑΝΗΣ ΛΕΙΤΟΥΡΓΙΚΟΥ ΣΥΣΤΗΜΑΤΟΣ Γ. Τσιατούχας 6 ο Κεφάλαιο 1. Επίπεδο OSM 2. Εικονική μνήμη ιάρθρωση 3. Σελιδοποίηση μνήμης 4. Τμηματοποίηση

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

internet είναι το δίκτυο των υπολογιστών που είναι συνδεδεµένοι µεταξύ τους.

internet είναι το δίκτυο των υπολογιστών που είναι συνδεδεµένοι µεταξύ τους. Πριν ξεκινήσουµε την περιγραφή του προγράµµατος καλό θα ήταν να αναφερθούµε στον ορισµό κάποιων εννοιών για τις οποίες θα γίνεται λόγος στο κεφάλαιο αυτό. Πρώτα από όλα πρέπει να καταλάβουµε την διαφορά

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

PBI-192. Οδηγίες Χρήσης. Paradox to KNX-BUS Interface

PBI-192. Οδηγίες Χρήσης. Paradox to KNX-BUS Interface PBI-192 Paradox to KNX-BUS Interface Οδηγίες Χρήσης GDS Intelligence in Buildings Ελ. Βενιζέλου 116 Νέα Ερυθραία, 14671 Τηλ: +30 2108071288 Email: info@gds.com.gr Web: gds.com.gr Περιεχόμενα 1 Περιγραφή

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

7.11 Πρωτόκολλα Εφαρµογής. 7.11.2 Βασικές και Προηγµένες Υπηρεσίες ιαδικτύου. Ηλεκτρονικό Ταχυδροµείο. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

7.11 Πρωτόκολλα Εφαρµογής. 7.11.2 Βασικές και Προηγµένες Υπηρεσίες ιαδικτύου. Ηλεκτρονικό Ταχυδροµείο. Τεχνολογία ικτύων Επικοινωνιών ΙΙ Τεχνολογία ικτύων Επικοινωνιών ΙΙ 7.11 Πρωτόκολλα Εφαρµογής 104. Αναφέρετε ονοµαστικά τις πιο χαρακτηριστικές εφαρµογές που υποστηρίζει η τεχνολογία TCP/IP οι οποίες είναι διαθέσιµες στο ιαδίκτυο 1. Ηλεκτρονικό

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

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ και ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ 2.1 Να δοθεί ο ορισμός

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

1.1.3 t. t = t2 - t1 1.1.4 x2 - x1. x = x2 x1 . . 1

1.1.3 t. t = t2 - t1 1.1.4  x2 - x1. x = x2 x1 . . 1 1 1 o Κεφάλαιο: Ευθύγραµµη Κίνηση Πώς θα µπορούσε να περιγραφεί η κίνηση ενός αγωνιστικού αυτοκινήτου; Πόσο γρήγορα κινείται η µπάλα που κλώτσησε ένας ποδοσφαιριστής; Απαντήσεις σε τέτοια ερωτήµατα δίνει

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

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση: ΠΡΟΓΡΜΜΑΤΑ ΣΕ C Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση: int b_to_d(int dyad[16]) που δέχεται ως είσοδο έναν θετικό ακέραιο δυαδικό αριθμό με τη μορφή πίνακα δυαδικών ψηφίων και επιστρέφει τον

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

Vodafone Business Connect

Vodafone Business Connect Vodafone Business Connect Vodafone Business WebHosting Αναλυτικός Οδηγός Χρήσης DNS Manager Αναλυτικός οδηγός χρήσης: DNS Manager Vodafone Business Connect - Υπηρεσίες φιλοξενίας εταιρικού e-mail & web

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

Λειτουργικά Συστήματα

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:09 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να αναπτύξουν ένα πρόγραμμα όπου θα επαναλάβουν τα βήματα ανάπτυξης μιας παραθυρικής εφαρμογής.

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

Εργαστήριο 2: Πίνακες

Εργαστήριο 2: Πίνακες Εργαστήριο 2: Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Επεξεργασία Πινάκων - Υλοποίηση της Δυαδικής Αναζήτησης σε πίνακες - Υλοποίηση της Ταξινόμησης με Επιλογής σε πίνακες ΕΠΛ035

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

Περίληψη ιπλωµατικής Εργασίας

Περίληψη ιπλωµατικής Εργασίας Περίληψη ιπλωµατικής Εργασίας Θέµα: Εναλλακτικές Τεχνικές Εντοπισµού Θέσης Όνοµα: Κατερίνα Σπόντου Επιβλέπων: Ιωάννης Βασιλείου Συν-επιβλέπων: Σπύρος Αθανασίου 1. Αντικείµενο της διπλωµατικής Ο εντοπισµός

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

Περιπτώσεις αλλαγής Λογιστικού Σχεδίου.

Περιπτώσεις αλλαγής Λογιστικού Σχεδίου. Μετατροπή Κωδικοποίησης Λογιστικού Σχεδίου Παράµετρος & Προτιµήσεις Εργασίες Έναρξης Οικονοµικές Χρήσεις Μετατροπή Κωδικοποίησης Λογιστικού Σχεδίου Μέσω της εργασίας αυτής, αναλύεται ο τρόπος µε τον οποίο

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

ΤΕΧΝΟΛΟΓΙΑ ΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ΤΕΧΝΟΛΟΓΙΑ ΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 7.3 Πρωτόκολλο 7.3.1 συνδέσεις Στηνπαρουσίαση του πρωτοκόλλου είπαµε, ότι πρόκειται για πρωτόκολλοπροσανατολισµένο σε σύνδεση. Τι είναιόµως η σύνδεσηκαι πωςτο πρωτόκολλοσυσχετίζειτα τµήµατα µε τη σύνδεση,

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

ΠΡΟΧΕΙΡΕΣ ΣΗΜΕΙΩΣΕΙΣ ΣΤΗΝ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C. Χρήστος Αρβανίτης

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

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

Διάλεξη 6: Δείκτες και Πίνακες

Διάλεξη 6: Δείκτες και Πίνακες Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 6: Δείκτες και Πίνακες (Κεφάλαιο 12, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 6-1 Περιεχόμενο

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

Εισαγωγή στις Βάσεις εδοµένων και την Access

Εισαγωγή στις Βάσεις εδοµένων και την Access Μάθηµα 1 Εισαγωγή στις Βάσεις εδοµένων και την Access Τι είναι οι βάσεις δεδοµένων Μία βάση δεδοµένων (Β..) είναι µία οργανωµένη συλλογή πληροφοριών, οι οποίες είναι αποθηκευµένες σε κάποιο αποθηκευτικό

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