AMD vs. Intel και ο Νόμος του Amdahl

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Ψάχνοντας κάποια μερικώς άσχετα πράγματα τις προάλλες, έπεσα πάνω σε μιαν εκ πρώτης όψεως ασήμαντη ανάρτηση των xbit labs, και αυτό που διάβασα μου δημιούργησε και ένα deja vu, καθώς προ ολίγων ετών η καρδιά του σταθερού υπολογιστή μου έγραφε επάνω της AMD. Μ’ αυτήν την ευκαιρία, είπα να γράψω κάποιες σκέψεις, για τους λόγους για τους οποίους ίσως οι σύγχρονοι επεξεργαστές της AMD δεν μπορούν να ανταγωνισθούν στα ίσια τους επεξεργαστές της Intel. Βεβαίως, όλοι αυτοί οι σύγχρονοι επεξεργαστές είναι πολυπύρηνοι, δηλαδή αποτελούνται κατ’ ουσίαν από πολλούς επεξεργαστές, συσκευασμένους σε ενιαίο κέλυφος, που κάθεται σε ενιαία βάση.

Ένας από τους λόγους για τους οποίους ένας AMD FX χωλαίνει έναντι ενός Intel i7 πρέπει να είναι η αποτελεσματικότητα με την οποία λειτουργεί κάθε στιγμή ένας από τους πυρήνες του. Θα μου πείτε, και τι μας νοιάζει; Αφού έχει πολλούς πυρήνες, δεν θα λειτουργούν όλοι μαζί παράλληλα; Η απάντηση είναι, γενικά ναι, αλλά τα πράγματα δεν είναι τόσο απλά.

Αν πιάσετε κύλινδρο και μπογιά να βάψετε ένα δωμάτιο, πάρα πολύ γρήγορα θα διαπιστώσετε πως το 60 – 70% του χρόνου, του κόπου και της επιδεξιότητάς σας θα αναλωθεί στα «κοψίματα», για τα οποία θα χρειασθείτε και ειδικά εργαλεία, πινέλα και όχι κυλίνδρους, ενώ τις μεγάλες, τις ανοικτές επιφάνειες θα τις ξεπετάξετε στο πιτς-φυτίλι και χωρίς ιδιαίτερο κόπο με τον μεγάλο κύλινδρο. Μάλιστα -και εδώ είναι το ζουμί της υπόθεσης, αν έχετε έναν – δυό βοηθούς, τότε αυτοί θα πρέπει να περιμένουν τα τελειώσετε εσείς τα κοψίματα, και μετά να αρχίσουν να βάφουν τις ανοικτές επιφάνειες.

Κάτι παρόμοιο συμβαίνει και σε ένα επείγον περιστατικό σε μια νοσοκομειακή μονάδα, αλλά με ανεστραμμένη την αλληλουχία. Αν διακομισθεί ένα άτομο με κάταγμα στο πόδι, προφανώς θα πρέπει να εγχειρισθεί, αλλά πριν την εγχείριση, πρέπει να υποβληθεί σε κάποιες εξετάσεις. Πρέπει να ακτινογραφηθεί το κάταγμα, να γίνουν κάποιες αιματολογικές εξετάσεις, να του πάρουν την πίεση του ανθρώπου, να εξετάσουν πόσο καλά λειτουργούν οι νεφροί και το συκώτι κλπ. Όλες αυτές οι εργασίες θα γίνουν παράλληλα, αλλά ο γιατρός που θα αποφασίσει πώς θα στήσει το χειρουργείο, πρέπει να τις περιμένει να τελειώσουν, ώστε να έχει στα χέρια του όλα τα αποτελέσματα, και κατόπιν να τις μελετήσει για κάποιο χρονικό διάστημα και να αποφασίσει. Άρα όσο γρήγορα και να βγουν τα αποτελέσματα των εξετάσεων, ο τραυματίας πρέπει να περιμένει και τον γιατρό που θα δει τις εξετάσεις και θα αποφασίσει. Αν οι εξετάσεις γίνουν μέσα σε 15 λεπτά και ο γιατρός χρειάζεται άλλα δυό – τρία λεπτά για να πάρει τις αποφάσεις του και να στήσει το χειρουργείο, όλα φαίνονται μάλλον εντάξει. Αν οι εξετάσεις γίνουν σε 5 λεπτά και ο γιατρός χρειάζεται δυό ώρες ώρα για να τις μελετήσει και να αποφασίσει, τότε σαφώς υπάρχει πρόβλημα. Αλλά, τι σχέση μπορούν να έχουν αυτά με έναν επεξεργαστή;
 

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Χάριν υπενθύμισης, ας δούμε εν συντομία κάποιες βασικές έννοιες που αφορούν τη λειτουργία του επεξεργαστή. Όταν λειτουργεί ένας επεξεργαστής, αντλεί δεδομένα από κάποιο χώρο όπου αυτά είναι αποθηκευμένα, τα επεξεργάζεται, και στη συνέχεια αποθηκεύει το αποτέλεσμα της επεξεργασίας σε κάποιο συγκεκριμένο σημείο. Για να πραγματοποιηθεί αυτός ο κύκλος, ο επεξεργαστής πρέπει να λειτουργεί με τρόπο οργανωμένο μέσα στη ροή του χρόνου. Έτσι, λειτουργεί παλλόμενος σε συγκεκριμένη συχνότητα, βασισμένη σε κάποιο σταθερό ηλεκτρικό σημείο αναφοράς, το οποίο συμβατικά ονομάζουμε ρολόι, (clock). Κάθε τέτοιος παλμός που πραγματοποιείται από τον επεξεργαστή ονομάζεται κύκλος ρολογιού, (clock cycle), και αποτελεί τη στοιχειώδη διακριτή λειτουργία ενός επεξεργαστή.

Κύκλος μηχανής, (machine cycle), είναι η στοιχειώδης επικοινωνία που μπορεί να πραγματοποιήσει ο επεξεργαστής, αναγιγνώσκοντας ή εγγράφοντας στη RAM (κατά βάση στην cache) μια ψηφιακή λέξη, η οποία, αναλόγως της χωρητικότητας του αντιστοίχου καταχωρητή, μπορεί να είναι 32 ή 64 bit, ενώ, βεβαίως, παλαιότερα ήταν μικρότερη, αφού, όσον αφορά τους υπολογιστές της πλατφόρμας x86, οι επεξεργαστές 8086 και 80286 ήταν 16μπιτοι, και ο 8088 8μπιτος. Με βάση το γεγονός ότι ο επεξεργαστής ενός σύγχρονου προσωπικού υπολογιστή της πλατφόρμας Intel είναι τεχνολογίας CISC, (complex instruction set computing), η πλήρης εκτέλεση μιας εντολής περιλαμβάνει συνήθως πολλές προσπελάσεις στη μνήμη, πολλούς κύκλους μηχανής. Δεδομένου δε, ότι η φυσική μνήμη RAM είναι ένα ηλεκτρονικό κύκλωμα χρονισμένο σε συχνότητα μικρότερη από αυτήν του επεξεργαστή, και αναλόγως της φύσης των προς επεξεργασία δεδομένων, ανάμεσα σε δύο κύκλους μηχανής παρεμβάλλονται περισσότεροι του ενός κύκλοι ρολογιού.

Προεκτείνοντας, δεδομένης της πολυπλοκότητας των εντολών που έχει ένας cisc επεξεργαστής στο ρεπερτόριό του, κύκλος εντολής είναι η πλήρης εκτέλεση μιας τέτοιας εντολής, για την οποία συνήθως απαιτούνται πολλοί κύκλοι μηχανής, οι οποίοι με τη σειρά τους εκτείνονται χρονικά σε ακόμη περισσοτέρους κύκλους ρολογιού. Ωραία…

Όταν ένας επεξεργαστής εκτελεί ένα πρόγραμμα, αυτό σπάει σε πολλά στοιχειώδη κομμάτια, σε πολλά νήματα. Στοιχειώδη, διότι καθένα από αυτά δεν μπορεί να σπάσει περαιτέρω, πρέπει να εκτελεσθεί μονομιάς, και όχι τμηματικά. Βεβαίως, όταν λειτουργεί ένας επεξεργαστής (σε υπολογιστή, όχι σε άλλου είδους συσκευή), πάντοτε εκτελεί περισσότερα του ενός προγράμματα, και αναλόγως της χρησιμότητάς τους, αυτά τα προγράμματα διακρίνονται σε δύο κατηγορίες, τις διεργασίες, που εκτελούνται ερήμην του χρήστη, και τις εφαρμογές, που φορτώνει και τρέχει κατά βούλησιν ο χρήστης. Για παράδειγμα, ο driver της κάρτας οθόνης ή κάποιος spooler είναι διεργασίες, ενώ το Word ή το Excel είναι εφαρμογές. Έτσι, όταν ο επεξεργαστής εκτελεί νήματα που ανήκουν σε διεργασίες, λέμε ότι κάνει multi-threading, ενώ όταν εκτελεί νήματα από διαφορετικές εφαρμογές, λέμε πως κάνει multi-tasking. Στην ουσία, όμως, πρόκειται για το ίδιο πράγμα.

Φυσικά, αφού ο επεξεργαστής (η ένας συγκεκριμένος πυρήνας κάποιου πολυπύρηνου επεξεργαστή) μπορεί να εκτελεί μόνον ένα νήμα κάθε στιγμή, εκτελώντας ετερόκλητα μεταξύ τους νήματα, κάνοντας multi threading δηλαδή, κάθε τέτοιο νήμα το εκτελεί σε ένα πολύ μικρό διάστημα χρόνου, της τάξης των 10msec, ελεγχόμενος από τον OS scheduler. Βεβαίως, για να σταματήσει να εκτελεί τα νήματα μιας διεργασίας Α και να αρχίσει να εκτελεί νήματα μιας άλλης διεργασίας Β, πρέπει να αποθηκεύσει την κατάστασή του (context) σε μια στοίβα, ώστε από εκεί να την ανακαλέσει σε επόμενη χρονική στιγμή. Αυτή η διαδικασία μετάβασης από μια κατάσταση σε άλλη, context switch, καταναλώνει κάποιο χρόνο, ο οποίος είναι μεν μικρός, εν συγκρίσει με τα δευτερόλεπτα της δικής μας ζωής, αλλά καθόλου ασήμαντος.

