ΑΝ ΣΚΕΦΤΕΣΤΕ Ν' ΑΛΛΑΞΕΤΕ ΥΠΟΛΟΓΙΣΤΗ: ΣΧΕΤΙΚΑ ΜΕ ΤΟΝ ΕΠΕΞΕΡΓΑΣΤΗ (cpu)
Από τον Persifal, moderator του φόρουμ insomnia.gr
Ένας n-πύρηνος επεξεργαστής ενσωματώνει n τον αριθμό πλήρεις και ανεξάρτητες μεταξύ τους επεξεργαστικές μονάδες (πυρήνες). Πλήρεις σημαίνει : κάθε πυρήνας μόνος του (χωρίς τη συνδρομή των υπολοίπων) μπορεί να εκτελέσει οποιαδήποτε ακολουθία εντολών, όπως θα τις εκτελούσε οποιοσδήποτε άλλος μονοπύρηνος επεξεργαστής με το ίδιο σετ εντολών (π.χ. x86, SPARC κλπ). Ανεξάρτητες σημαίνει : Κάθε πυρήνας έχει διαθέσιμους (εικονικά με κατάλληλη διαμέριση ή στην πραγματικότητα) όλους τους απαραίτητους πόρους (π.χ. μνήμη cache L2/L3) για να επιτελεί το έργο που του ανατίθεται.
Στο ζήτημα της απόδοσης/ταχύτητας υπεισέρχονται αρκετοί παράγοντες. Ένας από αυτούς είναι η συχνότητα χρονισμού. Ας πάρουμε το εύκολο παράδειγμα ενός κλασσικού μονοπύρηνου επεξεργαστή Intel Pentium 4 Northwood που χρονίζεται στα 3.06GHz. Αυτό σημαίνει πως ο επεξεργαστής μπορεί να εκτελέσει 3.06 δισεκατομμύρια στοιχειώδεις λειτουργίες ανά δευτερόλεπτο. Το θέμα είναι ότι μία στοιχειώδης λειτουργία δεν ισούται κατ' ανάγκην με μία χρήσιμη εντολή. Οι περισσότερες εντολές στους περισσότερους επεξεργαστές γενικής χρήσης αποτελούνται από ομάδες ενός αριθμού στοιχειωδών λειτουργιών. Επίσης, ανάλογα με την αρχιτεκτονική του κάθε επεξεργαστή, ο αριθμός αυτός διαφέρει και αναφέρεται ως IPC (Instructions Per Cycle : οδηγίες ανά κύκλο, δηλαδή ανά Hz). Ένας αποδοτικός επεξεργαστής έχει υψηλό IPC. Για παράδειγμα, ένας Athlon 64 FX-60 με χρονισμό 2.6GHz, τον P4 του παραδείγματος του κόβει το κωλαράκι σε φέτες και του το σερβίρει σε πιάτο να το φάει. Γι' αυτό, δεν έχει κανένα νόημα να εξετάζουμε μόνο τη συχνότητα χρονισμού ενός επεξεργαστή (ή ενός πυρήνα), περιμένοντας να βγάλουμε χρήσιμο συμπέρασμα για την ταχύτητά του. Η μόνη εξαίρεση είναι σε μοντέλα επεξεργαστών της ίδιας οικογένειας, όπου η αρχιτεκτονική είναι απολύτως ίδια και η μόνη διαφορά βρίσκεται στη συχνότητα χρονισμού. Π.χ. ένας Intel Core 2 Duo E6850 (3GHz) είναι αναμενόμενα πιο γρήγορος από έναν E6550 (2.33GHz).
Στους νέους πολυπύρηνους επεξεργαστές, η αύξηση της απόδοσης δεν προέρχεται μόνο από την αύξηση του χρονισμού, αν έχει γίνει (που δεν έχει γίνει. Οι τελευταίοι υψηλόσυχνοι Pentium 4 που είχαν παραχθεί έτρεχαν σε περισσότερα GHz από το δυνατότερο διαθέσιμο αυτήν τη στιγμή Core 2 Duo ή Core 2 Quad). Ούτε από την αύξηση μόνο του IPC (ήδη οι επεξεργαστές Pentium M είχαν βελτιώσει πολύ την απόδοση ανά κύκλο σε σχέση με την αρχιτεκτονική Netburst των P4. Συγκριτικά, οι αρχιτεκτονικές Core και Core 2 ελάχιστα την αυξήσανε). btw, τα παραδείγματα από Intel είναι ευκαιριακά, αντίστοιχη πρόοδος υπήρξε και στο AMD στρατόπεδο.
Το μεγάλο όφελος είναι η θεωρητική δυνατότητα να ολοκληρώνεις μία χρονοβόρα εργασία στο 1/n του χρόνου που θα έκανε μόνος του ο ένας εκ των n πυρήνων για να την τελειώσει. Υπάρχει όμως ένα catch στο παραπάνω (γι' αυτό και ο χαρακτηρισμός «θεωρητική») : Η εργασία θα πρέπει ως αλγόριθμος να είναι πλήρως παραλληλοποιήσιμος. Δηλαδή, θα πρέπει να μπορεί να διασπάσθει σε n τμήματα μικρότερων στοιχειωδών εργασιών οι οποίες να κατανέμονται και να προκαλούν εξίσου τον ίδιο φόρτο στον κάθε ένα από τους n πυρήνες. Αυτό δεν είναι εφικτό για όλων των ειδών τα προβλήματα, σε πολλά υπάρχουν μαθηματικοί και λογικοί περιορισμοί που το απαγορεύουν, σε άλλα γίνεται συνεχώς έρευνα σε αντίστοιχους τομείς της Πληροφορικής και των Μαθηματικών. Το ζουμί είναι ότι για όσα προβλήματα ο τρόπος παραλληλοποίησης είναι καλά μελετημένος ώστε οι αντίστοιχοι αλγόριθμοι να θεωρούνται τετριμμένοι, υπάρχει συνήθως κώδικας που να τους υλοποιεί, με τα αντίστοιχα οφέλη σε ταχύτητα. Στην πράξη, ένα πρόγραμμα ποτέ δεν είναι πλήρως παράλληλο, αλλά ένα μείγμα εντολών που μπορούν και δε μπορούν να τρέχουν παράλληλα, οπότε η βελτίωση της απόδοσης δε μπορεί να ξεπεράσει το μέγιστο θεωρητικό που καθορίζει ο νόμος του Amdahl.
Στους πολυπύρηνους επεξεργαστές όμως, υπάρχει και ένα άλλο κολπάκι που αποδίδει εγγυημένα καλύτερα από το να προσπαθούμε να παραλληλοποιήσουμε μία μοναδική εργασία : Να αναθέτουμε ταυτόχρονα n εργασίες, ανεξάρτητες μεταξύ τους, μία σε κάθε έναν πυρήνα. Εκεί δεν υπάρχουν τα προβλήματα της παραλληλοποίησης και μπορούμε να εκμεταλλευόμαστε όλους τους πυρήνες κοντά στο 100%. Είναι το λεγόμενο multitasking, όπως το γνωρίζουμε και από παλιότερα. Μόνο που τώρα, ο scheduler του Λειτουργικού Συστήματος αντί να επιφορτίζει τον μοναδικό πυρήνα-επεξεργαστη με εναλλάξ εκτέλεση των εφαρμογών (τόσο γρήγορη εναλλαγή, ώστε να νομίζουμε ότι οι εφαρμογές τρέχουν ταυτόχρονα), απλά αναθέτει την εκτέλεση κάθε εφαρμογής στον πρώτο ελεύθερο πυρήνα, όπου θα τρέξει απρόσκοπτα μέχρι να τερματιστεί (χονδρικά, γιατί πάλι υπάρχουν διακοπές από το Λ/Σ, με πολύ λιγότερο overhead από ότι στην 1η περίπτωση όμως).
Αυτά πάνω-κάτω. Ελπίζω να περίμενες κάτι τέτοιο ως απάντηση και όχι τρεις-τέσσερις προτάσεις σε δύο γραμμές*. Όχι τίποτ' άλλο, να μη νοιώθω και εντελώς μαλάκας που γράφω «σεντόνια» στις πέντε τα ξημερώματα!
Καλή χρονιά να έχουμε, με περισσότερους πυρήνες!
Persifal
Στο ζήτημα της απόδοσης/ταχύτητας υπεισέρχονται αρκετοί παράγοντες. Ένας από αυτούς είναι η συχνότητα χρονισμού. Ας πάρουμε το εύκολο παράδειγμα ενός κλασσικού μονοπύρηνου επεξεργαστή Intel Pentium 4 Northwood που χρονίζεται στα 3.06GHz. Αυτό σημαίνει πως ο επεξεργαστής μπορεί να εκτελέσει 3.06 δισεκατομμύρια στοιχειώδεις λειτουργίες ανά δευτερόλεπτο. Το θέμα είναι ότι μία στοιχειώδης λειτουργία δεν ισούται κατ' ανάγκην με μία χρήσιμη εντολή. Οι περισσότερες εντολές στους περισσότερους επεξεργαστές γενικής χρήσης αποτελούνται από ομάδες ενός αριθμού στοιχειωδών λειτουργιών. Επίσης, ανάλογα με την αρχιτεκτονική του κάθε επεξεργαστή, ο αριθμός αυτός διαφέρει και αναφέρεται ως IPC (Instructions Per Cycle : οδηγίες ανά κύκλο, δηλαδή ανά Hz). Ένας αποδοτικός επεξεργαστής έχει υψηλό IPC. Για παράδειγμα, ένας Athlon 64 FX-60 με χρονισμό 2.6GHz, τον P4 του παραδείγματος του κόβει το κωλαράκι σε φέτες και του το σερβίρει σε πιάτο να το φάει. Γι' αυτό, δεν έχει κανένα νόημα να εξετάζουμε μόνο τη συχνότητα χρονισμού ενός επεξεργαστή (ή ενός πυρήνα), περιμένοντας να βγάλουμε χρήσιμο συμπέρασμα για την ταχύτητά του. Η μόνη εξαίρεση είναι σε μοντέλα επεξεργαστών της ίδιας οικογένειας, όπου η αρχιτεκτονική είναι απολύτως ίδια και η μόνη διαφορά βρίσκεται στη συχνότητα χρονισμού. Π.χ. ένας Intel Core 2 Duo E6850 (3GHz) είναι αναμενόμενα πιο γρήγορος από έναν E6550 (2.33GHz).
Στους νέους πολυπύρηνους επεξεργαστές, η αύξηση της απόδοσης δεν προέρχεται μόνο από την αύξηση του χρονισμού, αν έχει γίνει (που δεν έχει γίνει. Οι τελευταίοι υψηλόσυχνοι Pentium 4 που είχαν παραχθεί έτρεχαν σε περισσότερα GHz από το δυνατότερο διαθέσιμο αυτήν τη στιγμή Core 2 Duo ή Core 2 Quad). Ούτε από την αύξηση μόνο του IPC (ήδη οι επεξεργαστές Pentium M είχαν βελτιώσει πολύ την απόδοση ανά κύκλο σε σχέση με την αρχιτεκτονική Netburst των P4. Συγκριτικά, οι αρχιτεκτονικές Core και Core 2 ελάχιστα την αυξήσανε). btw, τα παραδείγματα από Intel είναι ευκαιριακά, αντίστοιχη πρόοδος υπήρξε και στο AMD στρατόπεδο.
Το μεγάλο όφελος είναι η θεωρητική δυνατότητα να ολοκληρώνεις μία χρονοβόρα εργασία στο 1/n του χρόνου που θα έκανε μόνος του ο ένας εκ των n πυρήνων για να την τελειώσει. Υπάρχει όμως ένα catch στο παραπάνω (γι' αυτό και ο χαρακτηρισμός «θεωρητική») : Η εργασία θα πρέπει ως αλγόριθμος να είναι πλήρως παραλληλοποιήσιμος. Δηλαδή, θα πρέπει να μπορεί να διασπάσθει σε n τμήματα μικρότερων στοιχειωδών εργασιών οι οποίες να κατανέμονται και να προκαλούν εξίσου τον ίδιο φόρτο στον κάθε ένα από τους n πυρήνες. Αυτό δεν είναι εφικτό για όλων των ειδών τα προβλήματα, σε πολλά υπάρχουν μαθηματικοί και λογικοί περιορισμοί που το απαγορεύουν, σε άλλα γίνεται συνεχώς έρευνα σε αντίστοιχους τομείς της Πληροφορικής και των Μαθηματικών. Το ζουμί είναι ότι για όσα προβλήματα ο τρόπος παραλληλοποίησης είναι καλά μελετημένος ώστε οι αντίστοιχοι αλγόριθμοι να θεωρούνται τετριμμένοι, υπάρχει συνήθως κώδικας που να τους υλοποιεί, με τα αντίστοιχα οφέλη σε ταχύτητα. Στην πράξη, ένα πρόγραμμα ποτέ δεν είναι πλήρως παράλληλο, αλλά ένα μείγμα εντολών που μπορούν και δε μπορούν να τρέχουν παράλληλα, οπότε η βελτίωση της απόδοσης δε μπορεί να ξεπεράσει το μέγιστο θεωρητικό που καθορίζει ο νόμος του Amdahl.
Στους πολυπύρηνους επεξεργαστές όμως, υπάρχει και ένα άλλο κολπάκι που αποδίδει εγγυημένα καλύτερα από το να προσπαθούμε να παραλληλοποιήσουμε μία μοναδική εργασία : Να αναθέτουμε ταυτόχρονα n εργασίες, ανεξάρτητες μεταξύ τους, μία σε κάθε έναν πυρήνα. Εκεί δεν υπάρχουν τα προβλήματα της παραλληλοποίησης και μπορούμε να εκμεταλλευόμαστε όλους τους πυρήνες κοντά στο 100%. Είναι το λεγόμενο multitasking, όπως το γνωρίζουμε και από παλιότερα. Μόνο που τώρα, ο scheduler του Λειτουργικού Συστήματος αντί να επιφορτίζει τον μοναδικό πυρήνα-επεξεργαστη με εναλλάξ εκτέλεση των εφαρμογών (τόσο γρήγορη εναλλαγή, ώστε να νομίζουμε ότι οι εφαρμογές τρέχουν ταυτόχρονα), απλά αναθέτει την εκτέλεση κάθε εφαρμογής στον πρώτο ελεύθερο πυρήνα, όπου θα τρέξει απρόσκοπτα μέχρι να τερματιστεί (χονδρικά, γιατί πάλι υπάρχουν διακοπές από το Λ/Σ, με πολύ λιγότερο overhead από ότι στην 1η περίπτωση όμως).
Αυτά πάνω-κάτω. Ελπίζω να περίμενες κάτι τέτοιο ως απάντηση και όχι τρεις-τέσσερις προτάσεις σε δύο γραμμές*. Όχι τίποτ' άλλο, να μη νοιώθω και εντελώς μαλάκας που γράφω «σεντόνια» στις πέντε τα ξημερώματα!
Καλή χρονιά να έχουμε, με περισσότερους πυρήνες!
Persifal
2 σχόλια:
Χμμμ μονο το καλη χρονια να εχουμε καταλαβα...
Ωρες ωρες αναρωτιεμαι ποσο δυσκολη μπορει να ειναι η ολη pc-στικη ορολογια.. Ε, μολις μου την ελυσες :)
Τις καλημερες μου!
Ξέρεις τί μού θύμισες; Εκείνη τη διαφήμιση με το μπλαμπλαμπλά μπλα κρεβάτι μας"
Καλημέρα, να έχεις μιαν όμορφη Κυριακή
Σ;)))
Δημοσίευση σχολίου