Αρχιτεκτονική Υπολογιστών

Σχετικά έγγραφα
Αρχιτεκτονική Υπολογιστών

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

Σεμινάριο Git & GitLab. Γιώργος Τσιάτσιος Δημήτρης Κάσσος

Αρχιτεκτονική Υπολογιστών

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

Αρχιτεκτονική Υπολογιστών

Εργαστήριο 2. Εισαγωγή στο Git Versioning System

Αρχιτεκτονική Υπολογιστών

Subversion. Τριγάζη Ελισάβετ. Επιβλέπων: Μηνάς Δασυγένης

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

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

Σεμινάριο Git & GitLab. Τάκης Παναγόπουλος Νικόλας Μπομπέτσης

Αρχιτεκτονική Υπολογιστών

Σεμινάριο Git & GitHub. Θέμης Παπαμελετίου Διονύσης Ζήνδρος

Αρχιτεκτονική υπολογιστών

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

Υπολογιστές Ι. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

SUBVERSION. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Αρχιτεκτονική Υπολογιστών

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

Αρχιτεκτονική υπολογιστών

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Σύντομος Οδηγός Github Μηνάς Δασυγένης (

Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών ΗΥ463 Συστήματα Ανάκτησης Πληροφοριών Χειμερινό Εξάμηνο

Αρχιτεκτονική Υπολογιστών

Εισαγωγή στους Αλγορίθμους

Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 3 η : Παράλληλη Επεξεργασία. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Αρχιτεκτονική Υπολογιστών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Εισαγωγή ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Εισαγωγή στους Αλγορίθμους

Συστήματα Αναμονής. Ενότητα 1: Εισαγωγή. Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Υ- 07 Παράλληλα Συστήματα Συνέπεια και συνοχή μνήμης

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Διαχείριση Πολιτισμικών Δεδομένων

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

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Αρχιτεκτονική υπολογιστών

Αρχιτεκτονική Υπολογιστών

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

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

Τεχνολογία Πολυμέσων. Ενότητα # 3: Συστήματα πολυμέσων Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Βάσεις Δεδομένων Ενότητα 1

Αρχιτεκτονική Υπολογιστών

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

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

Ειδικά Θέματα Δικτύων Ι

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Πολυπύρηνοι επεξεργαστές Multicore processors

Αρχιτεκτονική Υπολογιστών

Μικροβιολογία & Υγιεινή Τροφίμων

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Απόδοση ΚΜΕ. (Μέτρηση και τεχνικές βελτίωσης απόδοσης)

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

Αρχιτεκτονική υπολογιστών

Μαθηματικά και Φυσική με Υπολογιστές

Τεχνολογία Λογισμικού

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

Πληροφορική II. Ενότητα 5 : Δομές Δεδομένων και αφηρημένοι. τύποι δεδομένων. Δρ. Γκόγκος Χρήστος

Πληροφορική ΙΙ Ενότητα 1

Αρχιτεκτονική Υπολογιστών

Ειδικά Θέματα Δικτύων ΙΙ

Διδακτική Πληροφορικής

Κεφάλαιο 4: Λογισμικό Συστήματος

Ενσωματωμένα Συστήματα

Τεχνολογία Λογισμικού

Ειδικά Θέματα Δικτύων Ι

Σεμινάριο Git & GitHub Ημέρα 2

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Οργάνωση Υπολογιστών

Τεχνολογία Πολυμέσων. Ενότητα # 16: Πολυεκπομπή Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Σχεδίαση Δικτύων Υπολογιστών

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων VLSI II

Βάσεις Περιβαλλοντικών Δεδομένων

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Εισαγωγή στους Υπολογιστές

Κεφάλαιο 3. Διδακτικοί Στόχοι

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

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

Εφαρμοσμένη Στατιστική

Σχεδίαση Δικτύων Υπολογιστών

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Προγραμματισμός Η/Υ. Αλγόριθμοι. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Διαφήμιση και Δημόσιες Σχέσεις Ενότητα 9: Σχέσεις διαφημιστή-διαφημιζόμενου

Βάιος Κολοφωτιάς Msc Informational Systems. Μια εισαγωγή στο GIT

Διδακτική της Πληροφορικής

Μαθηματικά και Φυσική με Υπολογιστές

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Διδακτική της Πληροφορικής

Εισαγωγή στην Διοίκηση Επιχειρήσεων

i Throughput: Ο ρυθμός ολοκλήρωσης έργου σε συγκεκριμένο χρόνο

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Σύγχρονοι υπολογιστές Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Παράλληλη επεξεργασία Αρης Ευθυμίου

Παράλληλοι υπολογιστές παλιά ιδέα!! Στόχος: συνδέουμε πολλούς επεξεργαστές/υπολογιστές " μεγάλο, γρήγορο υπολογιστή Επίδοση ανάλογη του αριθμού υπολογιστών! Το λογισμικό πρέπει να δουλεύει με μεταβλητό αριθμό επεξεργαστών! Κατανάλωση ενέργειας πολλοί μικροί, αποδοτικοί επεξεργαστές! Αξιοπιστία πλεονασμός επεξεργαστών: το σύστημα θα μπορεί να λειτουργεί ακόμα και αν μερικοί αστοχήσουν 2

Επίδοση! Ρυθμός διεκπαιρέωσης εργασιών/προγραμμάτων job- level parallelism ή process- level parallelism ανεξάρτητες εφαρμογές Σχετικά εύκολη περίπτωση: συστάδα (cluster) υπολογιστών συνδεδεμένοι με δίκτυο (γρήγορο Ethernet)! Χρόνος υπολογισμού μίας εφαρμογής διάσπαση του προβλήματος και εκτέλεση σε πολλαπλούς επεξεργαστές 3

Πολυπύρηνοι μικροεπεξεργαστές! Ασύμφορη εκμετάλευση παραλληλίας επιπέδου εντολής πολύ μικρό κέρδος για μεγάλο κόστος! σε επιφάνεια πυριτίου και ενέργειας! Χρήση των επιπλέον τρανζίστορ του Ο.Κ. (Νόμος Moore) πολλαπλοί «επεξεργαστές» στο Ο.Κ. Ορος: πυρήνας (core) για επεξεργαστή, επεξεργαστής/cpu για το ολοκληρωμένο κύκλωμα που περιέχει τους πυρήνες mulr- core σχετικά λίγοι πυρήνες many- core πολλοί πυρήνες 4

Στόχος/πρόκληση! Κατασκευή υλικού και λογισμικού που διευκολύνει τη συγγραφή σωστών προγραμμάτων που εκτελούνται αποδοτικά (χρόνος, ενέργεια) καθώς ο αριθμός πυρήνων αυξάνεται! Υπάρχει και concurrent λογισμικό όχι μόνο σειριακό π.χ. Λειτουργικό Σύστημα 5

Παράλληλα προγράμματα! Η συγγραφή προγραμμάτων που χρησιμοποιούν πολλούς επεξεργαστές για μία εφαρμογή είναι δύσκολη decomposiron: διαχωρισμός σε έργα (task) assignment: ανάθεση έργων σε διεργασίες/νήματα orchestraron: ενορχήστρωση της πρόσβασης δεδομένων, επικοινωνίας, συγχρονισμού των διεργασιών mapping: αντιστοίχιση διεργασιών σε πυρήνες! Το πρόβλημα γίνεται πιο δύσκολο όσο αυξάνεται ο αριθμός των πυρήνων! Νήμα (thread) παρόμοιος όρος με τη διεργασία συχνά αναφέρεται σε διεργασία που αποτελεί μέρος μίας εφαρμογής 6

Διαχωρισμός - νόμος του Amdahl! Απαιτείται παραλληλισμός όλου του προγράμματος! Νόμος του Amdahl:! Εφαρμογή σε παράλληλο σύστημα 0<P<1 τμήμα που παραλληλοποιήθηκε Ν αριθμός επεξεργαστών! Παράδειγμα: 90 φορές ταχύτερα με 100 επεξεργαστές 1- P = 0.001 0.1% του προγράμματος δεν είναι παράλληλο! 7

Κλιμάκωση προβλήματος 1/3! Παράδειγμα - εφαρμογή πρόσθεση 10 τιμών (υποθ. δεν παραλληλίζεται) πρόσθεση 2 πινάκων διαστάσεων 10x10 Αριθμός επεξεργαστών 10, 100 Προσθέσεις (1 επεξεργαστής, 10x10): 10*10 + 10 = 110 Προσθέσεις (10 επεξεργαστες, 10x10): 10*10/10 + 10 = 20! speedup = 5.5 Προσθέσεις (100 επεξεργαστες, 10x10): 10*10/100 + 10 = 11! speedup = 10 8

Κλιμάκωση προβλήματος 2/3! Παράδειγμα - εφαρμογή πρόσθεση 10 τιμών (υποθ. δεν παραλληλίζεται) πρόσθεση 2 πινάκων διαστάσεων 100x100 Αριθμός επεξεργαστών 10, 100 Προσθέσεις (1 επεξεργαστής, 100x100): 100*100 + 10 = 10010 Προσθέσεις (10 επεξεργαστες, 100x100): 100*100/10 + 10 = 1010! speedup = 9.9 Προσθέσεις (100 επεξεργαστες, 100x100): 100*100/100 + 10 = 110! speedup = 91 9

Κλιμάκωση προβλήματος! Δύσκολο να επιτευχθεί σημαντική βελτίωση κρατώντας το μέγεθος προβλήματος σταθερό! Strong scaling σταθερό μέγεθος προβλήματος! weak scaling μέγεθος προβλήματος ανάλογο του αριθμού επεξεργαστών 10

Eξισορρόπηση φόρτου! Παράδειγμα προηγούμενη εφαρμογή 100 επεξεργαστές, πίνακας 100x100 κάθε επεξεργαστής έκανε 1/100 της δουλειάς Υπολογισμός χρόνου αν μόνο ένας επεξεργαστής έχει επιπλέον φόρτο: το 2% της δουλειάς! και το 5% 11

Eξισορρόπηση φόρτου! 2% * 100*100 = 200 10000-200 = 9800 για τους υπόλοιπους 99 επεξεργαστές! 9800 / 99 = 98.99 Χρόνος εκτέλεσης: max(9800/99, 200) + 10 = 210 Speedup = 10010/210 = 48 Το μισό από ότι με ισοκατανομή φόρτου! 5% * 100 *100 = 500 Χρόνος εκτέλεσης: max(9500/99, 500) + 10 = 510 Speedup = 10010/510 = 20 Σχεδόν το 1/5 από ότι με ισοκατανομή φόρτου 12

Shared- memory mulrprocessors! Ακρωνύμιο: SMP! Διευκόλυνση του υλικού: η μνήμη όλου του συστήματος έχει ενιαίο χώρο φυσικών διευθύνσεων εύκολη επικοινωνία μέσω κοινόχρηστων μεταβλητών συνηθίζεται σε πολυπύρηνους επεξεργαστές συνδιάζεται με μηχανισμούς συνοχής κρυφής μνήμης (cache coherence)! Ανεξάρτητες εφαρμογές τρέχουν σε δικό τους χώρο μηχανισμός εικονικής μνήμης 13

Συνοχή κρυφής μνήμης! Πρωτόκολλα συνοχής (coherence): κανόνες λειτουργίας που εξασφαλίζουν συνοχή κρυφής μνήμης! Σε μικρά συστήματα: πρωτόκολλο παρακολούθησης (snoopy) κάθε $ παρατηρεί τα αιτήματα των υπόλοιπων αν έχει αντίγραφο της γραμμής, κάνει κάποια δράση! Πρωτόκολλο ακύρωσης (invalidaron) κάθε εγγραφή, ακυρώνει τα αντίγραφα γραμμών $ των υπόλοιπων επεξεργαστών! False sharing: διαφορετικά δεδομένα στην ίδια γραμμή που δεν μοιράζονται προκαλούν ακυρώσεις 14

Συγχρονισμός! Συνεργασία διεργασιών/νημάτων: εγγραφή ανάγνωση κοινών δεδομένων! Απαιτείται συγχρονισμός αλλιώς προβλήματα data race! Συνηθισμένη μορφή: αμοιβαίος αποκλεισμός (mutual exclusion mutex) τμήματα κώδικα όπου μόνο ένα νήμα μπορεί να εκτελεί κάθε φορά! Υλοποίηση μέσω εντολών lock unlock που παρέχει το υλικό Οι εντολές συγχρονισμού επεξεργαστή γενικά απαιτούν αδιάκοπτη (atomic) ανάγνωση και εγγραφή μνήμης 15

Εντολή Atomic exchange! Ανταλλαγή της τιμής ενός καταχωρητή με αυτή μιας θέσης στη μνήμη! Υλοποίηση απλής κλειδαριάς 0 ανοιχτή, 1 κλειστή Τοποθέτηση τιμής 1 σε ένα καταχωρητή Εκτέλεση της εντολής ανταλλαγής Αν η τιμή του καταχωρητή είναι 1, κάποιος άλλος πυρήνας πρόλαβε να κλειδώσει Αν η τιμή είναι 0, ο πυρήνας κλείδωσε τη κλειδαριά! Καμία πράξη δεν μπορεί να παρεμβληθεί μεταξύ της ανάγνωσης και της εγγραφής 16

Παράδειγμα προγράμματος! Πρόσθεση 100000 αριθμών ενός πίνακα! Σχέδιο: κάθε επεξεργαστής προσθέτει 100000/Ν αριθμούς πρόσθεση των N επιμέρους αθροισμάτων! λέγεται reducron: επιστροφή μιας τιμής από μια «δομή»! π.χ. verilog reducron operators &a = λογικό AND των bit του a! Υποθέσεις 100 επεξεργαστές/νήματα Pn ο αριθμός τρέχοντος επεξεργαστή/νήματος: 0 Ν- 1 Αριθμοί σε πίνακα Α Πινακας sum[100] για επιμέρους αθροίσματα 17

Παράδειγμα τοπικές μεταβλητές, διαφορετικές ανά νήμα barrier όλα τα νήματα πρέπει να συγχρονιστούν 18

Συστάδες υπολογιστών! Κάθε επεξεργαστής έχει δικό του χώρο φυσικών διευθύνσεων! Επικοινωνία μέσω ανταλλαγής μηνυμάτων (message passing) συντονισμός νημάτων γίνεται έμμεσα το νήμα ενημερώνεται όταν φτάνει ένα μήνυμα! μπορούν να αποσταλούν και μηνύματα επιβεβαίωσης (acknowledgement) 19

Συστάδες! Ευκολότερη υλοποίηση υλικού! Επεκτάσιμες σε μεγάλο αριθμό υπολογιστών 10s χιλιάδες εξυπηρετητών (servers) Warehouse Scale Computers (WSC)! Εξαιρετικά αποδοτικές για ανεξάρτητα προγράμματα ή προγράμματα με ελάχιστη συνεργασία! Κάθε υπολογιστής έχει το δικό του αντίγραφο του Λ.Σ.! Χωριστή διαχείριση υπάρχουν βοηθητικά προγράμματα διαχείρισης! Μεγάλη διαθεσιμότητα το σύστημα αντέχει αστοχίες υπολογιστών 20

Πολυνημάτωση σε υλικό! Hardware mulrthreading! Πολλαπλά νήματα χρησιμοποιούν τις μονάδες επεξεργασίας (π.χ. ALU) ενός πυρήνα ταυτόχρονα ή με επικάλυψη! Κέρδος: αξιοποίηση του υλικού όταν η εκτέλεση ενός νήματος αναβάλεται (stall)! Προϋπόθεση: γρήγορη εναλλαγή νημάτων στον πυρήνα σε αντίθεση με εναλλαγή διεργασιών από το Λ.Σ. 100s κύκλοι! Ο επεξεργαστής έχει ένα ξεχωριστό αρχείο καταχωρητών και PC για κάθε νήμα 21

Είδη πολυνημάτωσης 22

Είδη παραλληλισμού Διαχωρισμός ανάλογα με τις ροές εντολών και δεδομένων SISD σειριακός επεξεργαστής MIMD παράλληλος επεξεργαστής SIMD επεξεργαστές διανυσμάτων/ παραλληλισμός δεδομένων! SPMD single- program mulrple- data!!!! Ενα πρόγραμμα (για ένα νήμα) που «αντιγράφεται» πολλές φορές και τα αντίγραφα τρέχουν παράλληλα Είδος MIMD 23

SIMD! Εντολές που «δουλεύουν» σε πολλά δεδομένα π.χ. πρόσθεση 64 ζευγαριών αριθμών! Μία μονάδα προσκόμισης εντολών, πολλαπλές λειτουργικές μονάδες για πράξεις μικρότερος κώδικας! Αποδοτικό σε εμφαρμογές με μεγάλη παραλληλία δεδομένων η ίδια δουλειά γίνεται συνέχεια σε διαφορετικά δεδομένα πίνακες με βρόγχους for 24

SIMD σε x86! Εντολές MMX, SSE,! Υπάρχει υλικό που χειρίζεται δεδομένα με «πλάτος» 64bit (ή και παραπάνω)! Πολλές εφαρμογές έχουν παραλληλισμό δεδομένων με μικρότερους τύπους δεδομένων, π.χ. bytes! Μικρή μετατροπή στην ALU επιτρέπει 8 ταυτόχρονες πράξεις σε συνεχόμενα bytes π.χ. πρόσθεση: αποσύνδεση της διάδοσης κρατούμενου κάθε 8 bits 25

Επεξεργαστές γραφικών! Ξεχωριστός επεξεργαστής με δική του μνήμη σε κάρτα γραφικών (ειδικό δίαυλο: AGP, τώρα PCIe) ή ενσωματωμμένος στη μητρική πλακέτα! ή στο ολοκληρωμένο κύκλωμα του επεξεργαστή ονομάζεται πλέον Graphics Processing Unit (GPU)! Μεγάλη αγορά: παιχνίδια, παιχνιδομηχανές γρήγορος κύκλος επένδυσης- απόδοσης 26

Αρχιτεκτονική GPU! Εκτενής παραλληλισμός πολλοί πυρήνες με πολλά νήματα! Απόκρυψη καθυστέρησης μνήμης μικρές κρυφές μνήμες εκτέλεση πολλών νημάτων! Κύρια μνήμη βελτιστοποιημένη ώς προς ρυθμό μεταφοράς ειδική DRAM με περισσότερους ακροδέκτες (pins)! Εξέλιξη GPUs παλιότερα βασίζονταν σε SIMD εντολές τώρα σε απλές scalar εντολές! για λόγους ευκολότερου προγραμματισμού και απόδοσης! Πολύ διαφορετική ορολογία ξεχωριστό περιβάλλον από αρχιτεκτονική CPUs 27

Ετερογενή συστήματα! Οι πολυπύρηνοι επεξεργαστές είναι ομοιογενή συστήματα (homogeneous) όλοι οι πυρήνες είναι ίδιοι υπάρχουν και λίγες εξαιρέσεις! Ο συνδιασμός CPU- GPU είναι ένα ετερογενές σύστημα (heterogeneous) επιλέγεται ο κατάλληλος επεξεργαστής για την κάθε δουλειά πρόγραμμα ή νήμα! Ο παραλληλισμός και η υπολογιστική ισχύς του GPU μπορεί να χρησιμοποιηθεί για υπολογισμούς που δεν έχουν σχέση με γραφικά όρος: General Purpose GPU (GPGPU) ή GPU compurng για υπολογισμούς που «μοιάζουν» με αυτούς των γραφικών 28

Προγραμματισμός GPU! Παλιότερα: ο προγραμματιστής άλλαζε το πρόγραμμα ώστε να μοιάζει με επεξεργασία γραφικών χρησιμοποιώντας APIs των OpenGL, DirectX! Πρόσφατα: ειδικές γλώσσες (επεκτάσεις γλωσσών) OpenCL, CUDA (NVIDIA) επεκτείνουν C, C++! Στηρίζονται πολύ στο run- rme system: ενδιάμεσος κώδικας μετατρέπεται/βελτιστοποιείται ανάλογα με την GPU μεγάλος αριθμός νημάτων ανεξάρτητος του αριθμού επεξεργαστών δυναμική ανάθεση νημάτων σε επεξεργαστές 29

Διάσπαση προβλήματος! Διάσπαση σε 2 επίπεδα! Thread block παράλληλα νήματα που λύνουν μικρά προβλήματα μπορούν να συνεργάζονται/ συγχρονίζονται τρέχουν στον ίδιο επεξεργαστή τύπου SPMD ίδιος κώδικας! Thread grid ένας αριθμός από thread blocks πρέπει να είναι ανεξάρτητα: η σειρά εκτέλεσης των επιμέρους block δεν είναι καθορισμένη 30

Οργάνωση GPU 31

Εκτέλεση νημάτων! warp ομάδα νημάτων του ίδιου thread group! η ίδια εντολή εκτελείται σε όλα τα νήματα SIMT: Single Instrucron Mulrple Threads σε περίπτωση if/then/else κάποια νήματα είναι ανενεργά! τρέχει ταυτόχρονα σε διαφορετικά SP του ίδιου SM! ένα νήμα ανά κύκλο, αλλά σε συνεχόμενους κύκλους τρέχουν νήματα του ίδιου warp π.χ. αλλαγή warp κάθε 4 κύκλους 32

Επόμενο μάθημα! Σύνοψη - επανάληψη 33

Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου. «Αρχιτεκτονική Υπολογιστών. Σύγχρονοι υπολογιστές». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Οδηγίες GitHub Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Οδηγίες GitHub Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Oδηγίες git, GitHub Αρης Ευθυμίου Πηγές: Timothy Wood - Git & GitHub: h?p://faculty.cs.gwu.edu/~lmwood/wiki/doku.php/learn:git Git Immersion: h?p://gilmmersion.com/index.html

Το σημερινό μάθημα! Τί είναι το Git και το GitHub! Αποθετήρια δημιουργία κλωνοποίηση!!!!!! Στιγμιότυπα Κατάλογος εργασίας και στιγμιότυπα Απομακρυσμένα αποθετήρια Χρήση 2 τοπικών αποθετηρίων Αναίρεση αλλαγών Προχωρημένη χρήση - παρακλάδια 2

Τι είναι το git! Το git είναι ένα σύστημα διαχείρισης εκδόσεων αρχείων Στα Αγγλικά: version control system Παρακολουθεί τις αλλαγές σε ένα σύνολο αρχείων κρατώντας στιγμιότυπά τους Το σύνολο στιγμιοτύπων ονομάζεται αποθετήριο (repository)! Ολα τα αρχεία και υποκατάλογοι κάτω από ένα «πατρικό» κατάλογο! Χρήσεις: επιστροφή σε μια παλιότερη έκδοση αν έχει γίνει κάποιο λάθος δοκιμή παραλλαγών (ονομάζονται παρακλάδια - branches) χωρίς να επηρεάζεται η τρέχουσα κατάσταση των αρχείων 3

Τι είναι το GitHub! Το GitHub είναι ένας εξυπηρετητής που φιλοξενεί αποθετήρια και μια εύχρηστη διεπαφή ιστού υποστηρίζει όλες τις εντολές του git και παρέχει μερικές επιπλέον δυνατότητες! Η εγγραφή χρηστών και η φιλοξενία ανοιχτών (public) αποθετηρίων είναι δωρεάν άλλες χρήσεις χρειάζονται πληρωμή (ιδιωτικά αποθετήρια)! Είναι εξαιρετικά δημοφιλές εργοδότες υποθέτουν ότι αιτούντες εργασία θα το γνωρίζουν ένας τρόπος να (απο/επι)δείξει κανείς τις ικανότητές του! συμμετοχή σε κοινά project, δημοσίευση project μαθημάτων,...! Υπάρχουν και άλλες αντίστοιχες υπηρεσίες π.χ. BitBucket 4

GitHub organizalons! Εκτός από αποθετήρια μεμονωμένων ανθρώπων παρέχονται αποθετήρια για οργανισμούς! Οπως ο UoI- CSE- MYY402! Κάτι σαν υπερ- κατάλογος αποθετηρίων! με ομάδες ανθρώπων να μοιράζονται αποθετήρια! Διάφορα επίπεδα προσβασης διαχειριστής, μόνο ανάγνωση, εγγραφή,... 5

Γιατί τα χρησιμοποιούμε! Εξαιρετικά χρήσιμα ως εργαλεία οργάνωση εργασιών, συνεργασία σε ομαδικά project,... de facto προαπαιτούμενα για εύρεση εργασίας χρήσιμα για παράδοση εργασιών/ασκήσεων! Το μάθημα απαιτεί ελάχιστη χρήση τους μόνο παραλαβή, παράδοση κώδικα εργασιών ελάχιστος χρόνος εκμάθησης (για απλή χρήση)! Σκοπός γνωριμία, βασική χρήση για το μάθημα πειραματισμός, βαθύτερη γνώση για προσωπική χρήση και εξέλιξη δεξιοτήτων 6

Εφαρμογές git, ρυθμίσεις! Θα χρησιμοποιήσουμε το git από τερματικό υπαρχουν και GUIs. Δείτε το φυλλάδιο του lab 0.! Εγκατάσταση από h?p://git- scm.com/downloads απλές οδηγίες, δε θα πρέπει να έχετε δυσκολίες ήδη εγκατεστημένο στους υπολογιστές των εργαστηρίων! Εγγραφή στο GitHub h?ps://educalon.github.com/pack! Ρυθμίσεις όνομα χρήστη και διεύθυνση email git config --global user.name "Your Name git config --global user.email "email@u Για email χρησιμοποιείστε τη διεύθυνση που δώσατε στο GitHub 7

Δημιουργία αποθετηρίου! Για το μάθημα τα αποθετήρια θα είναι έτοιμα στο GitHub θα χρειαστεί κλωνοποίηση για να έχετε «αντίγραφο εργασίας» σε κάθε άσκηση θα παίρνετε ένα κατάλογο με τα επιπλέον αρχεία! Στο GitHub, στη σελίδα σας πατήστε το πράσινο κουμπί: New Repository και δώστε ένα όνομα αυτό δημιουργεί αποθετήριο μόνο στο GitHub δεν θα έχετε τοπικό αντίγραφο. Βλ. κλωνοποίηση! Σε υπολογιστή (προσωπικό ή εργαστηρίου) σε τερματικό, σε ένα κατάλογο: git init αυτό δημιουργεί μόνο τοπικό αποθετήριο, όχι στο GitHub 8

Κλωνοποίηση αποθετηρίου! Το αποθετήριο του GitHub είναι για αποθήκευση, συνεργασία Δεν μπορείς να μεταγλωτίσεις, να τρέξεις προγράμματα,...! Χρειάζεται ένα τοπικό αντίγραφο, κλώνος (clone) με αντίγραφα όλων των αρχείων του τρέχοντος στιγμιότυπου, στον υπολογιστή που έχετε μπροστά σας! είτε στο εργαστήριο ή στο σπίτι! ή και στα δύο (βλ. παρακάτω)! Κλωνοποίηση: 1. βρείτε το URL του αποθετηρίου σας στο GitHub! μοιάζει με h?ps://github.com/username- or- ORGNAME/REPO.git! Κάτω δεξιά στην ιστοσελίδα του αποθετηρίου 2. δημιουργήστε τον κλώνο:! Εντολή σε τερματικό: git clone <URL>! Θα δημιουργηθεί κατάλογος με το όνομα του αποθετηρίου Ο κατάλογος ονομάζεται κατάλογος εργασίας (working- directory) 9

Στιγμιότυπα 1/2! Το git κρατάει στιγμιότυπα μόνο όταν το ζητήσουμε με την εντολή git commit τα στιγμιότυπα ονομάζονται commits! Τα commits καταγράφουν κάποιο «σημαντικό γεγονός» την ολοκλήρωση κάποιου μέρους της δουλειάς π.χ. αρχή του project, προσθήκη υπορουτίνας Α, το σημαντικό είναι υποκειμενικό: καλύτερα να υπάρχουν πολλά commits! Aπαιτείται ένα μικρό κείμενο που περιγράφει το γεγονός ονομάζεται commit message 10

Στιγμιότυπα 2/2! Υπάρχουν πολλά commits και το git έχει τη δυνατότητα να τα βρεί κάθε commit έχει ένα μοναδικό κωδικό, ονομάζεται hash είναι ένας πολύ μακρύς δεκαεξαδικός αριθμός πληροφορία στον κρυφό υποκατάλογο.git του working directory! Υπάρχει πάντα ένα τρέχον στιγμιότυπο που έχει το όνομα HEAD το HEAD δείχνει σε άλλο στιγμιότυπο όταν κάνουμε commit! Τα στιγμιότυπα σχετίζονται εκτός από το αρχικό, κάθε στιγμιότυπο προκύπτει από ένα προηγούμενο με μερικές αλλαγές σειρά αλλαγών μέχρι τώρα, εντολή: git log 11

Kατάλογος εργασίας, στιγμιότυπα Ποιά η διαφορά ενός «στιγμιότυπου» από το σύνολο αρχείων του καταλόγου εργασίας που βλέπω τώρα;! Τα αρχεία που φαίνονται στον κατάλογο εργασίας... μπορεί να είναι τα ίδια με ένα στιγμιότυπο (συνήθως το τρέχον), αλλά μπορεί και να έχουν αλλάξει! Επιπλέον μπορεί να υπάρχουν αρχεία που δεν είναι μέρος του στιγμιότυπου Συνήθως παραγόμενα αρχεία: εκτελέσιμα, object, log κ.α. ή αρχεία που μόλις προστέθηκαν και δεν έχουν κρατηθεί σε κάποιο στιγμιότυπο ακόμη! Το αποθετήριο είναι, χονδρικά, το σύνολο των στιγμιοτύπων πληροφορία κρατιέται στο.git του καταλόγου εργασίας και στο GitHub (ή και αλλού) 12

Προσθήκη σε στιγμιότυπο! Γίνεται σε δύο στάδια προσωρινή προσθήκη! εντολή: git add τελική προσθήκη! εντολή: git commit! Γιατί χωριστά στάδια: ευελιξία για προχωρημένους χρήστες! Χρήσιμη εντολή: git status ποιά αρχεία «παρακολουθούνται» (έχουν γίνει add) ποιά έχουν αλλάξει (είτε παρακολουθούνται, είτε όχι) και πολλά άλλα 13

Προσωρινή προσθήκη! Ονομάζεται staging (ή add to Index)! Είναι η στιγμή που κρατιέται το στιγμιότυπο Αν ξανα- αλλάξει το αρχείο από τότε μέχρι την τελική προσθήκη, οι αλλαγές δεν θα καταγραφούν στο στιγμιότυπο.! αν δεν ξαναγίνει προσωρινή προσθήκη! Απαραίτητη για κάθε αλλαγή σε αρχείο όχι μόνο για νέα αρχεία που θέλετε να προσθέσετε στο commit! Μπορεί να γίνει πολλές φορές πρίν από τη τελική προσθήκη! Εντολή: git add <filename>! Τα αρχεία μπορεί να είναι και σε υποκατάλογο 14

Προσθήκη σε στιγμιότυπο 2! Για απλούστευση κάντε και τα δύο βήματα μαζί, όταν θέλετε να κρατήσετε στιγμιότυπο: git add <filenames> git commit! Η εντολή git commit ξεκινά έναν editor ώστε να γράψετε ένα σύντομο κείμενο που εξηγεί τι περιλαμβάνει το commit εναλλακτικά: git commit - m το μήνυμα! Τα κείμενα αυτά είναι σημαντικά πρέπει να μπορεί κανείς να καταλαβαίνει τι κάνατε (και γιατί) φανταστείτε ότι το γράφετε για κάποιον άλλο 15

Προβολή των διαφορών! Εντολή git diff δείχνει διαφορές πολύ χρήσιμη σε συνδιασμό με την git status! git diff αλλαγές μεταξύ staged (μετά από git add) και working directory! git diff - - cached αλλαγές μεταξύ τρέχοντος στιγμιότυπου (HEAD) και staged! git diff HEAD αλλαγές μεταξύ τρέχοντος στιγμιότυπου και working directory 16

Παράδειγμα!!!!!!!!!!!!!! Το working dir είναι ίδιο με το τελευταίο στιγμιότυπο (HEAD) Αλλάζω το αρχείο aris git status git add aris # πρόσθεσε το aris στο staging area git status git diff - - cached # αλλαγές μεταξύ στιγμιοτύπου και staged ξανα- αλλάζω το aris git status git diff # αλλαγές μεταξύ staged και working dir git diff HEAD # αλλαγές μεταξύ στιγμιότυπου και working dir git commit - m message git status git diff # καμία αλλαγή! Το staging area είναι άδειο git diff HEAD # αλλαγές μεταξύ στιγμιότυπου και working dir 17

Απομακρυσμένο αποθετήριο! Θυμηθείτε: το τοπικό αποθετήριο κλωνοποίηθηκε από ένα αποθετήριο του GitHub το αποθετήριο του GitHub ονομάζεται απομακρυσμένο, remote! Το remote repo έχει όνομα Συνηθισμένο όνομα: origin Εντολή git remote αναφέρει το όνομα του remote repo! git remote -v δίνει περισσότερες πληροφορίες! Για παράδοση ασκήσεων ενημερώνετε το αποκρυσμένο αποθετήριο με τις αλλαγές που έγιναν στο τοπικό η πράξη λέγεται προώθηση push 18

Προώθηση! Το remote ενημερώνεται για όλα τα νέα στιγμιότυπα που δημιουργήθηκαν από την προηγούμενη ενημέρωση! Προσοχή: αν στο working directory υπάρχουν αλλαγές σε αρχεία, αυτές δεν προωθούνται μόνο commits προωθούνται! Εντολή Την πρώτη φορά: git push -u origin master! ώστε μετά το git push να αρκεί Το origin είναι το όνομα του remote Το master είναι το όνομα του παρακλαδιού που θέλετε να προωθήσετε. Το master είναι το «κύριο» παρακλάδι. Αναφέρεται και ως trunk (κορμός) σε διάφορα κείμενα 19

Σύνοψη: git για το μάθημα Στην αρχή (για κάθε τοπικό αποθετήριο): βλ εξήγηση! git clone <private_repo_url> παρακάτω Για κάθε καινούρια άσκηση τα ελάχιστα βήματα είναι:! git remote add labxx_starter <lab_starter_url>! git fetch labxx_starter! git merge labxx_starter/master -m Fetched labxx init files! θα δημιουργηθει ο κατάλογος labxx! Κάνετε αλλαγές αρχείων σχετικών με την άσκηση λύση της άσκησης! git add <αρχεία που τροποποιήθηκαν, προστέθηκαν>! git commit -m μήνυμα! git push origin master ή git push, αν έχετε κάνει git push - u origin master την πρώτη φορά 20

Πιθανά σενάρια! Σ1: Δουλεύοντας με 2 τοπικά αποθετήρια π.χ. και στο εργαστήριο και στο σπίτι! Σ2: Αναίρεση αλλαγών αν κάτι πάει στραβά, πώς επαναφέρουμε ένα παλιότερο στιγμιότυπο! Σ3: Αλλαγή ονόματος, διαγραφή αρχείου 21

Σ1: Δύο τοπικά αποθετήρια! Π.χ. στο εργαστήριο και στο σπίτι! Δημιουργία 2 κλώνων! Στο εργαστήριο, την πρώτη φορά git clone, add, commit, push ώστε όλες οι αλλαγές να προωθηθούν στο GitHub! Στο σπίτι (υποθέτω υπάρχει ήδη κλώνος) git pull ώστε οι αλλαγές να «έρθουν» τοπικά στο τέλος: git add, commit, push! Μετά, πάντα ξεκινάτε με git pull 22

Σ1: Πιθανά προβλήματα! Αν ξεχάσετε να κάνετε push τις τελευταίες αλλαγές πριν φύγετε από το σπίτι δεν υπάρχει τρόπος να τις πάρετε! (εκτός αν μπορείτε να στήσετε ένα git server στο σπίτι,...)! Αν ξεχάσετε να κάνετε pull ώστε να έχετε την πιο πρόσφατη έκδοση και κάνετε commit! ένα push θα αποτύχει γιατί το απομακρυσμένο αποθετήριο έχει αλλαγές που δεν έχετε τοπικά! πρέπει πρώτα να φέρετε και να συγχωνέψετε(merge) τις αλλαγές αν δεν κάνατε commit,! το pull θα αποτύχει και θα σας ζητηθεί να κάνετε commit και μετά merge, όπως παραπάνω 23

Σ1: Συνδιασμός αλλαγών! Eντολή git pull προσπαθεί να συνδιάσει τις αλλαγές αυτόματα,! προσθήκες νέων αρχείων δεν δημιουργούν προβλήματα αλλά συχνά αποτυχαίνει! αλλαγές στο ίδιο αρχείο απαιτούν την παρέμβαση του χρήστη Τα προβλήματα ονομάζονται conflicts Θα δείτε ποιά αρχεία έχουν conflicts στην απάντηση της pull! Επίλυση συγκρούσεων (συγχώνευση) ανοίξτε τα αρχεία με ένα editor και θα δείτε τις αλλαγές διορθώστε το πρόβλημα με το χέρι, σε όλα τα αρχεία δημιουργείστε ένα νέο στιγμιότυπο με τις αλλαγές! git add, commit προώθηση στο GitHub με git push 24

Σ1: Παράδειγμα!!!!!!!!!!!!! Το working dir είναι ίδιο με το τελευταίο στιγμιότυπο στο GitHub αλλάζω τοπικά το αρχείο test git add test git commit - m "local changes Στο GitHub με ένα browser αλλάζω το αρχείο test git pull # αποτυγχάνει, conflict στο test git status vi test # φαίνονται οι διαφορές, τις συνθέτω git add test git status git commit - m "message" git push Στο GitHub το αρχείο test άλλαξε και στο graphs φαίνεται τι έγινε 25

remote add, fetch, merge Στη σύνοψη git για το μάθημα, είδαμε 3 περίεργες εντολές git: 1. git remote add labxx_starter <lab_starter_url> 2. git fetch labxx_starter 3. git merge labxx_starter/master m Fetched labxx init files 1. Προσθήκη απομακρ. αποθετηρίου με όνομα labxx_starter μπορούμε να έχουμε πολλά remotes... 2. Προσκόμηση του τελευταίου στιγμιότυπου του labxx_starter δεν γίνονται όμως αλλαγές στα αρχεία του working directory 3. Συγχώνευση του remote με το working directory θεωρητικά μπορεί να υπάρξουν συγκρούσεις στο μάθημα, πάντα χωριστός κατάλογος 26

Σ2: αναίρεση αλλαγών! Πολλοί διαφορετικοί τρόποι ανάλογα με την κατάσταση και το τρόπο εργασίας/προτίμηση! Περιπτώσεις 1. 2. 3. 4.! πριν τη προσωρινή προσθήκη (πριν κάνετε git add) μετά τη προσωρινή αλλά πριν τη τελική προσθήκη (πριν git commit) μετά τη τελική προσθήκη (μετά το git commit) αλλά πριν τη προώθηση σε απομακρυσμένο αποθετήριο μετά και από τη προώθηση σε απομακρυσμένο αποθετήριο Σημείωση: Αναίρεση δεν σημαίνει ότι η ώρα προσπέλασης αρχείων θα επανέλθει. Τα περιεχόμενα μόνο αλλάζουν. 27

Π1: πρίν το git add! Βεβαιωθείτε ότι πράγματι δεν έχετε κάνει git add git status δεν θα πρέπει να έχει Changes to be commi?ed! Δώστε την εντολή git checkout <όνομα αρχείου> η εντολή φέρνει από το τρέχον στιγμιότυπο το αρχείο και το γράφει στο working directory 28

Π2: πριν το git commit! Βεβαιωθείτε για την κατάσταση του αποθετηρίου git status! Εντολές αναίρεσης: 1. git reset! αφαιρεί από το staging area όλες τις αλλαγές από το τελευταίο στιγμιότυπο (αναιρεί τα προηγούμενα git add)! Αλλά το working directory δεν αλλάζει 2. git checkout <ονόματα αρχείων>! «Φέρνει» τα αρχεία, όπως ήταν στο προηγούμενο στιγμιότυπο, στο working directory 29

Π3: μετά το commit, πριν push! Για αναίρεση του τελευταίου commit: git reset - - hard HEAD~1 οι αλλαγές στο working dir χάνονται και όλα τα άρχεια επανέρχονται όπως ήταν στο στιγμιότυπο.! Το HEAD~1 σημαίνει ένα commit πριν θα μπορούσαμε να έχουμε ~2 κλπ. μπορούμε επίσης να αναφερθούμε σε ένα commit με το hash του! Δεν είναι καλή ιδέα για κώδικα που έχουμε κάνει push σε απομακρυσμένο αποθετήριο και είναι ορατός από άλλους γιατί τους μπερδεύει 30

Π4: μετά το push! Στιγμιότυπα που έγιναν push σε απομακρυσμένο αποθετήριο έχουν γίνει ορατά και χρησιμοποιηθεί (pull) από άλλους αν ξαναγυρίσουμε σε παλιότερο στιγμιότυπο, οι άλλοι χρήστες θα μπερδευτούν! Καλύτερα να δημιουργηθεί ένα νέο στιγμιότυπο που στην ουσία αναιρεί τις αλλαγές! Εντολή git revert HEAD ξεκινάει editor με ένα έτοιμο μήνυμα. Μπορείτε να το αλλάξετε το working dir επανέρχεται στην κατάσταση του στιγμιοτύπου για αναίρεση πιο πίσω, HEAD~1 κλπ.! Μετά, git push ώστε η αλλαγή να περάσει στο απομακρυσμένο αποθετήριο 31

Σ3: μετονομασία, διαγραφή! Διαγραφή αρχείου διαγράφεται από το working directory, αλλά όχι από το στιγμιότυπο διαγραφή και από το working directory και από το (επόμενο) στιγμιότυπο: git rm <file_name>! Μετονομασία/μετακίνηση αρχείου παρόμοια προβληματα με τη διαγραφή εντολή git mv 32

Πιο προχωρημένη χρήση Παρακλάδια (branches)!!!! Δημιουργία νέου branch Αλλαγή τρέχοντος branch Συγχώνευση παρακλαδιών Ενημέρωση remote για τα παρακλάδια 33

Γιατί παρακλάδια! Συχνές δοκιμές κατά την ανάπτυξη κώδικα πώς θα οργανωθεί αυτό καλα;! Ολα τα version control systems υποστηρίζουν παρακλάδια το git φημίζεται ότι το κάνει πολύ εύκολα 34

Δημιουργία! Εντολή: git checkout -b <branch_name>! Δημιουργεί το παρακλάδι και αλλάζει το τρέχον παρακλάδι σε αυτό (στο καινούριο)! Η εντολή git status στην πρώτη γραμμή αναφέρει σε ποιό παρακλάδι βρισκόμαστε κάθε στιγμή 35

Αλλαγή τρέχοντος branch! Για να δούμε ποιά παρακλάδια υπάρχουν: εντολή: git branch! Αλλαγή τρέχοντος branch Eντολή: git checkout <branch_name>! Αλλαγμένα αρχεία στο working directory, δεν χάνονται! αλλά προσοχή βλ. διαφάνεια 27! 36

Συγχώνευση παρακλαδιών! Οπως συγχωνεύσαμε τοπικό με απομακρυσμένο αποθετήριο (merge, pull), έτσι γίνεται και σε branches! Στο τρέχον παρακλαδι, έστω master, μπορούμε να συγχωνεύσουμε τις αλλαγές που έκανε το παρακλάδι testbrach git merge testbranch Φυσικά μπορεί να υπάρξουν συγκρούσεις που πρέπει να λυθούν! Προσοχή: έχει σημασία ποιό παρακλάδι συγχωνεύεται σε ποιό! το master στο testbranch ή το testbranch στο master? και τα δύο έχουν νόημα για διαφορετικούς λόγους 37

Ενημέρωση remote για branches! Συνήθως τα παρακλάδια είναι για «προσωπική χρήση» δοκιμάζει κανείς παραλλαγές στο τοπικό του αποθετήριο πετάει ό,τι δεν δουλεύει και τις χρήσιμες αλλαγές τις συγχωνεύει με το κύριο παρακλάδι (master) μετά στέλνει τις «τελικές» αλλαγές (του master) στο απομακρυσμένο αποθετήριο! Αν στα παρακλάδια δουλεύουν και άλλοι πρέπει να φαίνονται στο απομακρυσμένο αποθετήριο εντολή: git push <remote> <branch> 38

Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου. «Αρχιτεκτονική Υπολογιστών. Οδηγίες GitHub». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.