Μάλιστα, καθώς η Intel βελτιστοποιούσε το multithreading από παλιά, κάποια στιγμή πατεντάρησε όλη αυτή τη λογική και ξεκίνησε να προωθεί στην αγορά επεξεργαστές με τη δυνατότητα hyper-threading, ονομασία την οποία πατεντάρησε επίσης, και βεβαίως συνέχισε να την εξελίσσει. Έτσι, αυτή την τεχνολογία την έφθασε σε τέτοιο επίπεδο εξέλιξης, ώστε διπύρηνοι επεξεργαστές της να λογίζονται από το λειτουργικό σύστημα ως τετραπύρηνοι, αφού, καθένας από τους δύο πυρήνες έχει τη δυνατότητα να διατηρεί δύο νήματα «ζεστά», υπό εκτέλεση, κάτι που έχει ως αποτέλεσμα τη θεαματική αύξηση της ταχύτητας εκτέλεσης.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Διαβάζοντας αυτήν εδώ την ανάρτηση, και ανακαλώντας στο νου πόσο «γονάτιζε» ο παλιός μου Athlon 64 όταν έτρεχε συγχρόνως το μTorrent, βεβαιώθηκα πως αντίστοιχη τεχνολογία δεν έχει βγάλει στην αγορά η AMD, πράγμα που ανακλάται στο γεγονός, ότι σήμερα ένας οκταπύρηνος FX μόλις και μετά βίας μπορεί να ανταγωνισθεί έναν τετραπύρηνο i7, και μόνο σε κάποια λίγα σημεία. Θα μου πείτε, πώς γίνεται να συμβαίνει αυτό! Και όμως, γίνεται, διότι ο Νόμος του Amdhal είναι αδυσώπητος – αλλιώς δε θα ήταν Νόμος! Ας τον δούμε λίγο από κοντά…

Αν υποθέσουμε ως Q το συντελεστή βελτίωσης (ελάττωσης) του χρόνου επεξεργασίας και P το ποσοστό του τμήματος ενός προγράμματος που μπορεί να εκτελεσθεί πολυνηματικά, δηλαδή παράλληλα από πολλούς πυρήνες (parallel computing), τότε το Q είναι αντιστρόφως ανάλογο του ποσοστού του υπολοίπου τμήματος του προγράμματος, δηλαδή αυτού που πρέπει αναγκαστικά να εκτελεστεί σειριακά, από έναν πυρήνα. Επίσης, αν το τμήμα του προγράμματος που μπορεί να εκτελεσθεί πολυνηματικά, εκτελεσθεί από Ν πυρήνες, ισοδύναμους μεταξύ τους, τότε προφανώς ο συντελεστής ελάττωσης του χρόνου αυτής της παράλληλης επεξεργασίας είναι αντιστρόφως ανάλογος προς το λόγο του ποσοστού αυτού του τμήματος προς το πλήθος των πυρήνων. Συνολικά..



Αυτό σημαίνει αρκετά πράγματα. Πρώτον, όσο μεγαλύτερο είναι το σειριακής εκτέλεσης τμήμα του κώδικα μιας εφαρμογής, τόσον αυτή εξαρτάται από έναν πυρήνα, και το αντίστροφο. Κατά συνέπειαν, όσο μεγαλύτερο είναι το πολυνηματικό τμήμα του κώδικα της εφαρμογής και όσο περισσότερους πυρήνες έχει ο επεξεργαστής, τόσο συντομότερος είναι ο χρόνος εκτέλεσης του κώδικα.
Όμως, υπάρχει ένα όριο, καθώς είναι αδύνατο να είναι μια εφαρμογή 100% πολυνηματική. Κάποιο τμήμα του κώδικά της, μικρό ή μεγαλύτερο, θα είναι σειριακής εκτέλεσης, θα είναι αδύνατο να εκτελεσθεί παράλληλα. Ας δούμε ένα απλοϊκό παράδειγμα…

Αν Α είναι το εμβαδό ενός κύκλου και D η διάμετρός του, τότε μπορεί να συνταχθεί μια πυκνογραμμένη εντολή υπολογισμού του εμβαδού, ως εξής:



Κατά πάσα πιθανότητα, αυτή η εντολή θα εκτελεσθεί από έναν πυρήνα, εκτός της περίπτωσης που η γλώσσα έχει έναν πολύ έξυπνο compiler, ο οποίος θα μπορεί να σπάσει την εντολή σε κομμάτια, κατά την κατασκευή του εκτελέσιμου αρχείου. Αυτή η εντολή θα μπορούσε να αναλυθεί σε πολλές επιμέρους, ώστε να γίνει πολυνηματική…



Έτσι, σε έναν τετραπύρηνο επεξεργαστή, την πρώτη εντολή θα την εκτελέσει ένας πυρήνας, καλώντας την ανάλογη συνάρτηση υπολογισμού του π, ενώ συγχρόνως τη δεύτερη θα την εκτελέσει ένας άλλος πυρήνας για να υπολογίσει την ακτίνα, αλλά για να εκτελεσθεί η 3η εντολή, θα πρέπει να εκτελεσθούν οι υπόλοιπες δύο. Επομένως, το νήμα αυτής της εντολής θα τελεί σε αναμονή, ώστε να έρθουν από τη RAM οι δύο μεταβλητές.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Με βάση αυτή τη λογική, που δεν απέχει από την πραγματικότητα, η συνάρτηση του Amdhal σχηματίζει τις καμπύλες όπως στην παρακάτω εικόνα.



Το προφανές των καμπυλών είναι το σιγμοειδές σχήμα τους, πράγμα που σημαίνει πως η αύξηση των πυρήνων δεν ευεργετεί γραμμικά το συντελεστή συντόμευσης, αυτό που στον κατακόρυφο άξονα αναφέρεται ως speedup, την επιτάχυνση εκτέλεσης του κώδικα, ενώ η επιτάχυνση αυτή εξαρτάται από το πόσο πολυνηματικός είναι ο κώδικας. Έτσι, αν μια εφαρμογή είναι πολυνηματική κατά το ήμισυ, τότε, για να διπλασιασθεί η ταχύτητα εκτέλεσής της, δηλαδή να μειωθεί ο χρόνος εκτέλεσης στο μισό, χρειάζονται ούτε λίγο ούτε πολύ 16 επεξεργαστές, όμοιοι βεβαίως, ισοδύναμοι με τον μοναδιαίο επεξεργαστή από τον οποίο ξεκινούν οι καμπύλες. Επίσης, αν εφαρμογή είναι πολυνηματική κατά 75%, κατά τα ¾ δηλαδή, τότε για να διπλασιάσουμε την ταχύτητα εκτέλεσής τους χρειαζόμαστε 3 επεξεργαστές, ενώ αν έχουμε μόνο 2 επεξεργαστές, δύο όμοιους πυρήνες, τότε η ταχύτητα εκτέλεσης διπλασιάζεται μόνον εάν η εφαρμογή είναι τουλάχιστον κατά 90% πολυνηματική. Αλλ’ ακόμη και τότε, καθώς η πράσινη καμπύλη βαίνει αύξουσα, παρουσιάζει ένα σημείο καμπής κάπου στους 10 πυρήνες, ενώ πρόσθεση πυρήνων πέραν των 16 είναι οικονομοτεχνικά μάλλον ασύμφορη, καθώς η περαιτέρω βελτίωση βαίνει πλέον σημαντικά ελαττούμενη.

Παραμένοντας στα ταπεινά μεγέθη των τεσσάρων έως οκτώ πυρήνων των επεξεργαστών γραφείου (που μέσα στα επόμενα τρία χρόνια μάλλον θα γίνουν 12, μπορεί και 16), αυτές οι καμπύλες καθιστούν σαφές πόσο σημαντικό πράγμα είναι, καθένας από τους πυρήνες να εκτελεί σειριακές εντολές όσο γίνεται πιο γρήγορα, αλλά και να κάνει πολυνηματική επεξεργασία με όσο γίνεται πιο σύντομα context switch, καθώς είναι απολύτως σίγουρο, πως τουλάχιστον ένας από τους πυρήνες θα εκτελεί κι άλλα πράγματα, εκτός της εφαρμογής αυτής. Επομένως, όσο περισσότεροι είναι οι πυρήνες, τόσο περισσότερο εξαρτάται ο χρόνος εκτέλεσης μιας εφαρμογής από το πόσο γρήγορα θα εκτελείται το σειριακό τμήμα του κώδικά της. Κάτι αντίστοιχο μπορεί να συμβαίνει και στην καθημερινή ζωή. Φανταστείτε πόσο σημαντικός είναι ένας νευροχειρουργός, αν είναι ο μοναδικός σε μια πόλη 100.000 κατοίκων, με χιλιάδες δίκυκλα, των οποίων οι περισσότεροι των αναβατών κυκλοφορούν μέσα στην πόλη χωρίς κράνος. Χώρια που δεν μπορεί να πάρει καθόλου άδεια, πόσο μάλλον τα σαββατοκύριακα.

Αν σ’ αυτά προσθέσουμε και τις διαφορές στην πολιτική αντικατάστασης στην cache μεταξύ των δύο κατασκευαστών, καθώς και κάποιες ακόμη σημαντικές λεπτομέρειες, η υποσκέλιση των FX από τους i7 δεν είναι κάτι παράδοξο. Θα μου πείτε, δεν το γνώριζαν αυτό οι μηχανικοί της AMD; Ασφαλώς και το γνώριζαν, και ίσως είναι εδώ που θα πρέπει να αποδώσουμε στην AMD σφάλμα στρατηγικής όλα αυτά τα χρόνια. Να μη μπορείς να ανταγωνισθείς επεξεργαστή με τους μισούς πραγματικούς πυρήνες, δεν είναι και λίγο. Από την άλλη μεριά, όταν κάποιος έχει έξι φορές το μέγεθός σου, καθώς και χρονικά μεγάλο τεχνολογικό προβάδισμα, καθώς έβγαλε εμπορικό προϊόν με βελτιστοποιημένο multi-threading ήδη το 2002, είναι δύσκολο να βρεις αντίστοιχες λύσεις, εκ των υστέρων, τόσα χρόνια μετά, πόσο μάλλον από τη στιγμή που σε παρακολουθεί συνεχώς με μια στρατιά δικηγόρους, μη τυχόν του παραβιάσεις τις πατέντες.

Όμως και η ίδια η Intel, μη νομίσετε πως δίνει απλόχερα το hyper-threading στους επεξεργαστές της. Αντιθέτως, το χρεώνει ανάλογα, ακολουθώντας πανούργο marketing. Αν ανοίξετε τη διαχείριση συσκευών ενός υπολογιστή με Intel i3, θα δείτε να απαριθμώνται 4 επεξεργαστές, οι δύο πραγματικοί και οι δύο εικονικοί του hyper threading. Αντιθέτως, οι ακριβώτεροι i5 δεν κάνουν hyper threading, αλλά έχουν τέσσερις πραγματικούς πυρήνες. Θα μου πείτε, τότε γιατί να πάρει κανείς i5 και να μην αρκεσθεί στον «ταπεινό» i3, που είναι και φθηνότερος; Διότι το καρότο στους i5 λέγεται turbo boost. Δηλαδή, ναι μεν ο i5 δεν κάνει hyper threading, αλλά όταν κληθεί να εκτελέσει βαρύ φορτίο, πολλές εντολές, τότε αυξάνει θεαματικά τη συχνότητα του ρολογιού του, τόσο, που υποσκελίζει το πλεονέκτημα του i3, ενώ όπως και να το κάνουμε, άλλο 2 πυρήνες + 2 εικονικοί, και άλλο 4 πραγματικοί. Βεβαίως, στην κορυφή, ο i7 τα κάνει όλα, και hyper threading και turbo boost, λογιζόμενος από το σύστημα ως 8πύρηνος, με 4 πραγματικούς και 4 εικονικούς πυρήνες, υποσκελίζοντας τον FX με τους 8 πραγματικούς πυρήνες, αφού έχει εξελιγμένο multi threading, τεχνολογία στην οποία η AMD είναι 4-5 χρόνια πίσω. Και 5 χρόνια στην τεχνολογία επεξεργαστών είναι καιρός πολύς.

Εκτός αυτού, η AMD έχει να αντιμετωπίσει και το άμεσο μέλλον των σούπερ φορητών συσκευών, ταμπλέττες κλπ., ενώ τον ίδιο πονοκέφαλο έχει και η Intel, καθώς αμφότεροι πρέπει να αναπτύξουν λιλιπούτειους επεξεργαστές με πολύ μικρή κατανάλωση. Ε, δεν πιστεύω να καθήσουν με τα χέρια σταυρωμένα και να αφήσουν όλη αυτή την αγορά στις διάφορες Qualcomm και ARM…
 
  • Like
Reactions: cbk

Σπύρος Μπλάτσιος

Διακεκριμένο μέλος
Μηνύματα
15.897
Reaction score
301
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Έτσι, σε έναν τετραπύρηνο επεξεργαστή, την πρώτη εντολή θα την εκτελέσει ένας πυρήνας, καλώντας την ανάλογη συνάρτηση υπολογισμού του π, ενώ συγχρόνως τη δεύτερη θα την εκτελέσει ένας άλλος πυρήνας για να υπολογίσει την ακτίνα, αλλά για να εκτελεσθεί η 3η εντολή, θα πρέπει να εκτελεσθούν οι υπόλοιπες δύο. Επομένως, το νήμα αυτής της εντολής θα τελεί σε αναμονή, ώστε να έρθουν από τη RAM οι δύο μεταβλητές.
Χονδρικά τα πράγματα είναι κάπως έτσι, αλλά επι της ουσίας γίνονται πολύ πιο πολύπλοκα στους σύγχρονους υπολογιστές. Κάθε εντολή "σπάει" από τους compiler σε μικροεντολές που μπορεί να εκτελέσει ο επεξεργαστής.
Στον ίδιο κύκλο σε έναν πυρήνα μπορούν να εκτελούνται περισσότερες εντολές, μιας που οι σύγχρονοι επεξεργαστές μπορούν να έχουν περισσότερες από μία ALU και κατά συνέπεια περισσότερους accumulators...

περισσότερες λεπτομέρειες εδώ http://cgi.di.uoa.gr/~k15/d013.html
 

ryk

Μηνύματα
2.112
Reaction score
925
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Μια ωραία ιστοριούλα πάλι είναι πως επηρρεάζει η cache του επεξεργαστή σαν ποσότητα(L1/L2/L3) και η ταχύτητά της (και φυσικά η επικοινωνία με την RAM).
Άντε Κώστα (τα γράφεις ωραία....)
 

Κώστας Φ.

Truth hurts. Here's a teddy bear.
Μηνύματα
8.978
Reaction score
894
Μια ακόμα πιο ωραία ιστοριούλα είναι αυτή: GPGPU

:144:

[Χρειάστηκε να ξεσκονίσω τη C στα γεράματα, αλλά χαλάλι της CUDA... :121:]
 

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Οκ, κάποια πράγματα και για την cache - εκλαϊκευμένα, αλλά εντάξει, όχι πολύ μακριά από την πραγματικότητα.

Τί είναι η cache μνήμη


Κατά πρώτον, γιατί η cache είναι τόσο σημαντική. Όταν το έτος 1998 η Intel αποφάσισε να κυκλοφορήσει τον επεξεργαστή Celeron για πρώτη φορά, ως μια φθηνή εναλλακτική λύση έναντι του νεότευκτου και πανάκριβου, τότε, Pentium 2, η τότε τρέχουσα τεχνολογία κατασκευής chip δεν είχε βέβαια τις σημερινές δυνατότητες. Έτσι, λοιπόν, οι ιθύνοντες της εταιρείας στάθμισαν οικονομοτεχνικά το θέμα, και αποφάσισαν να κυκλοφορήσουν τον επεξεργαστή στα 266 και 300MHz, και μάλιστα, χωρίς μνήμη cache δευτέρου επιπέδου. Αυτό είχε ως αποτέλεσμα την εμπορική αποτυχία αυτών των δύο εκδόσεων, εξ αιτίας του γεγονότος, ότι οι επεξεργαστές παρουσίαζαν επιδόσεις σαφώς υποδεέστερες, σε σχέση με τους επεξεργαστές του ανταγωνισμού, (Cyrix και AMD). Αυτό ανάγκασε την Intel να σπεύσει να αντικαταστήσει αυτά τα δύο μοντέλα με νεώτερες εκδόσεις, που ήταν εξοπλισμένες με cache 2ου επιπέδου μεγέθους 128KiB, κάτι που αποκατέστησε το μειονέκτημα της ταχύτητας, προς όφελος των πωλήσεων, βεβαίως.

Το παραπάνω περιστατικό είναι μάλλον καταδεικτικό της σημασίας που έχει η μνήμη cache στην ταχύτητα ενός σύγχρονου επεξεργαστή. Η μνήμη cache - επί το ελληνικότερον, λανθάνουσα μνήμη, είναι ένας χώρος προσωρινής μνήμης που παρεμβάλλεται μεταξύ του επεξεργαστή και της κύριας μνήμης RAM, με σκοπό την αύξηση της ταχύτητας της επικοινωνίας του πρώτου με τη δεύτερη. Ονομάζεται λανθάνουσα, διότι η παρουσία και η λειτουργία της δεν είναι αντιληπτή από το χρήστη του υπολογιστή, (user transparent). Αυτή η αύξηση της ταχύτητας επικοινωνίας οφείλεται στο γεγονός, ότι η λανθάνουσα μνήμη είναι κατά πολύ ταχύτερη από τη RAM, δηλαδή παρουσιάζει πολύ μικρότερο χρόνο απόκρισης, όντας στατική μνήμη, σε αντιδιαστολή με τη RAM που είναι δυναμική. Η αρχιτεκτονική της στατικής μνήμης χονδρικά χρειάζεται εξαπλάσιο πλήθος τρανζίστορ, σε σχέση με τη δυναμική μνήμη, κάτι που συνεπάγεται αυξημένες ανάγκες χώρου, ενέργειας και ψύξης, καθώς πολλαπλασιάζονται τα εκλυόμενα θερμικά φορτία.

Βέβαια, η υψηλή ταχύτητα της στατικής μνήμης δεν επαρκεί, ώστε η χρήση της να γενικευθεί στην υλοποίηση της RAM, αφού το κόστος της είναι απαγορευτικά υψηλό, επί του παρόντος. Έτσι, η τρέχουσα κατάσταση, που μάλλον θα διατηρηθεί για αρκετά χρόνια ακόμα, συνοψίζεται στη χρήση της δυναμικής μνήμης για την υλοποίηση RAM, με τη στατική μνήμη να χρησιμοποιείται για την κατασκευή λανθάνουσας μνήμης. Όσον αφορά το θέμα του όγκου, η λανθάνουσα μνήμη είναι πλέον ενσωματωμέ-νη στη συσκευασία του επεξεργαστή, κάτι που επετράπη με την αύξηση της κλίμακας ολοκλήρωσης. Το ίδιο ισχύει και για τους επεξεργαστές διπλού πυρήνα, όπου καθένας από τους πυρήνες, δηλαδή καθένας από τους δύο επεξεργαστές που υπάρχουν μέσα στη συσκευασία, διαθέτει δική του λανθάνουσα μνήμη, χωριστά από τον ομόσταυλό του.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Ο ρόλος της λανθάνουσας μνήμης

Η ουσία της λειτουργίας της cache βασίζεται στην απλούστατη –στα λόγια- ρήση, που λέει στον επεξεργαστή, «κοίτα να δεις, αφού εγώ είμαι πιο γρήγορη μνήμη από τη RAM, σου έχω διαθέσιμα σε πρώτη ζήτηση αυτά που είναι πιθανόν να χρειαστείς, ώστε να μην καθυστερείς περιμένοντάς τα να έλθουν από τη RAM». Βέβαια, η cache είναι κατά πολύ μικρότερη από τη RAM, κάτι που αναπαρίσταται και στην παρακάτω εικόνα.



Για λόγους απλοποίησης και παραστατικότητας, στην εικόνα αυτή, η cache φαίνεται να έχει τη μισή χωρητικότητα από τη RAM, ενώ στην πραγματικότητα ο συσχετισμός μεγέθους είναι πολύ διαφορετικός. Για παράδειγμα, ένας μονοπύρηνος Pentium M με cache δευτέρου επιπέδου 2MiB, συνήθως λειτουργεί με 512 έως 2048MiB RAM. Ας δούμε, όμως, τι συμβαίνει στην εικόνα. Στην εικόνα αυτή, η ροή δεδομένων αναπαρίσταται με τα γκρίζα τόξα. Έτσι, τα δεδομένα ρέουν μεταξύ RAM και cache με αργό ρυθμό, αφού η RAM είναι αργή μνήμη, ενώ μεταξύ cache και επεξεργαστή τα δεδομένα ρέουν με σαφώς υψηλότερο ρυθμό, αφού τόσον η cache, όσο και ο επεξεργαστής, είναι ηλεκτρονικά κυκλώματα πολύ υψηλότερης ταχύτητας, σε σχέση με τη RAM. Ό,τι δεδομένο χρειαστεί να έλθει από τη RAM στον επεξεργαστή, (ανάγνωση), αλλά και όλα τα δεδομένα που ρέουν από τον επεξεργαστή στη RAM, (εγγραφή), περνούν από το ενδιάμεσο στάδιο της αποθήκευσής τους στην cache.

Κάθε θέση αποθήκευσης της μνήμης RAM χαρακτηρίζεται από δύο πράγματα, τη διεύθυνσή της, και το περιεχόμενό της. Έτσι, η θέση R0001 περιέχει το δεδομένο d1, η θέση R0002 το d2, κ.ο.κ. Αντίστοιχη οργάνωση έχει και η cache, με τη διαφορά, ότι για κάθε θέση αποθήκευσης είναι γνωστή και η διεύθυνση RAM, στην οποία περιέχεται το αντίστοιχο δεδομένο (ή εντολή). Για παράδειγμα, βλέπουμε ότι το δεδομένο d6 περιέχεται στη διεύθυνση cache C0001, ενώ η cache «ξέρει» ότι αυτό το δεδομένο είναι αποθηκευμένο στη διεύθυνση R0006 της RAM, αφού αυτό είναι «μαρκαρισμένο» με τη σχετική «ετικέτα».

Όταν, λοιπόν, ο επεξεργαστής ζητεί να διαβάσει κάποιο δεδομένο από τη RAM, πρώτα θα το αναζητήσει στην cache. Εάν το βρει ήδη διαθέσιμο στην cache, φυσικά, θα το αναγνώσει από εκεί, ώστε να εξοικονομήσει χρόνο, δεδομένου ότι η cache είναι ασύγκριτα ταχύτερη. Τότε λέμε ότι ο επεξεργαστής πραγματοποίησε cache hit, (λανθάνουσα ευστοχία), δηλαδή, ότι πέτυχε να χρησιμοποιήσει την cache, χωρίς να καταφύγει σε χρήση της RAM, γεγονός που συνεπάγεται μεγάλη εξοικονόμηση χρόνου, προς όφελος της ταχύτητας. Εάν, πάλι, δεν βρει στην cache το δεδομένο που ζητεί, τότε ο επεξεργαστής αναγκαστικά θα το αντλήσει, πρώτα από τη RAM στην cache, κάτι που συνεπάγεται την ανάλογη χρονοτριβή, και μετά από την cache θα το φέρει μέσα του, στον καταχωρητή δεδομένων. Σ’ αυτήν την περίπτωση λέμε ότι ο επεξεργαστής πραγματοποίησε cache miss, (λανθάνουσα αστοχία).

Η παραπάνω εικόνα αναπαριστά μια κατάσταση ήδη διαμορφωμένη, υπό την έννοιαν ότι η cache είναι ήδη γεμάτη με δεδομένα που μόλις πρόσφατα χρησιμοποιήθηκαν. Βέβαια, κατά την έναρξη της διαδικασίας, χοντρικά, κατά την έναρξη της φόρτωσης του λειτουργικού συστήματος, η cache θα είναι προφανώς αδειανή, καθώς δεν έχει ακόμη ξεκινήσει η εκτέλεση κανενός προγράμματος. Έτσι, το πρώτο δεδομένο που θα ζητήσει ο επεξεργαστής δεν θα το βρει φυσικά στην cache, οπότε θα το αντλήσει από τη RAM, πραγματοποιώντας έτσι ένα cache miss. Όπως αναφέρθηκε παραπάνω, ο επεξεργαστής δεν θα αντλήσει αυτό το δεδομένο κατ’ ευθείαν από τη RAM προς τον καταχωρητή δεδομένων, αλλά θα το φέρει και θα το εγγράψει πρώτα στην cache, και στη συνέχεια από εκεί θα το διαβάσει και θα το φέρει στον καταχωρητή δεδομένων. Όμως, ο επεξεργαστής δεν θα φέρει μόνον αυτό το δεδομένο, για να το εγγράψει στην cache, αλλά και πολλά από τα γειτονικά σε αυτό δεδομένα. Δηλαδή, θα φέρει ολόκληρο μπλοκ δεδομένων, διότι, με βάση την Αρχή της Εντοπιότητας Αναφοράς, (the Locality of Reference Principle), το επόμενο δεδομένο που θα χρειαστεί θα βρίσκεται πιθανότατα κάπου πολύ κοντά στο παρόν δεδομένο. Η Αρχή της Εντοπιότητας Αναφοράς μπορεί να αναλυθεί σε δύο κλάδους.

  • Temporal locality, εντοπιότητα χρόνου, κατά την οποίαν ένα δεδομένο που ζητήθηκε και προσπελάσθηκε, είναι πάρα πολύ πιθανό να ζητηθεί ξανά, και σύντομα.
  • Spatial locality, εντοπιότητα χώρου, κατά την οποίαν το επόμενο δεδομένο που θα χρειαστεί ο επεξεργαστής εντοπίζεται κάπου εκεί κοντά σε αυτό που χρειάζεται τώρα, έχοντας την ίδια εντοπιότητα.

Το μπλοκ δεδομένων είναι γνωστό ως cache block, ή cache line. Η Αρχή της Εντοπιότητας Αναφοράς επιτάσσει ότι, ακόμη κι αν το πρόγραμμα που θα εκτελεσθεί είναι τεράστιο, περιέχοντας δεκάδες χιλιάδων εντολών, μέσα σε ένα σχετικά μικρό παράθυρο χρόνου, μόνο λίγες από τις εντολές του προγράμματος θα εκτελεσθούν.

Ας δούμε ένα πολύ απλοποιημένο παράδειγμα. Ας πούμε ότι έχετε φορτώσει το Adobe Photoshop και θέλετε να ζωγραφίσετε κάτι, μέσα σε ένα χώρο διαστάσεων 1280 x 1024 pixels, πράγμα που σημαίνει ότι ο καμβάς σας αποτελείται από 1280x1024=1.310.720 pixels. Εάν χρησιμοποιήσετε το bucket tool, (το «μπουγέλο»), για να γεμίσετε αυτόν το χώρο με κόκκινο χρώμα, τότε η εφαρμογή θα πρέπει να πάρει όλα τα pixels του καμβά σας, ένα προς ένα, και να τα χρωματίσει με το χρώμα που καθορίσατε. Αυτό θα μπορούσε να γίνει με τις παρακάτω εντολές:

1. Πάρε το pixel No1 και χρωμάτισέ το κόκκινο
2. Πάρε το pixel No2 και χρωμάτισέ το κόκκινο
3. Πάρε το pixel No3 και χρωμάτισέ το κόκκινο
4. κ.ο.κ., μέχρι να γίνει αυτή η δουλειά και στο pixel No 1310720

Βέβαια, κάτι τέτοιο θα ήταν εξόχως ασύμφορο και αντιπαραγωγικό, καθώς ο προγραμματιστής θα έπρεπε να γράψει μια εντολή για κάθε pixel, δηλαδή συνολικά 1.310.720 εντολές. Ακόμη χειρότερα, αυτός ο τρόπος είναι μάλλον αδύνατος, καθώς ο προγραμματιστής δεν είναι σε θέση να γνωρίζει, από πόσα pixel αποτελείται η εικόνα που θέλει να επεξεργασθεί ο χρήστης του προγράμματος (και άρα πόσες εντολές να γράψει), αφού, βεβαίως, δεν εξυπακούεται ότι όλες οι εικόνες που θέλει να επεξεργασθεί θα έχουν τις ίδιες διαστάσεις. Η λύση σ’ αυτό το πρόβλημα έχει κατά βάση δύο άξονες: την παραμετροποίηση του κώδικα, ώστε αυτός να είναι εφαρμόσιμος για όλες τις εικόνες, όλων των διαστάσεων, ή για τμήμα εικόνας οποιουδήποτε μεγέθους, που δυνητικά θα θελήσει να επεξεργασθεί ο χρήστης του προγράμματος, και τη συγγραφή του κώδικα με έναν βρόχο επανάληψης, ο οποίος θα μπορούσε να είναι της παρακάτω μορφής:

  • Τοποθέτησε στη μεταβλητή Α το πλήθος των pixel του επιλεγμένου τμήματος της εικόνας του προσκηνίου
  • Τοποθέτησε στη μεταβλητή Β το χρώμα που καθόρισε ο χρήστης
  • Για κάθε Νούμερο από το 1 έως το A
  • Βάψε το τρέχον pixel στο τρέχον Νούμερο με το χρώμα Β.

Με αυτόν τον τρόπο, με μια και μόνη εντολή, την εντολή «Βάψε…», θα γίνει η εργασία βαφής εκατοντάδων χιλιάδων pixels, απλώς, επαναλαμβάνοντας αυτήν την εντολή. Εάν, λοιπόν, ο επεξεργαστής φορτώσει ολόκληρο αυτό το μπλοκ εντολών στην cache, καθ’ όλη τη διάρκεια της διαδικασίας βαφής θα έχει διαθέσιμη στην cache αυτήν την εντολή και θα τη διαβάζει από εκεί, εξοικονομώντας πάρα πολύ χρόνο, κάτι που συνεπάγεται θεαματική αύξηση των επιδόσεων ταχύτητας. Το αντίστοιχο θα συμβεί κατά την εφαρμογή άλλης γραμματοσειράς σε ένα κείμενο 100 σελίδων, καθώς αυτή η διαδικασία θα εφαρμοσθεί σε όλους τους χαρακτήρες του κειμένου, έναν προς ένα.

Γενικά, οι βρόχοι επανάληψης είναι κάτι, όχι απλώς κοινότυπο, αλλά αυτονόητο, σε κάθε πρόγραμμα που τρέχει ένας σύγχρονος υπολογιστής, και σ’ αυτούς (κυρίως) βασίζεται η Αρχή της Εντοπιότητας Αναφοράς.

Έτσι, λοιπόν, φέρνοντας ο επεξεργαστής ολόκληρο το μπλοκ, το οποίο περιέχει το δεδομένο που χρειάζεται, αλλά και όλα τα γειτονικά προς αυτό δεδομένα, και εγγράφοντας αυτό το μπλοκ στην cache, αυξάνεται κατά πολύ η πιθανότητα να λειτουργήσει πιο γρήγορα, καθώς το επόμενο δεδομένο που θα χρειαστεί, πιθανότατα θα βρίσκεται μέσα σ’ αυτό το μπλοκ, οπότε θα το διαβάσει από την cache, (πραγματοποιώντας cache hit), και όχι με εκ νέου προσπέλαση της πολύ πιο αργής RAM, αυξάνοντας έτσι την ταχύτητα επεξεργασίας.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Συσχέτιση RAM και cache

Βεβαίως, όταν λέμε ότι ο επεξεργαστής μεταφέρει από τη RAM στην cache ένα ολόκληρο μπλοκ, αυτό ακούγεται πάρα πολύ απλό και φυσικό, ιδιαιτέρως δε από τη στιγμή που αυτό το μπλοκ, βάσει της Αρχής της Εντοπιότητας Αναφοράς, θα του εξοικονομήσει χρόνο, όφελος που οικονομοτεχνικά ανακλάται και στη συνολική απόδοση του υπολογιστή. Στην πραγματικότητα, και σε δεδομένη στιγμή, αφού η cache είναι γεμάτη, περιέχοντας πράγματα τα οποία, με βάση την παραπάνω Αρχή, ο επεξεργαστής τα χρειάζεται όλα, όταν πραγματοποιήσει cache miss, κάτι πρέπει να διαγραφεί από την cache, κάποιο μπλοκ πρέπει να διαγραφεί, ώστε να δημιουργηθεί ο χώρος όπου θα αποθηκευθεί το μπλοκ που πρόκειται να έλθει από τη RAM.

Όσον αφορά τη χωροτακτική οργάνωση αυτής της διαδικασίας, υπάρχουν διαθέσιμες δύο ακραίες λύσεις, ενώ άλλες λύσεις τοποθετούνται σε κάποια ενδιάμεση κατάσταση. Στο ένα άκρο διακρίνουμε την cache πλήρους συσχέτισης, fully associative cache. Η σχεδιαστική επιλογή αυτής της λύσης επιτάσσει ότι οποιαδήποτε διεύθυνση της RAM μπορεί να αποθηκευθεί σε οποιοδήποτε σημείο της cache, δηλαδή, οποιοδήποτε μπλοκ δεδομένων, αντλούμενο από τη RAM, μπορεί να καταλάβει οποιο-δήποτε σημείο της cache. Η σχεδιαστική λύση του άλλου άκρου προδιαγράφει ότι κάθε μπλοκ της RAM μπορεί να αποθηκευθεί μόνο σε ένα συγκεκριμένο σημείο της cache. Επομένως, εφ’ όσον η cache έχει χωρητικότητα κατά πολύ μικρότερη της RAM, ολόκληρες ομάδες μπλοκ της RAM είναι αντιστοιχισμένες σε μια και μόνο θέση στην cache, οπότε, εάν οποιοδήποτε από αυτά τα μπλοκ κληθεί να μεταφερθεί στην cache, θα εγγραφεί σε αυτή τη συγκεκριμένη θέση, και σε καμιά άλλη. Αυτή η οργάνωση ονομάζεται direct mapped cache, που μπορούμε να αποδώσουμε στην Ελληνική ως λανθάνουσα μνήμη αποκλειστικής συσχέτισης.

Εφ’ όσον η fully associative cache επιτρέπει την εγγραφή οποιουδήποτε μπλοκ της RAM σε οποιαδήποτε θέση της cache, το κύριο μειονέκτημά της έγκειται στην αναγκαιότητα του ελέγχου ολόκληρης της cache, ώστε να εξακριβωθεί, εάν ένα δεδομένο που απαιτείται σε συγκεκριμένη χρονική στιγμή, είναι διαθέσιμο εκεί, (ενώ διαφορετικά θα αντληθεί από τη RAM). Αυτό όμως συνεπάγεται κάποια χρονοτριβή, ενώ επιφέρει και την ανάλογη σχεδιαστική πολυπλοκότητα στο όλο σύστημα, κάτι που, τελικά, από οικονομικής πλευράς μεταφράζεται σε αυξημένο κόστος παραγωγής. Αυτό ακριβώς το μειονέκτημα είναι που αποτελεί και το πλεονέκτημα της αντιδιαμετρικής λύσης της direct mapped cache. Ας το δούμε με το παρακάτω απλοποιημένο παράδειγμα.

Ας πούμε ότι ο επεξεργαστής ενός υπολογιστή είναι εξοπλισμένος με cache μεγέθους 512KiB, η οποία λειτουργεί ως direct mapped, ενώ η μνήμη RAM που έχουμε τοποθετήσει σ’ αυτόν τον υπολογιστή είναι μεγέθους 256MiB. Πρέπει να εκφράσουμε αυτά τα μεγέθη με περισσότερη ακρίβεια, και να τα συσχετίσουμε μεταξύ τους, ως εξής:

512KiB = 512 x 1024 Bytes = 524.288 Bytes cache μνήμης

256MiB = 256 x 1.048.576 Bytes = 268.435.456 Bytes RAM μνήμης

Με βάση τα παραπάνω, εάν διαιρέσουμε τη χωρητικότητα της RAM με αυτήν της cache, θα διαπιστώσουμε ότι η πρώτη είναι 512 φορές μεγαλύτερη της δεύτερης. Αυτό σημαίνει ότι για κάθε θέση της cache αναλογούν 512 direct mapped διευθύνσεις της RAM. Το μέγεθος του cache block αποτελεί κρίσιμη επιλογή στη σχεδίαση ενός επεξεργαστή, και μπορεί να είναι της τάξης των 32 Bytes, ενώ δεν λείπουν και σχεδιάσεις με μεγαλύτερο μέγεθος μπλοκ, όπως ας πούμε ο Pentium 4, που διαθέτει μπλοκ των 64 Bytes. Για τις ανάγκες του παραδείγματός μας, ας υποθέσουμε ότι το cache block έχει μέγεθος 64 Bytes, δηλαδή 512 bits. Έτσι, λοιπόν, στην πραγματικότητα, η cache του επεξεργαστή του παραδείγματός μας, όντας οργανωμένη σε μπλοκ, έχει χωρητικότητα:

524.288 / 64 = 8.192 μπλοκ

Το ίδιο μέγεθος έχουν βεβαίως και οι ομάδες δεδομένων, στις οποίες θα οργανωθεί η RAM, οπό-τε αυτή αναλύεται σε:

268.435.456 / 64 = 4.194.304 ομάδες,

οπότε διαιρώντας το πλήθος ομάδων με το πλήθος των μπλοκ της cache, έχουμε:


4.194.304 / 8.192 = 512 μπλοκ

Έτσι, σε κάθε μπλοκ χώρου της direct mapped cache του παραδείγματός μας, αντιστοιχεί μια συγκεκριμένη 512άδα μπλοκ της RAM, από την οποία, σε δεδομένη χρονική στιγμή, ένα και μόνον ένα μπλοκ μπορεί να αποθηκευθεί στο οικείο μπλοκ της cache, στο μπλοκ που αντιστοιχεί σε αυτή την ομάδα. Βεβαίως, εάν κάποια στιγμή ο υπολογιστής αναβαθμισθεί, αποκτώντας, ας πούμε, 768MiB RAM, τότε θα αλλάξει και η σχετική αναλογία, καθώς, σε κάθε μπλοκ χώρου της cache θα αντιστοιχεί και πάλι μια συγκεκριμένη ομάδα μπλοκ της RAM, η οποία, πλέον, θα περιέχει τριπλάσιο αριθμό μπλοκ, 1536, από τα οποία, σε δεδομένη χρονική στιγμή, και πάλι, ένα και μόνον ένα μπορεί να αποθηκευθεί, και μάλιστα όχι οπουδήποτε στην cache, αλλά μόνον στο οικείο μπλοκ.

Είναι όμως γεγονός, ότι, ούτε η direct mapped cache είναι άμοιρη μειονεκτημάτων. Εξ αιτίας της Αρχής της Εντοπιότητας Αναφοράς, εάν φορτωθεί ένα μπλοκ από τη RAM στην cache, τότε είναι πολύ πιθανό να χρειαστεί να φορτωθεί και το αμέσως διπλανό του, το οποίο, όμως, έχει πολύ μεγάλη πιθανότητα να ανήκει στην ίδια ομάδα. Άρα, για να φορτωθεί στην cache πρέπει να εκθρονίσει το προηγούμενο μπλοκ, αφού θα πρέπει να φορτωθεί στην ίδια θέση. Αυτό θα έχει ως αποτέλεσμα την εντατική χρήση του διαύλου δεδομένων μεταξύ cache και RAM, κάτι που συνεπάγεται χρονοτριβή, λόγω του γεγονότος ότι η RAM είναι αργή μνήμη, καταλήγοντας νομοτελειακά σε κάμψη της ταχύτητας, ή, εν πάση περιπτώσει, σε ταχύτητα τέτοια, που δεν θα είναι αντιπροσωπευτική των δυνατοτήτων του συστήματος.


Σχηματική αναπαράσταση της set associative cache. Η cache αποτελείται από 4 μπλοκ, και επομένως η RAM έχει οργανωθεί σε ισάριθμα τμήματα. Σε συγκεκριμένη χρονική στιγμή, στο 1ο μπλοκ της cache μπορεί να βρίσκεται μόνον ένα από τα πρώτα 8 συσχετισμένα μπλοκ του αντιστοίχου τμήματος της RAM. Το ίδιο συμβαίνει και με τα υπόλοιπα μπλοκ, όπως υποδεικνύουν τα διακεκομμένα βέλη.


Το σύστημα της προηγούμενης εικόνας, εξοπλισμένο με 2-way set associative cache. Η cache αποτελείται και πάλι από 4 μπλοκ, αλλά η RAM είναι οργανωμένη έτσι, ώστε σε συγκεκριμένη χρονική στιγμή, από την 1η ομάδα μπλοκ να είναι εφικτή η παρουσία δύο μπλοκ (2-way) στα συσχετισμένα μπλοκ της cache, και μόνον αυτά. Βεβαίως, το αντίστοιχο συμβαίνει και με τη 2η ομάδα μπλοκ, όπως υποδεικνύουν τα διακεκομμέ-να βέλη.

Έτσι, λοιπόν, μια μέση λύση αποτελεί η λεγόμενη set associative cache, μερικώς συσχετισμένη cache, η οποία αποτελεί ένα συνδυασμό fully associative και direct mapped cache. Με βάση αυτή τη λύση, πολλές direct mapped συνδέσεις λειτουργούν παράλληλα. Για παράδειγμα, οποιοδήποτε από τα μπλοκ της ομάδας A της RAM μπορεί να μεταφερθεί και να εγγραφεί στην cache, όχι σε μια συγκεκριμένη θέση (όχι direct mapped), αλλά ούτε και σε οποιαδήποτε θέση (ούτε fully associative), αλλά σε μια από κάποιες συγκεκριμένες θέσεις, που μπορεί να είναι 2, 4, 8, ή μεγαλύτερου πλήθους, το οποίο όμως πάντα θα είναι δύναμη του 2. Δηλαδή, κάθε μπλοκ της RAM είναι μεν πλήρως συσχετισμένο, όχι όμως με ολόκληρη την cache, αλλά μόνο με ένα σετ που περιέχει Ν μπλοκ. Γι’ αυτόν το λόγο και η συγκεκριμένη τεχνική είναι γνωστή και ως N-way set associative cache, λανθάνουσα μνήμη μερικώς συσχετισμένη με Ν επιλογές.

Προφανώς, οποιαδήποτε από τις παραπάνω τεχνικές επιλεγεί, θα ισχύει όχι μόνο για την ανάγνωση δεδομένων και εντολών από τη RAM, αλλά και για την ανάστροφη διαδικασία, δηλαδή την εγγραφή δεδομένων στη RAM. Φυσικά, και η εγγραφή δεν γίνεται κατ’ ευθείαν από τον επεξεργαστή στη RAM, καθώς, όπως αναφέρθηκε και παραπάνω, πρώτα τα νέα δεδομένα θα εγγραφούν στην cache, και στη συνέχεια από εκεί στη RAM. Μια συνοπτική σύγκριση αυτών των τριών μεθόδων συσχέτισης RAM και cache φαίνεται στον παρακάτω πίνακα.



Σχολιάζοντας αυτόν τον πίνακα, μπορούμε να πούμε ότι η fully associative cache παρέχει τις προϋποθέσεις, ώστε τα μπλοκ που είναι αποθηκευμένα στην cache να έχουν τη μέγιστη ποικιλία, αφού κάθε μπλοκ μπορεί να περιέχει δεδομένα δυνητικά από οποιοδήποτε σημείο της μνήμης RAM, οπότε και μεγιστοποιείται η πιθανότητα για υψηλό hit rate. Με τον όρο hit rate εννοούμε το λόγο των cache hits προς το σύνολο των προσπελάσεων που κάνει ο επεξεργαστής στην cache, στη μονάδα του χρόνου. Για παράδειγμα, εάν το hit rate είναι ίσο με 75%, αυτό σημαίνει ότι στη μονάδα του χρόνου ο επεξεργα-στής πραγματοποίησε 100 προσπελάσεις στην cache, από τις οποίες οι 75 κατέληξαν σε cache hit, οπότε οι υπόλοιπες 25 προσπελάσεις κατέληξαν σε cache miss. Άρα, λοιπόν:

Hit rate = cache hits / σύνολο προσπελάσεων

miss rate = 1 – hit rate

Βεβαίως, στην περίπτωση της fully associative cache, ο επεξεργαστής είναι αναγκασμένος να σαρώνει την cache σε ολόκληρη την έκτασή της, για να εξακριβώσει εάν υπάρχει σ’ αυτήν το δεδομένο που ζητεί, κάτι που καθιστά αυτήν την αναζήτηση αρκετά χρονοβόρο.

Αντιθέτως, η λύση της direct mapped cache συνεπάγεται μειωμένη πιθανότητα για cache hit, αφού ελαττώνεται η ποικιλία των δεδομένων που υπάρχουν αποθηκευμένα στην cache, καθώς αυτά είναι συναφή με τη διεύθυνση RAM, από την οποία προέρχονται. Από την άλλη μεριά, αυτό συνεπάγεται ταχύτατη αναζήτηση κάποιου δεδομένου στην cache, (δηλαδή μικρή cache latency, μικρή καθυστέρηση), αφού, αναλόγως της διεύθυνσης αυτού του δεδομένου στη RAM, ο επεξεργαστής δεν χρειάζεται να εξετάσει ολόκληρη την cache, αλλά μόνον ένα, συγκεκριμένο κατά περίπτωση, τμήμα της. Με βάση αυτά τα δύο άκρα, το hit ratio και ο χρόνος αναζήτησης που επιτυγχάνονται με την set associative cache βαίνουν εξαρτώμενα από το μέγεθος του Ν, δηλαδή από το πλήθος των εναλλακτικών λύσεων αποθήκευσης που υπάρχουν μέσα στην cache, για κάθε διεύθυνση της RAM.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Αναφορικά με τα cache misses, ας δούμε τις κατηγορίες τυποποίησής τους. Έτσι, μπορούμε να διακρίνουμε:

  • Compulsory cache miss, αναγκαστική αστοχία. Ένα compulsory cache miss συμβαίνει όταν αναζητείται ένα μπλοκ στην cache, δεν ανευρίσκεται εκεί και αναγκαστικά αντλείται από τη RAM, ερχόμενο στην cache για πρώτη φορά. Εξ αυτού του γεγονότος ονομάζεται και αστοχία ψυχράς έναρξης, ή αστοχία αρχικής αναφοράς, (cold start miss, first reference miss).
  • Capacity cache miss, αστοχία λόγω στενότητας χώρου. Σε αυτήν την κατηγορία εμπίπτουν εκείνες οι αστοχίες, όπου, για την εκτέλεση του προγράμματος, είναι απαραίτητα σε διαδοχική σειρά πολλά ετερόκλητα μπλοκ, τα οποία όμως δεν χωρούν όλα μαζί στην cache, με αποτέλεσμα κάποια από αυτά να διαγράφονται από αυτήν, (ή να εγγράφονται στη RAM, εάν είναι «βρωμισμένα»), και να καλούνται εκ νέου μετά από βραχύ χρονικό διάστημα.
  • Conflict cache miss, αστοχία σύγκρουσης. Αυτού του είδους οι αστοχίες συμβαίνουν σε set associative ή direct mapped cache. Όντας κατά κάποιον τρόπο το αντίστροφο της προηγούμενης κατηγορίας, τέτοιου είδους cache miss είναι αυτά που συμβαίνουν, όταν αντλούνται στην cache διαδοχικά πολλά μπλοκ από το ίδιο σετ, (εάν πρόκειται για set associative cache), ή την ίδια ομάδα (εάν πρόκειται για direct mapped cache).



Στην εικόνα αυτή διαφαίνεται η σημασία που έχει η χωρητικότητα της cache σε συνάρτηση με τον τρόπο συσχέτισής της με τη RAM. Στον οριζόντιο άξονα μετράται η χωρητικότητα της cache, ενώ στον κατακόρυφο μετράται το miss rate. Κατ’ αρχάς, καθίσταται φανερό ότι τα compulsory miss είναι τα πλέον ασήμαντα, καθώς είναι μεν αναπόφευκτο να συμβούν, αλλά το ποσοστό τους είναι ανάξιο λόγου. Αντιθέτως, τα capacity miss είναι πολλά, αλλά μειώνονται δραστικά με αύξηση της χωρητικότητας της cache. Όσον αφορά τα conflict cache miss, είναι φανερό ότι μειώνονται κι αυτά με αύξηση της χωρητικότητας της cache, αλλά με πιο αργό ρυθμό, με τις set associative με περισσότερες της μιας επιλογές να επιτυγχάνουν καλύτερο αποτέλεσμα.

Η N-way set associative cache παρουσιάζει καλύτερες επιδόσεις όσο αυξάνεται το Ν, ενώ φαίνεται ανάγλυφα, πόσο μεγάλη σημασία έχει η χωρητικότητα της cache, πό-σο συμβάλλει στην αύξηση της ταχύτητας των υπολογισμών, αφού μειώνει δραστικά τα cache miss, α-νεξαρτήτως του είδους συσχέτισης που εφαρμόζεται. Αυτός είναι ένας από τους λόγους, για τους οποίους οι επεξεργαστές Celeron είχαν ανέκαθεν μειωμένες επιδόσεις σε σχέση με τα εκάστοτε αντίστοιχα μεγάλα αδέλφια τους, τους Pentium 2, Pentium 3 και Pentium 4 κλπ., αφού η cache μνήμη τους ήταν σαφώς μικρότερη από την αντίστοιχη των μεγάλων αδελφών τους. Το ανάστροφο σχόλιο μπορούμε να κάνουμε για τους επεξεργαστές Pentium M (αν τους θυμάστε), οι οποίοι, παρά το γεγονός ότι ήταν χρονισμένοι σε σχετικά χαμηλή συχνότητα, επεδείκνυαν επαρκέστατη ταχύτητα, λόγω της ευρύχωρης cache με την οποίαν ήσαν εξοπλισμένοι.

Στην πράξη, η μέθοδος που χρησιμοποιείται σε πλείστες, αν όχι όλες τις περιπτώσεις, είναι η N-way set associative cache, με το Ν να είναι συνήθως 2, 4, ή 8. Έτσι, όταν μετά από ένα cache miss ο επεξεργαστής φέρει νέο μπλοκ από τη RAM, αυτό θα πρέπει να καταλάβει μια από τις N θέσεις της cache, με τις οποίες είναι συσχετισμένο. Το (σχεδόν) βέβαιον είναι, ότι όλες αυτές οι θέσεις θα είναι κατειλημμένες με δεδομένα και εντολές, και επομένως το περιεχόμενο κάποιας από αυτές πρέπει να διαγραφεί, αντικαθιστάμενο από το νεοφερμένο μπλοκ. Δηλαδή, κάποια θέση πρέπει να αδειάσει, αλλά ποια;
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Λογικά, το μπλοκ που θα αδειάσει θα πρέπει να είναι αυτό, του οποίου το περιεχόμενο δεν πρόκειται (ή είναι εξαιρετικά απίθανο) να ξαναχρειαστεί ο επεξεργαστής, έτσι δεν είναι; Όπως είναι εύλογα αντιληπτό, αυτό είναι αδύνατο να προβλεφθεί μετά βεβαιότητας. Έτσι, το μπλοκ που θα πρέπει να διαγραφεί είναι αυτό, για το οποίο, η πιθανότητα να το ξαναζητήσει ο επεξεργαστής είναι πολύ μικρή. Όπως και να έχει το πράγμα, η ορθή απάντηση στο παραπάνω ερώτημα δεν είναι μια και μόνη. Σ’ αυτό το σημείο παίρνει σάρκα και οστά η πολιτική αντικατάστασης, (replacement policy), που πρέπει να ακολουθηθεί, και επ’ αυτού ακριβώς του θέματος έχουν αναπτυχθεί διάφοροι αλγόριθμοι επιλογής του μπλοκ-θύματος, ενδεικτικοί των οποίων είναι οι ακόλουθοι.

Least recently used, LRU. Αυτός ο αλγόριθμος επιλέγει και αντικαθιστά το μπλοκ, του οποίου η χρήση είναι η λιγότερο πρόσφατη από όλα τα άλλα, δηλαδή, επιλέγει εκείνο το μπλοκ, που έχει μείνει αχρησιμοποίητο για το μεγαλύτερο χρονικό διάστημα, σε σχέση με τα υπόλοιπα, στις άλλες θέσεις της cache. Αυτή η λύση είναι δύσκολη στην υλοποίηση του hardware, αλλά δίνει πολύ καλό hit rate. Μια παραλλαγή της, γνωστή ως ψευδο-LRU, διευκολύνει την υλοποίηση του hardware, κάνοντας βεβαίως παραχωρήσεις σε βάρος του hit rate.

Least frequently used, LFU. Με βάση αυτόν τον αλγόριθμο, το μπλοκ που θα αντικατασταθεί είναι εκείνο που προσπελάσθηκε και χρησιμοποιήθηκε λιγότερο συχνά από όλα τα άλλα.

FIFO, first in – first out. Όπως υποδηλώνει και το όνομά της, η μέθοδος FIFO αντικαθιστά το μπλοκ που εισήλθε πρώτο από όλα τα άλλα στην cache, και άρα είναι το πλέον ηλικιωμένο, ανεξαρτήτως εάν αυτό προσπελάσθηκε πρόσφατα ή παλιότερα, συχνά ή σπάνια.

Πέραν αυτών των απλών στη σύλληψη αλγορίθμων, υπάρχουν κι άλλες λύσεις, ενώ η ευελιξία επιλογής αυξάνεται σημαντικά με την υλοποίηση cache πολλών επιπέδων.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Cache πολλών επιπέδων

Χάριν απλότητας, ώστε να γίνει κατά το δυνατόν καταληπτός ο ρόλος και ο τρόπος λειτουργίας της cache, η παραπάνω ανάλυση έγινε με βάση την παραδοχή, ότι η cache αποτελεί έναν ενιαίο, μοναδικό χώρο μεταξύ του επεξεργαστή και της μνήμης RAM. Όμως, στην πραγματικότητα τα πράγματα είναι σαφώς πιο περίπλοκα, καθώς, εδώ και πολλά χρόνια, η cache πολλών επιπέδων αποτελεί κοινό τόπο στην τεχνολογία κατασκευής επεξεργαστών. Η διαστρωμάτωση της cache σε πολλά επίπεδα πραγματοποιείται με βάση τη λογική που λέει, ότι είναι προτιμότερο ο επεξεργαστής να επικοινωνεί με μια μικρή αλλά και ταχύτατη cache, που είναι γνωστή ως cache 1ου επιπέδου, (Level 1 cache, ή απλά L1 cache). Με τη σειρά της, η cache 1ου επιπέδου επικοινωνεί με μια άλλη cache, σε 2ο επίπεδο, που είναι πιο αργή αλλά και πιο ευρύχωρη, και η οποία, βεβαίως, εξακολουθεί να είναι ταχύτερη από τη RAM. Τέλος, δεν λείπουν και σχεδιάσεις που περιλαμβάνουν και cache 3ου επιπέδου, η οποία είναι ακόμα πιο ευρύχωρη, αλλά και πιο αργή από την cache του προηγουμένου επιπέδου, και η οποία όμως και πάλι εξακολουθεί να είναι πιο γρήγορη από τη RAM.

Δηλαδή, ξεκινώντας από τη RAM, για να έλθουν τα δεδομένα προς τον επεξεργαστή και να καταλήξουν στον καταχωρητή δεδομένων, περνούν διαδοχικά από περισσότερες της μιας cache μνήμες. Όσο πλησιάζουν προς τον επεξεργαστή, «ανεβαίνουν» επίπεδο cache. Αυτή η σχεδιαστική προσέγγιση αναπαρίσταται σχηματικά στην επομένη εικόνα.



Με βάση αυτήν την προσέγγιση, όταν πραγματοποιηθεί ένα cache miss στην cache 1ου επιπέδου, τότε το μη ευρεθέν δεδομένο αναζητείται στην cache του επομένου επιπέδου. Εάν και εκεί πραγματοποιηθεί cache miss, αναζητείται στην cache του μεθεπομένου επιπέδου, κ.ο.κ., έως ότου βρεθεί, ενώ, φυσικά, εάν δεν βρεθεί σε καμιά cache, εάν δεν βρεθεί «κασαρισμένο», τότε αντλείται από τη RAM. Βεβαίως, η μεταφορά δεδομένων από τη μια cache στην άλλη, αλλά και δεδομένων από την cache του τελευταίου επιπέδου προς τη RAM και ανάστροφα, γίνεται σε μπλοκ.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Όσον αφορά τη μεταφορά δεδομένων από τον επεξεργαστή προς τη RAM, προφανώς αυτή η εγγραφή θα πραγματοποιηθεί πρώτα στην cache 1ου επιπέδου, ενώ στη συνέχεια θα μεταφερθεί προς τα «πίσω», μετεγγραφόμενη στην cache κατώτερου επιπέδου, έως ότου καταλήξει εκεί που πρέπει, δηλαδή στη RAM. Αυτός ο τρόπος μετακίνησης δεδομένων προς τη RAM είναι που συνιστά την λεγόμενη non inclusive cache, τη μη περιεκτική λανθάνουσα μνήμη, ενώ αυτή η μέθοδος εγγραφής είναι γνωστή ως write back.

Η άλλη λύση είναι, τα δεδομένα να εγγραφούν μονομιάς στην cache όλων των επιπέδων, καθώς επίσης και στη RAM, οπότε και μιλάμε για inclusive cache, περιεκτική λανθάνουσα μνήμη, ενώ η μέθοδος εγγραφής ονομάζεται write through.

Ανάμεσα σ’ αυτές τις δύο καταστάσεις, υλοποιούνται διάφοροι συνδυασμοί, αναλόγως των σχεδιαστικών επιλογών που ακολουθήθηκαν στην κατασκευή του υπό εξέτασιν επεξεργαστή. Για παράδειγμα, οι επεξεργαστές της οικογένειας Athlon64 φέρουν non inclusive cache, και έτσι, σε δεδομένη χρονική στιγμή, το περιεχόμενο της L1 cache μπορεί να διαφέρει από αυτό της L2 cache. Αντίθετα, οι Intel Pentium 4, φέρουν inclusive cache μεικτής λογικής οργάνωσης, η οποία προκρίνει την εγγραφή των δεδομένων, τόσο στη L1, όσον και στη L2 cache, χωρίς όμως αυτό να είναι απαράβατος κανόνας, καθώς εξετάζονται κι άλλες προϋποθέσεις, οι οποίες πρέπει να πληρούνται ώστε να πραγματοποιηθεί εγγραφή write through.

Όταν ένα μπλοκ δεχθεί τροποποίηση (εγγραφή) από τον επεξεργαστή, ονομάζεται «βρωμισμένο», dirty. Εύλογα, είναι προτιμότερο να αποφεύγεται η άτεγκτη write through εγγραφή ενός μπλοκ αμέσως μετά το «βρώμισμά» του, καθώς, ενδέχεται να γίνουν και άλλες αλλαγές σ’ αυτό, στους αμέσως επόμενους κύκλους μηχανής, οπότε αυτές όλες μαζί μπορούν να μεταφερθούν μονομιάς στη RAM, κάτι που συνεπάγεται εξοικονόμηση χρόνου. Φυσικά, αυτό προϋποθέτει σχετικά υψηλό hit rate.
 
  • Like
Reactions: cbk

Costas Coyias

Ημίθεος
Administrator
Μηνύματα
25.148
Reaction score
20.729
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

Όπως συμβαίνει με την αργή RAM, ο συμβατικός σκληρός δίσκος καθώς και ο SSD, που είναι ακόμη πιο αργές μορφές μνήμης, είναι εξοπλισμένοι με μνήμη cache, με τη διαφορά, ότι σε αυτήν την εφαρμογή χρησιμοποιείται δυναμική μνήμη, και όχι η ακριβή στατική μνήμη, κάτι που δεν μπορεί να θεωρηθεί ως μειονέκτημα, καθώς - έτσι ή αλλιώς – είναι πιο αργή μορφή μνήμης, οπότε η δυναμική μνήμη δεν αποτελεί τροχοπέδη.



Ο συγκεκριμένος σκληρός δίσκος, δείγμα του παραθύρου των ιδιοτήτων του οποίου βλέπετε στην εικόνα, είναι εξοπλισμένος με 8ΜiΒ cache, (ενώ, βεβαίως, λανθάνουσα μνήμη έχει κάθε σύγχρονης τεχνολογίας δίσκος). Έτσι, λοιπόν, το σύστημα ανίχνευσε αυτή τη δυνατότητα και έχει εξ ορισμού ενεργοποιημένο το πλήκτρο επιλογής «Ενεργοποίηση της cache στο δίσκο κατά την εγγραφή», γεγονός που σημαίνει ότι οι εγγραφές στο δίσκο πραγματοποιούνται με τη μέθοδο write back. Άρα, οι εγγραφές προς το δίσκο δεν διοχετεύονται αμέσως στα πλατώ του, τα οποία είναι πολύ αργή μορφή μνήμης, αλλά εγγράφονται στην cache του δίσκου, και μετεγγράφονται στα πλατώ σε εύθετο χρόνο. Αυτό έχει ως αποτέλεσμα τη θεαματική αύξηση των επιδόσεων ταχύτητας του δίσκου. Επειδή ο συγκεκριμένος δίσκος είναι εσωτερικού τύπου, πράγμα που καθιστά ανεπίτρεπτη την αφαίρεσή του κατά τη στιγμή που το σύστημα βρίσκεται σε λειτουργία, τα σχετικά πλήκτρα εναλλαγής είναι μη διαθέσιμα, με ενεργοποιημένο αυτό που επιγράφεται ως «Βελτιστοποίηση για απόδοση». Εάν ο χρήστης θελήσει να απενεργοποιήσει τη μέθοδο write back, τότε δεν έχει παρά να απενεργοποιήσει το πλήκτρο επιλογής «Ενεργοποίηση της cache στο δίσκο κατά την εγγραφή».

Εάν ο δίσκος ήταν αφαιρετός, όπως λόγου χάριν ένας εξωτερικός δίσκος USB, ένας δίσκος Serial ATA, ή ένας δίσκος SCSI ή SAS, συνδεδεμένος με ελεγκτή που επιτρέπει την εναλλαγή του εν θερμώ, (hot swapping), τότε θα ήταν διαθέσιμα τα σχετικά πλήκτρα εναλλαγής, ώστε ο χρήστης, εάν ήθελε, να είχε επιλεγμένο το πλήκτρο «Βελτιστοποίηση για γρήγορη κατάργηση». Με αυτό το πλήκτρο επιλεγμένο, η εγγραφή δεδομένων στο δίσκο γίνεται με τη μέθοδο write through, οπότε τα δεδομένα που εγγράφονται στην cache, εγγράφονται κατ’ ευθείαν και στα πλατώ του δίσκου. Αυτό επιτρέπει την άμεση αποσύνδεση του δίσκου, οποιαδήποτε στιγμή, χωρίς την απώλεια δεδομένων, αφού δεν υπάρχουν δεδομένα που έχουν εγγραφεί στην cache και εκκρεμούν προς εγγραφή στα πλατώ, (dirty blocks).

Από την άλλη μεριά, ένας εξωτερικός δίσκος μπορεί κάλλιστα να είναι ρυθμισμένος στη μέθοδο εγγραφής write back, ώστε ο χρήστης του να απολαμβάνει αυξημένες επιδόσεις ταχύτητας, αλλά για την ασφαλή αφαίρεσή του προϋποτίθεται ο σχετικός χειρισμός ασφαλούς αποσύνδεσης. Διαφορετικά, ενδέχεται να παρουσιασθεί το φαινόμενο, ο δίσκος να αποσυνδεθεί σε χρονική στιγμή, κατά την οποίαν έχουν εγγραφεί δεδομένα στην cache και εκκρεμούν να εγγραφούν στα πλατώ, οπότε μόλις διακοπεί το ρεύμα θα χαθούν.

Όσον αφορά την cache, στην πραγματικότητα, δεν υπάρχει σύγχρονος επεξεργαστής που να έχει cache ενός μόνον επιπέδου, ενώ η οργάνωση της cache και οριζοντίως, μέσα στο ίδιο επίπεδο, αποτελεί πλέον κοινό τόπο. Για παράδειγμα, κάποιοι επεξεργαστές Pentium 4 διαθέτουν cache τριών επιπέδων, από τα οποία στο 1ο η cache είναι χωρισμένη στα δύο, ώστε να υπάρχει ξεχωριστός χώρος για τις εντολές και ξεχωριστός για τα δεδομένα, ενώ οι cache του 2ου και του 3ου επιπέδου είναι ενιαίες. Επίσης, αναλόγως των σχεδιαστικών επιλογών του κατασκευαστή, σε καθεμιά από αυτές τις cache μπορεί να εφαρμόζεται διαφορετική πολιτική αντικατάστασης, με τις LRU και ψευδο-LRU να είναι οι μάλλον συνήθεις.

Τελικά, όλες αυτές οι σχεδιαστικές διαφορές, χωρίς να είναι οι μόνες, αποτελούν μερικούς από τους λόγους, για τους οποίους ένας Athlon64 είναι ταχύς στην εκτέλεση εφαρμογών γραφείου, όπως τα Microsoft Word και Excel, και μάλιστα, έχοντας συχνότητα ρολογιού σαφώς μικρότερη από έναν αντιστοίχων επιδόσεων Pentium 4. Από την άλλη μεριά, ο Pentium 4 αποδεικνύεται ταχύτερος σε άλλου είδους εφαρμογές, όπως οι εφαρμογές επεξεργασίας εικόνας και διαχείρισης δεδομένων ήχου. Έτσι, ένας Pentium 4 αποδεικνύεται ταχύτερος από έναν ίδιας κλάσης (και παραπλήσιας τιμής) Athlon64, όταν το αντικείμενο δοκιμής περιλαμβάνει ρουτίνες του Adobe Photoshop, ή συμπίεση αρχείων ήχου από μορφή wav σε mp3, τρέχοντας κάποιαν ανάλογη εφαρμογή, όπως ο LAME.

Όσον αφορά τους πολυπυρήνους επεξεργαστές που είναι πλέον κοινός τόπος, ένας επεξεργαστής με πολλούς πυρήνες μπορεί να έχει λανθάνουσα μνήμη 1ου και 2ου επιπέδου ξεχωριστή για καθέναν πυρήνα, ενώ μπορεί να υπάρχει και λανθάνουσα μνήμη 3ου, ή ακόμη και κατωτέρου επιπέδου, την οποία μπορούν να εκμεταλλεύονται όλοι οι πυρήνες. Αναλόγως των σχεδιαστικών επιλογών και των φυσικών διαστάσεων του die, σε συνδυασμό με το πλήθος των πυρήνων και το βήμα της λιθογραφίας (τα "νανόμετρα").

Ουφ! Αυτά...
 
  • Like
Reactions: cbk



abcd

Πρώην Διοικητής ο τροπαιοφόρος
Super Moderator
Μηνύματα
77.916
Reaction score
95.369
Απάντηση: AMD vs. Intel και ο Νόμος του Amdhal

+1

:607:
 


Τελευταια Μηνυματα

ΣΤΑΤΙΣΤΙΚΑ

Threads
171.808
Μηνύματα
2.876.869
Members
37.952
Νεότερο μέλος
dion10
Top