Βελτιστοποιήστε τις ρυθμίσεις εικονικής μνήμης και προσωρινής μνήμης. Τοποθετούμε την προσωρινή μνήμη του προγράμματος περιήγησης στο δίσκο RAM

Παιδικά προϊόντα 20.04.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Chercher

Μέσος χρόνος πρόσβασης = Χρόνος επιτυχίας + Ποσοστό αποτυχίας x Απώλεια

Αυτός ο τύπος δείχνει ξεκάθαρα τρόπους βελτιστοποίησης της προσωρινής μνήμης: μείωση του ποσοστού των αστοχιών, μείωση των απωλειών σε περίπτωση απώλειας και μείωση του χρόνου που απαιτείται για την πρόσβαση στην προσωρινή μνήμη σε μια επίσκεψη. Παρακάτω στο Σχ. Το 7.3 παρουσιάζεται συνοπτικά διάφορες μεθόδους, τα οποία επί του παρόντος χρησιμοποιούνται για τη βελτίωση της απόδοσης της προσωρινής μνήμης. Η χρήση ορισμένων μεθόδων καθορίζεται κυρίως από το σκοπό της ανάπτυξης, ενώ οι σχεδιαστές σύγχρονους υπολογιστέςβεβαιωθείτε ότι το σύστημα είναι ισορροπημένο από όλες τις απόψεις.

Μέθοδος Miss rate Απώλειες σε περίπτωση απώλειας Χρόνος διεκπεραίωσης σε επιτυχία Σημειώσεις πολυπλοκότητας υλικού
Αύξηση μεγέθους μπλοκ + -
Αύξηση του βαθμού συνειρμικότητας + - 1
Προσωρινή μνήμη με βοηθητική κρυφή μνήμη +
Ψευδοσυνειρμικές κρυφές μνήμες +
Οδηγίες υλικού και προανάκτηση δεδομένων + 2 Η προανάκτηση δεδομένων είναι δύσκολη
Προανάκτηση ελεγχόμενη από μεταγλωττιστή + 3 Απαιτεί επίσης μη κλειδωμένη κρυφή μνήμη
Ειδικές τεχνικές για τη μείωση των αστοχιών + 0 Ερώτηση λογισμικού
Δίνοντας προτεραιότητα στις αστοχίες ανάγνωσης έναντι των εγγραφών + 1 Μόνο για συστήματα με έναν επεξεργαστή
Χρήση υπομπλοκ ++ 1 Υποομάδα εγγραφής + 1 λέξης βοηθάει τις καταχωρίσεις
Στείλτε πρώτα τη λέξη που ζητήσατε +
Μη μπλοκαρισμένες κρυφές μνήμες +
Δεύτερου επιπέδου κρυφές μνήμες + 2 Αρκετά ακριβός εξοπλισμός
Απλές κρυφές μνήμεςμικρό μέγεθος - + 0
Παράκαμψη μετάφρασης διευθύνσεων κατά τη δημιουργία ευρετηρίου προσωρινής μνήμης + 2
Το Pipelining γράφει για γρήγορες επιτυχίες εγγραφής + 1

Ρύζι. 7.3. Γενίκευση των μεθόδων βελτιστοποίησης της κρυφής μνήμης

Η προσωρινή μνήμη (ή απλά η κρυφή μνήμη, από το αγγλικό Cache - αποθήκη, κρυψώνα) προορίζεται για ενδιάμεση αποθήκευσηπληροφορίες από τη μνήμη του συστήματος προκειμένου να επιταχυνθεί η πρόσβαση σε αυτήν. Η επιτάχυνση επιτυγχάνεται με τη χρήση περισσότερων γρήγορη μνήμηκαι άλλα γρήγορη πρόσβασησε αυτήν. Σε αυτήν την περίπτωση, ένα συνεχώς ενημερωμένο αντίγραφο κάποιας περιοχής της κύριας μνήμης αποθηκεύεται στην προσωρινή μνήμη.

Η ανάγκη εισαγωγής κρυφής μνήμης οφείλεται στο γεγονός ότι η μνήμη του συστήματος προσωπικός υπολογιστήςεκτελείται σε δυναμικά τσιπ μνήμης, τα οποία χαρακτηρίζονται από χαμηλότερο κόστος αλλά και χαμηλότερη απόδοση σε σύγκριση με τη στατική μνήμη. Η ιδέα είναι ότι εισάγοντας ένα γρήγορο buffer, ενδιάμεσο στατική μνήμημπορείτε να επιταχύνετε την ανταλλαγή από μια αργή δυναμική μνήμη. Ουσιαστικά, η κρυφή μνήμη κάνει το ίδιο πράγμα με την προηγούμενη διοχέτευση εντολών, αλλά σε υψηλότερο επίπεδο. Η προσωρινή μνήμη αποθηκεύει ένα αντίγραφο κάποιου τμήματος της μνήμης του συστήματος και ο επεξεργαστής μπορεί να επικοινωνήσει με αυτό το τμήμα της μνήμης πολύ πιο γρήγορα από ό,τι με τη μνήμη συστήματος. Επιπλέον, τόσο οι εντολές όσο και τα δεδομένα μπορούν να αποθηκευτούν στην κρυφή μνήμη.



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

Κατ 'αρχήν, η προσωρινή μνήμη μπορεί να είναι είτε εσωτερική (μέρος του επεξεργαστή) είτε εξωτερική. Η εσωτερική κρυφή μνήμη ονομάζεται κρυφή μνήμη πρώτου επιπέδου, η εξωτερική κρυφή μνήμη cache δεύτερου επιπέδου. Τόμος εσωτερική κρυφή μνήμησυνήθως μικρή - τυπική τιμή 32 KB. Τόμος εξωτερική κρυφή μνήμημπορεί να φτάσει αρκετά megabyte. Αλλά η αρχή λειτουργίας τους είναι η ίδια.

Η κρυφή μνήμη L1 του επεξεργαστή 486 έχει δομή τεσσάρων καναλιών (Εικόνα 7.9). Κάθε κανάλι αποτελείται από 128 γραμμές των 16 byte η καθεμία. Οι γραμμές με το ίδιο όνομα και από τα τέσσερα κανάλια σχηματίζουν 128 σετ τεσσάρων γραμμών, καθεμία από τις οποίες εξυπηρετεί τις δικές της διευθύνσεις μνήμης. Κάθε γραμμή αντιστοιχεί σε πληροφορίες 21-bit σχετικά με τη διεύθυνση του μπλοκ μνήμης συστήματος που αντιγράφηκε σε αυτό. Αυτή η πληροφορία ονομάζεται ετικέτα(Ετικέτα) γραμμές.

Ρύζι. 7.9.Δομή της εσωτερικής κρυφής μνήμης του επεξεργαστή 486.

Επιπλέον, η κρυφή μνήμη περιλαμβάνει έναν λεγόμενο διαχειριστή, δηλαδή μια περιοχή μνήμης με οργάνωση 128 x 7, η οποία αποθηκεύει ετικέτες εγκυρότητας 4 bit για καθένα από τα 128 σύνολα και κωδικούς LRU 3 bit (Last Recently Used). για καθένα από 128 σετ. Η ετικέτα εγκυρότητας συνόλου περιλαμβάνει 4 bit εγκυρότητας για καθεμία από τις 4 συμβολοσειρές που περιλαμβάνονται στο σύνολο. Ένα bit εμπιστοσύνης που έχει οριστεί σε ένα υποδεικνύει ότι η αντίστοιχη γραμμή έχει ολοκληρωθεί. αν μηδενιστεί, τότε η συμβολοσειρά είναι άδεια. Τα bit LRU υποδεικνύουν πόσο καιρό πριν έγινε η κλήση. αυτό το σετ. Αυτό είναι απαραίτητο για την ενημέρωση των λιγότερο χρησιμοποιούμενων σετ.

Η κρυφή μνήμη διευθυνσιοδοτείται χρησιμοποιώντας 28 bit διεύθυνσης. Από αυτά, τα λιγότερο σημαντικά 7 bit επιλέγουν ένα από τα 128 σύνολα και τα πιο σημαντικά 21 bit συγκρίνονται με τις ετικέτες και των 4 σειρών του επιλεγμένου συνόλου. Εάν οι ετικέτες συμπίπτουν με τα bit της διεύθυνσης, τότε συμβαίνει η κατάσταση χτυπήματα κρυφής μνήμης, και αν όχι, τότε η κατάσταση απουσία κρυφής μνήμης.

Στην περίπτωση ενός κύκλου ανάγνωσης, μια επίσκεψη στην κρυφή μνήμη διαβάζει ένα byte ή μια λέξη από τη μνήμη cache. Όταν παρουσιαστεί απώλεια προσωρινής μνήμης, μια από τις γραμμές της προσωρινής μνήμης ενημερώνεται (φορτώνεται ξανά).

Στην περίπτωση ενός κύκλου εγγραφής, μια επίσκεψη κρυφής μνήμης γράφει τόσο στην κρυφή μνήμη όσο και στην κύρια μνήμη. μνήμη συστήματος. Μια απώλεια προσωρινής μνήμης γράφει μόνο στη μνήμη του συστήματος και δεν ενημερώνει τη γραμμή της προσωρινής μνήμης. Αυτή η συμβολοσειρά γίνεται άκυρη (το bit εγκυρότητάς της μηδενίζεται).

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

Κατά τη χρήση γράψτε πίσωΟι εγγεγραμμένες πληροφορίες αποστέλλονται στην κύρια μνήμη μόνο όταν η απαιτούμενη γραμμή δεν βρίσκεται στην κρυφή μνήμη. Σε περίπτωση επιτυχίας, τροποποιείται μόνο η κρυφή μνήμη. Οι αλλαγμένες πληροφορίες θα εισέλθουν στην κύρια μνήμη μόνο όταν αντικατασταθούν νέα γραμμήστην κρυφή μνήμη. Η προηγούμενη γραμμή ξαναγράφεται πλήρως στην κύρια μνήμη, αποκαθιστώντας έτσι την ταυτότητα των περιεχομένων της κρυφής μνήμης και της κύριας μνήμης.

Στην περίπτωση που η απαιτούμενη γραμμή δεν υπάρχει στην κρυφή μνήμη (κατάσταση απώλειας προσωρινής μνήμης), το αίτημα εγγραφής αποστέλλεται στον εξωτερικό δίαυλο και το αίτημα ανάγνωσης επεξεργάζεται κάπως πιο πολύπλοκα. Εάν αυτό το αίτημα ανήκει σε μια περιοχή αποθηκευμένης μνήμης, τότε εκτελείται ένας κύκλος πλήρωσης ολόκληρης της γραμμής κρυφής μνήμης (16 byte από τη μνήμη ξαναγράφονται σε μία από τις γραμμές της υπηρεσίας συνόλου δεδομένη διεύθυνση). Εάν τα ζητούμενα δεδομένα δεν χωρούν σε μία γραμμή, τότε συμπληρώνεται και η διπλανή γραμμή. Ο επεξεργαστής προσπαθεί να γεμίσει τη γραμμή στο μέγιστο με γρήγορο τρόπο- σε κύκλο παρτίδων, ωστόσο εξωτερικός ελεγκτήςΗ μνήμη μπορεί να απαιτεί τη χρήση πιο αργών μεταφορών.

Εσωτερικό αίτημαΗ απαίτηση του επεξεργαστή για δεδομένα ικανοποιείται αμέσως μόλις διαβαστούν τα δεδομένα από τη μνήμη και η περαιτέρω πλήρωση της γραμμής μπορεί να προχωρήσει παράλληλα με την επεξεργασία δεδομένων. Εάν υπάρχει μια ελεύθερη σειρά στο σύνολο που εξυπηρετεί μια δεδομένη διεύθυνση μνήμης, αυτή είναι η σειρά που θα συμπληρωθεί. Εάν δεν υπάρχουν ελεύθερες γραμμές, συμπληρώνεται η γραμμή που δεν έχει προσπελαστεί για το μεγαλύτερο χρονικό διάστημα. Για να γίνει αυτό, χρησιμοποιούνται bit LRU, τα οποία τροποποιούνται κάθε φορά που γίνεται πρόσβαση σε μια σειρά σε ένα δεδομένο σύνολο.

Επιπλέον, είναι δυνατό να ακυρωθούν οι γραμμές (να δηλωθούν άκυρες) και να διαγραφεί ολόκληρη η προσωρινή μνήμη. Σε περίπτωση εγγραφής, η κρυφή μνήμη διαγράφεται χρησιμοποιώντας ένα ειδικό εξωτερικό σήμαεπεξεργαστής, προγραμματικάμε τη χρήση ειδικές ομάδες, και επίσης πότε αρχική επαναφορά– με σήμα RESET. Με την εγγραφή, η εκκαθάριση της προσωρινής μνήμης σημαίνει επίσης απόρριψη όλων των τροποποιημένων γραμμών στην κύρια μνήμη.

Σημειώστε ότι στον χώρο μνήμης ενός προσωπικού υπολογιστή υπάρχουν περιοχές για τις οποίες η προσωρινή αποθήκευση είναι θεμελιωδώς απαράδεκτη (για παράδειγμα, η κοινή μνήμη προσαρμογέων υλικού - κάρτες επέκτασης).

Λειτουργία ριπής(Burst Mode), που παρουσιάστηκε για πρώτη φορά στον επεξεργαστή 486, έχει σχεδιαστεί για γρήγορες λειτουργίες με γραμμές κρυφής μνήμης. Ο κύκλος ριπής διαφέρει στο ότι για την προώθηση ολόκληρου του πακέτου, η διεύθυνση μεταδίδεται στον εξωτερικό δίαυλο διευθύνσεων μόνο μία φορά - στην αρχή του πακέτου, και στη συνέχεια σε κάθε επόμενο κύκλο ρολογιού μεταδίδονται μόνο δεδομένα. Η διεύθυνση για κάθε επόμενο κωδικό δεδομένων υπολογίζεται από την αρχική διεύθυνση σύμφωνα με τους κανόνες που καθορίζονται τόσο από τον πομπό δεδομένων όσο και από τον δέκτη του. Για παράδειγμα, η διεύθυνση κάθε επόμενης λέξης δεδομένων υπολογίζεται ως η προσαυξημένη διεύθυνση της προηγούμενης. Ως αποτέλεσμα, ο χρόνος μετάδοσης ανά λέξη δεδομένων μειώνεται σημαντικά. Είναι σαφές ότι η ανταλλαγή κύκλων πακέτων είναι δυνατή μόνο με συσκευές που είναι αρχικά ικανές να εξυπηρετήσουν έναν τέτοιο κύκλο. Το επιτρεπόμενο μήκος πακέτου δεν είναι πολύ μεγάλο, για παράδειγμα, κατά την ανάγνωση, το μέγεθος του πακέτου περιορίζεται σε μία γραμμή κρυφής μνήμης.

Λειτουργία πολλαπλασιασμού εσωτερικού ρολογιούΟ επεξεργαστής προτάθηκε για να αυξήσει την απόδοση του επεξεργαστή, αλλά ταυτόχρονα να τον εγκαταστήσει σε μητρικές πλακέτες σχεδιασμένες για χαμηλές ταχύτητες ρολογιού. Για παράδειγμα, λειτουργεί το μοντέλο επεξεργαστή 486DX2-66 πλακέτα συστήματοςμε συχνότητα ρολογιού 33, αλλά εσωτερικά μετατρέπει αυτή τη συχνότητα σε διπλή συχνότητα - 66 MHz. Αυτό μειώνει το συνολικό κόστος του συστήματος, καθώς μειώνει τις απαιτήσεις για εξαρτήματα μητρικής πλακέτας.

Ο επεξεργαστής 486 ήταν διαθέσιμος σε πακέτα 168 ή 169 ακίδων. Τάση τροφοδοσίας - 5 V ή 3,3 V. Εισαγωγή υπότασηΗ τροφοδοσία 3,3 V οφείλεται στην ανάγκη μείωσης της απαγωγής ισχύος. Μεγαλώνοντας συχνότητα ρολογιούκαι η αυξανόμενη πολυπλοκότητα της δομής του επεξεργαστή οδηγεί στο γεγονός ότι η ισχύς που καταναλώνεται από αυτούς φτάνει πολλά watt. Για σύγχρονους επεξεργαστέςΕίναι ήδη απαραίτητο να χρησιμοποιήσετε ανεμιστήρες στη θήκη του επεξεργαστή.

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

Στην πραγματικότητα, το σύστημα μνήμης σχηματίζεται ιεραρχία συσκευών αποθήκευσηςμε διαφορετικές χωρητικότητες, κόστος και χρόνους πρόσβασης. Οι καταχωρητές επεξεργαστών αποθηκεύουν τα δεδομένα που χρησιμοποιούνται πιο συχνά. Οι μικρές γρήγορες κρυφές μνήμες που βρίσκονται κοντά στον επεξεργαστή χρησιμεύουν ως ζώνες προσωρινής αποθήκευσης που αποθηκεύουν ένα μικρό μέρος των δεδομένων που βρίσκονται στο σχετικά αργό ΕΜΒΟΛΟ. Η RAM χρησιμεύει ως buffer για αργό τοπικούς δίσκους. Και οι τοπικοί δίσκοι χρησιμεύουν ως buffer για δεδομένα από απομακρυσμένα μηχανήματασυνδεδεμένο μέσω δικτύου.

Η ιεραρχία της μνήμης λειτουργεί επειδή τα καλά γραμμένα προγράμματα τείνουν να έχουν πρόσβαση στον χώρο αποθήκευσης σε ένα συγκεκριμένο επίπεδο πιο συχνά από τον χώρο αποθήκευσης σε χαμηλότερο επίπεδο. Έτσι, η αποθήκευση σε χαμηλότερο επίπεδο μπορεί να είναι πιο αργή, μεγαλύτερη και φθηνότερη. Καταλήγουμε με μια μεγάλη ποσότητα μνήμης που έχει το κόστος αποθήκευσης στο κάτω μέρος της ιεραρχίας, αλλά παραδίδει δεδομένα στο πρόγραμμα με την ταχύτητα γρήγορης αποθήκευσης στην κορυφή της ιεραρχίας.

Ως προγραμματιστής, πρέπει να κατανοήσετε την ιεραρχία της μνήμης γιατί επηρεάζει σε μεγάλο βαθμό την απόδοση των προγραμμάτων σας. Εάν κατανοείτε πώς το σύστημα μετακινεί τα δεδομένα πάνω-κάτω στην ιεραρχία, μπορείτε να γράψετε προγράμματα που τοποθετούν τα δεδομένα του υψηλότερα στην ιεραρχία, έτσι ώστε ο επεξεργαστής να έχει πρόσβαση σε αυτά πιο γρήγορα.

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

Εμπνεύστηκα να γράψω αυτό το άρθρο από το έκτο κεφάλαιο του βιβλίου Computer Systems: A Programmer's Perspective. Σε ένα άλλο άρθρο αυτής της σειράς, Code Optimization: CPU, παλεύουμε επίσης για τους κύκλους CPU.

Σημασία έχει και η μνήμη

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

Int matrixsum1(int size, int M) ( int sum = 0; for (int i = 0; i< size; i++) { for (int j = 0; j < size; j++) { sum += M[i][j]; // обходим построчно } } return sum; } int matrixsum2(int size, int M) { int sum = 0; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { sum += M[j][i]; // обходим по столбцам } } return sum; }

Και οι δύο λειτουργίες εκτελούν τον ίδιο αριθμό εντολών επεξεργαστή. Αλλά με αυτοκίνητο με Core i7 Haswellεκτελείται η πρώτη συνάρτηση 25 φορές πιο γρήγοραΓια μεγάλες μήτρες. Αυτό το παράδειγμα δείχνει καλά παίζει ρόλο και η μνήμη. Εάν μετράτε την αποτελεσματικότητα των προγραμμάτων μόνο ως προς τον αριθμό των εντολών που εκτελούνται, μπορείτε να γράψετε πολύ αργά προγράμματα.

Τα δεδομένα έχουν σημαντική περιουσίαπου ονομάζουμε τοποθεσία. Όταν εργαζόμαστε σε δεδομένα, είναι επιθυμητό να βρίσκονται κοντά στη μνήμη. Η διέλευση στηλών ενός πίνακα έχει κακή εντοπιότητα επειδή ο πίνακας αποθηκεύεται σειρά προς σειρά στη μνήμη. Θα μιλήσουμε για την τοποθεσία παρακάτω.

Ιεραρχία μνήμης

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

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

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

Ο ίδιος ο τοπικός δίσκος μπορεί να θεωρηθεί ως προσωρινή μνήμη για δεδομένα που βρίσκονται απομακρυσμένους διακομιστές. Όταν επισκέπτεστε έναν ιστότοπο, το πρόγραμμα περιήγησής σας αποθηκεύει εικόνες από την ιστοσελίδα στο δίσκο, ώστε να μην χρειάζεται να τις κατεβάσετε όταν επισκεφθείτε ξανά. Υπάρχουν επίσης χαμηλότερες ιεραρχίες μνήμης. Τα μεγάλα κέντρα δεδομένων όπως η Google αποθηκεύουν μεγάλες ποσότητες δεδομένων σε κασέτες που αποθηκεύονται κάπου σε αποθήκες και πρέπει να επισυναφθούν χειροκίνητα ή ρομποτικά όταν χρειάζεται.

Το σύγχρονο σύστημα έχει περίπου τα ακόλουθα χαρακτηριστικά:

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

Ας υποθέσουμε ότι ο υπολογιστής σας έχει 8 GB μνήμης RAM και έναν δίσκο 1000 GB. Αλλά σκεφτείτε ότι δεν εργάζεστε με όλα τα δεδομένα στο δίσκο ταυτόχρονα. Φορτώνετε το λειτουργικό σύστημα, ανοίγετε το πρόγραμμα περιήγησης ιστού, επεξεργαστής κειμένου, μερικές άλλες εφαρμογές και δουλέψτε μαζί τους για αρκετές ώρες. Όλες αυτές οι εφαρμογές χωρούν στη μνήμη RAM, επομένως το σύστημά σας δεν χρειάζεται πρόσβαση στο δίσκο. Στη συνέχεια, φυσικά, κλείνεις μια εφαρμογή και ανοίγεις μια άλλη, η οποία πρέπει να φορτωθεί από το δίσκο στη μνήμη RAM. Αλλά χρειάζονται μερικά δευτερόλεπτα, μετά τα οποία εργάζεστε με αυτήν την εφαρμογή για αρκετές ώρες χωρίς να έχετε πρόσβαση στο δίσκο. Δεν παρατηρείτε πραγματικά έναν αργό δίσκο επειδή σε μια στιγμή εργάζεστε μόνο με μια μικρή ποσότητα δεδομένων που είναι αποθηκευμένα στη μνήμη RAM. Δεν έχει νόημα να ξοδεύετε πολλά χρήματα για την εγκατάσταση 1024 GB μνήμης RAM, η οποία θα μπορούσε να φορτώσει τα περιεχόμενα ολόκληρου του δίσκου. Εάν το κάνατε αυτό, δύσκολα θα παρατηρούσατε καμία διαφορά στη δουλειά, θα ήταν "χρήματα κάτω από την αποχέτευση".

Το ίδιο ισχύει και με τις μικρές κρυφές μνήμες επεξεργαστών. Ας υποθέσουμε ότι πρέπει να εκτελέσετε υπολογισμούς σε έναν πίνακα που περιέχει 1000 στοιχεία τύπου ενθ. Ένας τέτοιος πίνακας καταλαμβάνει 4 KB και χωράει εξ ολοκλήρου στην κρυφή μνήμη πρώτου επιπέδου 32 KB. Το σύστημα κατανοεί ότι ξεκινήσατε να εργάζεστε με ένα συγκεκριμένο κομμάτι μνήμης RAM. Αντιγράφει αυτό το κομμάτι στη μνήμη cache και ο επεξεργαστής εκτελεί γρήγορα ενέργειες σε αυτόν τον πίνακα, απολαμβάνοντας την ταχύτητα της κρυφής μνήμης. Στη συνέχεια, ο αλλαγμένος πίνακας από τη μνήμη cache αντιγράφεται πίσω στη μνήμη RAM. Η αύξηση της ταχύτητας της μνήμης RAM στην ταχύτητα της κρυφής μνήμης δεν θα παρείχε αισθητή αύξηση στην απόδοση, αλλά θα αύξανε το κόστος του συστήματος κατά εκατοντάδες και χιλιάδες φορές. Αλλά όλα αυτά ισχύουν μόνο εάν τα προγράμματα έχουν καλή εντοπιότητα.

Τοποθεσία

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

Εξετάστε ένα πρόγραμμα που αθροίζει τα στοιχεία ενός πίνακα:

Int sum(int size, int A) ( int i, sum = 0; for (i = 0; i< size; i++) sum += A[i]; return sum; }

Σε αυτό το πρόγραμμα, η πρόσβαση σε μεταβλητές ποσόΚαι εγώεμφανίζεται σε κάθε επανάληψη του βρόχου. Έχουν καλή χρονική τοποθεσία και θα βρίσκονται σε γρήγορους καταχωρητές επεξεργαστών. Στοιχεία πίνακα ΕΝΑέχουν κακή χρονική εντοπιότητα επειδή έχουμε πρόσβαση σε κάθε στοιχείο μόνο μία φορά. Αλλά έχουν καλή χωρική εντοπιότητα - αφού αγγίξουμε ένα στοιχείο, στη συνέχεια αγγίζουμε τα στοιχεία δίπλα του. Όλα τα δεδομένα σε αυτό το πρόγραμμα έχουν είτε καλή χρονική τοποθεσία είτε καλή χωρική εντοπιότητα, οπότε λέμε ότι το πρόγραμμα γενικά έχει καλή εντοπιότητα.

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

Τα δεδομένα μετακινούνται μεταξύ επιπέδων ιεραρχίας σε μπλοκ συγκεκριμένου μεγέθους. Για παράδειγμα, ένας επεξεργαστής Core i7 Haswellμετακινεί δεδομένα μεταξύ των κρυφών του σε μπλοκ 64 byte. Ας αναλογιστούμε συγκεκριμένο παράδειγμα. Εκτελούμε το πρόγραμμα σε μηχάνημα με τον προαναφερθέντα επεξεργαστή. Έχουμε έναν πίνακα v, που περιέχει στοιχεία τύπου 8 byte μακρύς. Και διασχίζουμε διαδοχικά τα στοιχεία αυτού του πίνακα σε βρόχο. Όταν διαβάζουμε v, δεν βρίσκεται στη μνήμη cache, ο επεξεργαστής το διαβάζει από τη μνήμη RAM στη μνήμη cache σε ένα μπλοκ 64 byte. Δηλαδή, τα στοιχεία αποστέλλονται στην κρυφή μνήμη vv. Στη συνέχεια επαναλαμβάνουμε τα στοιχεία v, v, ..., v. Όλα θα βρίσκονται στην κρυφή μνήμη και θα έχουμε πρόσβαση σε αυτά γρήγορα. Στη συνέχεια διαβάζουμε το στοιχείο v, το οποίο δεν βρίσκεται στην κρυφή μνήμη. Ο επεξεργαστής αντιγράφει τα στοιχεία vvστην κρυφή μνήμη. Διασχίζουμε γρήγορα αυτά τα στοιχεία, αλλά δεν βρίσκουμε το στοιχείο στην κρυφή μνήμη v. Και ούτω καθεξής.

Έτσι, εάν διαβάσετε μερικά byte από τη μνήμη και μετά διαβάσετε byte δίπλα τους, πιθανότατα θα βρίσκονται στην κρυφή μνήμη. Αυτό είναι το όφελος της χωρικής εντοπιότητας. Πρέπει να προσπαθήσουμε σε κάθε στάδιο του υπολογισμού να εργαζόμαστε με δεδομένα που βρίσκονται κοντά στη μνήμη.

Συνιστάται να διασχίζετε τον πίνακα διαδοχικά, διαβάζοντας τα στοιχεία του ένα προς ένα. Εάν χρειάζεται να διασχίσετε τα στοιχεία μιας μήτρας, τότε είναι καλύτερο να διασχίσετε τη μήτρα γραμμή προς γραμμή αντί στήλη προς στήλη. Αυτό δίνει καλή χωρική εντοπιότητα. Τώρα μπορείτε να καταλάβετε γιατί η λειτουργία άθροισμα μήτρας1λειτούργησε πιο αργά από τη λειτουργία άθροισμα μήτρας2. Δισδιάστατος πίνακαςβρίσκεται στη μνήμη γραμμή προς γραμμή: η πρώτη γραμμή βρίσκεται πρώτη, αμέσως μετά η δεύτερη κ.ο.κ. Η πρώτη συνάρτηση διάβαζε τα στοιχεία του πίνακα γραμμή προς γραμμή και μετακινήθηκε στη μνήμη διαδοχικά, σαν να παρακάμπτει ένα μεγάλο μονοδιάστατος πίνακας. Αυτή η λειτουργία βασικά διαβάζει δεδομένα από τη μνήμη cache. Η δεύτερη συνάρτηση πήγαινε από γραμμή σε γραμμή, διαβάζοντας ένα στοιχείο τη φορά. Φαινόταν να πηδά από αριστερά προς τα δεξιά από τη μνήμη, μετά επέστρεψε στην αρχή και άρχισε πάλι να πηδά από αριστερά προς τα δεξιά. Στο τέλος κάθε επανάληψης έφραζε την κρυφή μνήμη τελευταίες γραμμές, οπότε στην αρχή της επόμενης επανάληψης δεν βρέθηκαν οι πρώτες γραμμές κρυφής μνήμης. Αυτή η λειτουργία βασικά διαβάζει δεδομένα από τη μνήμη RAM.

Κώδικας φιλικός στην προσωρινή μνήμη

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

Οι υπολογισμοί μήτρας είναι πολύ σημαντικοί στην ανάλυση σήματος και στις επιστημονικές εφαρμογές υπολογιστών. Εάν οι προγραμματιστές αντιμετωπίζουν το καθήκον να γράψουν μια συνάρτηση πολλαπλασιασμού μήτρας, τότε το 99,9% από αυτούς θα τη γράψουν κάπως έτσι:

Void matrixmult1(int size, double A, double B, double C) ( διπλό άθροισμα; for (int i = 0; i< size; i++) for (int j = 0; j < size; j++) { sum = 0.0; for (int k = 0; k < size; k++) sum += A[i][k]*B[k][j]; C[i][j] = sum; } }

Αυτός ο κώδικας επαναλαμβάνεται αυτολεξεί μαθηματικός ορισμόςπολλαπλασιασμός μήτρας. Επαναλαμβάνουμε όλα τα στοιχεία της τελικής μήτρας σειρά προς σειρά, υπολογίζοντας το καθένα ένα προς ένα. Υπάρχει μια αναποτελεσματικότητα στον κώδικα, αυτή η έκφραση B[k][j]στον πιο εσωτερικό βρόχο. Πηγαίνουμε γύρω από το matrix σικατά στήλες. Φαίνεται ότι τίποτα δεν μπορεί να γίνει γι 'αυτό και πρέπει να συμβιβαστείτε με αυτό. Υπάρχει όμως διέξοδος. Μπορείτε να ξαναγράψετε τον ίδιο υπολογισμό διαφορετικά:

Void matrixmult2(int size, double A, double B, double C) ( double r; for (int i = 0; i< size; i++) for (int k = 0; k < size; k++) { r = A[i][k]; for (int j = 0; j < size; j++) C[i][j] += r*B[k][j]; } }

Τώρα η λειτουργία φαίνεται πολύ περίεργη. Αλλά κάνει ακριβώς το ίδιο πράγμα. Μόνο που δεν υπολογίζουμε κάθε στοιχείο του τελικού πίνακα κάθε φορά, φαίνεται να υπολογίζουμε εν μέρει τα στοιχεία σε κάθε επανάληψη. Αλλά η βασική ιδιότητα αυτού του κώδικα είναι ότι στον εσωτερικό βρόχο επαναλαμβάνουμε και τους δύο πίνακες σειρά προς σειρά. Με αυτοκίνητο με Core i7 Haswellη δεύτερη λειτουργία λειτουργεί 12 φορές πιο γρήγοραγια μεγάλους πίνακες. Πρέπει να είσαι πολύ έξυπνος προγραμματιστής για να οργανώσεις τον κώδικά σου με αυτόν τον τρόπο.

Αποκλεισμός

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

Μπορούμε να το δείξουμε αυτό με ένα παράδειγμα. Ας υποθέσουμε ότι έχετε ένα κατευθυνόμενο γράφημα, που αναπαρίσταται ως πίνακας γειτνίασης. Αυτός είναι ένας τετράγωνος πίνακας μηδενικών και μονάδων, οπότε αν το στοιχείο του πίνακα με δείκτη (i, j) ίσο με ένα, τότε υπάρχει μια όψη από την κορυφή γραφήματος i έως την κορυφή j. Θέλετε να μετατρέψετε αυτό το κατευθυνόμενο γράφημα σε μη κατευθυνόμενο. Δηλαδή, αν υπάρχει πρόσωπο (i, j), τότε θα πρέπει να εμφανίζεται το αντίθετο πρόσωπο (j, i). Λάβετε υπόψη ότι εάν αντιπροσωπεύετε τον πίνακα οπτικά, τότε τα στοιχεία (i, j) και (j, i) είναι συμμετρικά ως προς τη διαγώνιο. Αυτός ο μετασχηματισμός είναι εύκολο να εφαρμοστεί στον κώδικα:

Void convert1(int size, int G) ( for (int i = 0; i< size; i++) for (int j = 0; j < size; j++) G[i][j] = G[i][j] | G[j][i]; }

Ο αποκλεισμός συμβαίνει φυσικά. Φανταστείτε ένα μεγάλο μπροστά σας τετραγωνική μήτρα. Τώρα ανατέμνω αυτόν τον πίνακα με οριζόντια και κάθετες γραμμέςγια να το αναλύσετε σε, ας πούμε, 16 ίσα μπλοκ (τέσσερις σειρές και τέσσερις στήλες). Επιλέξτε δύο συμμετρικά μπλοκ. Σημειώστε ότι όλα τα στοιχεία σε ένα μπλοκ έχουν συμμετρικά στοιχεία σε ένα άλλο μπλοκ. Αυτό υποδηλώνει ότι η ίδια λειτουργία μπορεί να εκτελεστεί σε κάθε μπλοκ με τη σειρά. Σε αυτή την περίπτωση, σε κάθε στάδιο θα εργαστούμε μόνο με δύο μπλοκ. Εάν τα μπλοκ είναι αρκετά μικρά, θα χωρέσουν στην κρυφή μνήμη υψηλού επιπέδου. Ας εκφράσουμε αυτή την ιδέα σε κώδικα:

Void convert2(int size, int G) ( int block_size = μέγεθος / 12; // χωρίζεται σε 12*12 block // φανταστείτε ότι διαιρείται χωρίς υπόλοιπο για (int ii = 0; ii< size; ii += block_size) { for (int jj = 0; jj < size; jj += block_size) { int i_start = ii; // индекс i для блока принимает значения [j] = G[i][j] | G[j][i]; } } }

Θα πρέπει να σημειωθεί ότι ο αποκλεισμός δεν θα βελτιώσει την απόδοση σε συστήματα με ισχυρούς επεξεργαστές, που κάνουν καλά την προ-ανάκτηση. Σε συστήματα που δεν κάνουν προ-ανάκτηση, ο αποκλεισμός μπορεί να βελτιώσει σημαντικά την απόδοση.

Σε μηχάνημα με επεξεργαστή Core i7 Haswellη δεύτερη συνάρτηση δεν εκτελείται πιο γρήγορα. Με αυτοκίνητο με περισσότερα απλός επεξεργαστής Pentium 2117Uεκτελείται η δεύτερη συνάρτηση 2 φορές πιο γρήγορα. Σε μηχανήματα που δεν κάνουν προ-ανάκτηση, η απόδοση θα βελτιωνόταν ακόμη περισσότερο.

Ποιοι αλγόριθμοι είναι πιο γρήγοροι;

Όλοι ξέρουν από μαθήματα αλγορίθμων τι να επιλέξουν καλόςαλγόριθμους με τη μικρότερη πολυπλοκότητα και αποφυγή κακόςαλγόριθμους με υψηλή πολυπλοκότητα. Αλλά αυτές οι δυσκολίες αξιολογούν την εκτέλεση του αλγορίθμου σε μια θεωρητική μηχανή που δημιουργήθηκε από τη σκέψη μας. Σε πραγματικές μηχανές, ένας θεωρητικά κακός αλγόριθμος μπορεί να εκτελεστεί πιο γρήγορα από έναν θεωρητικά καλό. Θυμηθείτε ότι η λήψη δεδομένων από τη μνήμη RAM διαρκεί 200 κύκλους ρολογιού και από την κρυφή μνήμη πρώτου επιπέδου 4 κύκλους ρολογιού - αυτό είναι 50 φορές πιο γρήγορο. Εάν ένας καλός αλγόριθμος αγγίζει συχνά τη μνήμη και ένας κακός αλγόριθμος τοποθετεί τα δεδομένα του στην κρυφή μνήμη, ο καλός μπορεί να τρέχει πιο αργά από τον κακό. Επίσης, ένας καλός αλγόριθμος μπορεί να έχει χειρότερη απόδοση σε έναν επεξεργαστή από έναν κακό. Για παράδειγμα, ένας καλός αλγόριθμος εισάγει εξάρτηση δεδομένων και δεν μπορεί να φορτώσει τη διοχέτευση, αλλά ένας κακός αλγόριθμος δεν έχει αυτό το πρόβλημα και τον στέλνει στη διοχέτευση σε κάθε κύκλο ρολογιού. νέες οδηγίες. Με άλλα λόγια, η πολυπλοκότητα του αλγορίθμου δεν είναι το παν. Πώς θα εκτελεστεί ο αλγόριθμος συγκεκριμένο αυτοκίνητομε συγκεκριμένα θέματα δεδομένων.

Ας φανταστούμε ότι πρέπει να εφαρμόσετε μια ουρά ακέραιου αριθμού και νέα στοιχεία μπορούν να προστεθούν σε οποιαδήποτε θέση στην ουρά. Μπορείτε να επιλέξετε ανάμεσα σε δύο υλοποιήσεις: πίνακα και συνδεδεμένη λίστα. Για να προσθέσετε ένα στοιχείο στη μέση ενός πίνακα, πρέπει να μετακινήσετε τον μισό πίνακα προς τα δεξιά, κάτι που απαιτεί γραμμικό χρόνο. Για να προσθέσετε ένα στοιχείο στη μέση της λίστας, πρέπει να περπατήσετε κατά μήκος της λίστας μέχρι τη μέση, κάτι που απαιτεί επίσης γραμμικό χρόνο. Νομίζεις ότι αφού έχουν τις ίδιες δυσκολίες, καλύτερα να επιλέξεις λίστα. Επιπλέον, η λίστα έχει μια καλή ιδιοκτησία. Η λίστα μπορεί να μεγαλώσει χωρίς όριο, αλλά ο πίνακας θα πρέπει να επεκταθεί όταν γεμίσει. Ας φανταστούμε ότι το μήκος της ουράς είναι 1000 στοιχεία και πρέπει να εισαγάγουμε ένα στοιχείο στη μέση της ουράς. Τα στοιχεία της λίστας είναι τυχαία διασκορπισμένα στη μνήμη και η ανάκτηση δεδομένων από τη μνήμη διαρκεί 200 κύκλους ρολογιού. Επομένως, για να μετακινήσουμε 500 στοιχεία, θα χρειαστούμε 500*200=100"000 κύκλους ρολογιού. Ο πίνακας βρίσκεται διαδοχικά στη μνήμη, κάτι που θα μας επιτρέψει να απολαμβάνουμε την ταχύτητα της κρυφής μνήμης πρώτου επιπέδου με χρόνο πρόσβασης 4 κύκλων ρολογιού. Χρησιμοποιώντας πολλές βελτιστοποιήσεις, μπορούμε να μετακινήσουμε στοιχεία ξοδεύοντας 1-4 κύκλους ανά στοιχείο. 50 φορές.

Εάν στο προηγούμενο παράδειγμα όλες οι προσθήκες ήταν στην κεφαλή της ουράς, μια εφαρμογή συνδεδεμένης λίστας θα ήταν πιο αποτελεσματική. Εάν ορισμένες από τις προσθήκες ήταν κάπου στη μέση της ουράς, η υλοποίηση του πίνακα θα μπορούσε να γίνει καλύτερη επιλογή. Θα ξοδεύαμε κύκλους σε ορισμένες λειτουργίες και θα εξοικονομούσαμε κύκλους σε άλλες λειτουργίες. Και στο τέλος θα μπορούσαν να καταλήξουν να κερδίσουν. Όλες οι πτυχές κάθε συγκεκριμένης κατάστασης πρέπει να λαμβάνονται υπόψη.

Σύναψη

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

Οι προγραμματιστές που κατανοούν τη φύση της ιεραρχίας της μνήμης μπορούν να δομήσουν τα προγράμματά τους έτσι ώστε τα δεδομένα να τοποθετούνται όσο πιο ψηλά γίνεται στην ιεραρχία, έτσι ώστε ο επεξεργαστής να έχει πρόσβαση σε αυτά γρηγορότερα.

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

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

Ωστόσο, εάν γράψετε δεδομένα στη μνήμη "σωστά" και τα διαγράψετε από εκεί περιττές πληροφορίεςτίποτα δεν μπορεί να σας εμποδίσει να το απολαύσετε υψηλές ταχύτητεςΑπόδοση RAM:

  • Χρησιμοποιώντας το βοηθητικό πρόγραμμα Dataram RAMDisk, μπορείτε να χρησιμοποιήσετε μέρος της μνήμης RAM σας ως σκληρό δίσκο.
  • Στο δικό μας οδηγίες βήμα προς βήμαπαρακάτω" Ρύθμιση ενός δωρεάν δίσκου RAMDisk» δείχνουμε πώς μπορείτε να δημιουργήσετε και να προσαρμόσετε μικρό μέγεθοςμονάδα flash στη μνήμη RAM. Σχετικά με το πώς μπορείτε να χρησιμοποιήσετε έναν τέτοιο δίσκο, για παράδειγμα, για να αποθηκεύσετε μια προσωρινή μνήμη Πρόγραμμα περιήγησης Firefox, θα σας πούμε μέσα τις παρακάτω οδηγίες « Τοποθετούμε την προσωρινή μνήμη του προγράμματος περιήγησης στο δίσκο RAM».
  • Με τη χρήση δωρεάν πρόγραμμαΜε το CleanMEM μπορείτε να αφαιρέσετε αυτόματα ή μη αυτόματα δεδομένα από τη μνήμη RAM σας.

Αύξηση του μεγέθους της μνήμης RAM

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

  • Μιλάμε για το πώς να προσδιορίσετε τον τύπο της μνήμης RAM που χρησιμοποιείται στον υπολογιστή σας και να μάθετε τον αριθμό των δωρεάν υποδοχών. Με αυτόν τον τρόπο μπορείτε να μάθετε τι RAM και πόση μπορεί να εγκατασταθεί στην περίπτωσή σας.
  • Σας δίνουμε επίσης οδηγίες για το πώς μπορείτε να εγκαταστήσετε νέα μνήμη RAM.
  • Στην περίπτωση των φορητών υπολογιστών, η αντικατάσταση μεμονωμένων εξαρτημάτων μπορεί να είναι κάπως πιο δύσκολη. Ωστόσο, είναι να σκληρούς δίσκουςκαι τις μονάδες μνήμης, μπορείτε συνήθως να έχετε πρόσβαση σε αυτές μέσω ειδικών «θυρών σέρβις» που ανοίγουν χωρίς να χρειάζεται πλήρης αποσυναρμολόγησηπεριβλήματα. Σε αυτό το άρθρο σας δίνουμε.
  • Δώστε προσοχή στους όρους της εγγύησης στον υπολογιστή σας - εάν θα χαθεί όταν ανοίξει η θήκη. Εάν έχετε αμφιβολίες, θα ήταν καλύτερα να προσλάβετε έναν ειδικό για την εγκατάσταση εξαρτημάτων ή την αντικατάστασή τους.

Τοποθετούμε την προσωρινή μνήμη του προγράμματος περιήγησης στο δίσκο RAM:

Ρύθμιση ενός δωρεάν δίσκου RAMDisk

1 Δωρεάν βοηθητικό πρόγραμμα


Με το Starwind RAMDisk μπορείτε να ρυθμίσετε έναν ή περισσότερους δίσκους RAM για Windows δωρεάν. Ο μόνος περιορισμός: το μέγεθος κάθε τέτοιου δίσκου RAM δεν μπορεί να υπερβαίνει το 1 GB.

2 Μπορεί να χρειαστεί οδηγός


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

3 Ανασκόπηση δίσκων RAM


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

4 Προσθήκη δίσκου RAM


Για να προσθέσετε και να διαμορφώσετε έναν νέο δίσκο RAM, κάντε κλικ στο στοιχείο "Προσθήκη συσκευής".

5 Ένας βοηθός θα σας βοηθήσει με τη ρύθμιση


Ένας «βοηθός» έρχεται αμέσως να σε βοηθήσει και θα σε βοηθήσει να περάσεις τα πιο σημαντικά βήματα.

6 Όριο 1 GB


Στην περίπτωση μιας έκδοσης του προγράμματος που διανέμεται ελεύθερα, το μέγεθος του δίσκου RAM δεν μπορεί να υπερβαίνει το 1 GB. Ωστόσο, στις περισσότερες περιπτώσεις αυτό θα πρέπει να είναι αρκετό. Για διαφορετικές ενέργειεςμπορείτε να χρησιμοποιήσετε διαφορετικούς δίσκους RAM. Σημαντικό: βεβαιωθείτε ότι έχετε επιλέξει το πλαίσιο δίπλα στην επιλογή "Αυτόματη προσάρτηση αυτής της συσκευής", ώστε κάθε φορά που γίνεται επανεκκίνηση του συστήματος, ο δίσκος RAM να εμφανίζεται αυτόματα στον Explorer.

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

Σε τι βασίζεται η δημοτικότητα των βελτιστοποιητών μνήμης;

Η δημοτικότητα των βελτιστοποιητών μνήμης βασίζεται στην πεποίθησή μας ότι είναι μικρό ελεύθερη μνήμη- αυτό είναι πολύ κακό. Αν και στην πραγματικότητα δεν υπάρχει τραγωδία σε αυτό, γιατί είναι καλό! Αυτό μπορεί να φαίνεται περίεργο, αλλά είναι αλήθεια.

Τι είναι η «ελεύθερη μνήμη»;

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

Τι είναι η προσωρινή μνήμη;

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

Ως αναλογία, μπορούμε να δώσουμε ένα παράδειγμα με την προσωρινή μνήμη του προγράμματος περιήγησης, η οποία είναι αποθηκευμένη στον σκληρό δίσκο του υπολογιστή (γραφικά, στυλ, σενάρια, κινούμενα σχέδια flash, κ.λπ.). Η φόρτωση όλων αυτών των δεδομένων από το Διαδίκτυο για κάθε σελίδα θα ήταν πολύ άχρηστη και χρονοβόρα. Γιατί τα πάντα σύγχρονα προγράμματα περιήγησηςκρατούν αυτά τα «βαριά» δεδομένα στον σκληρό δίσκο και φορτώνουν μόνο το κύριο περιεχόμενο, γεγονός που επιταχύνει σημαντικά την εμφάνιση των σελίδων για τον χρήστη. Μια παρόμοια αρχή χρησιμοποιείται κατά την εργασία προσωρινή μνήμη συστήματος, το οποίο αποθηκεύεται στη μνήμη RAM για γρήγορη πρόσβαση στα δεδομένα.

Ως εκ τούτου, αξίζει να αλλάξετε τις απόψεις σας για τη μνήμη: στα νέα λειτουργικά συστήματα, η έννοια της «ελεύθερης μνήμης» είναι συνώνυμη με τη μάταιη σπατάλη πόρων. Αυτό είναι απλώς ένα απόθεμα ώστε το σύστημα να το δώσει στην επόμενη εφαρμογή για λίγο μέχρι να ελευθερωθεί απασχολημένη μνήμη. Τα Windows θα το κυκλοφορήσουν μόνα τους απαιτείται από την αίτησητην ποσότητα της μνήμης RAM από τα δεδομένα προσωρινής αποθήκευσης ή τη μεταφορά δεδομένων από προγράμματα που χρησιμοποιούνται σπάνια στο αρχείο ανταλλαγής.

Παρατηρήστε ότι τα κάνει όλα αυτά λειτουργικό σύστημαανεξάρτητα, χωρίς τη βοήθεια βελτιστοποιητών. Τότε γιατί χρειάζονται τέτοια «καθαριστικά μνήμης» και «ενισχυτές»;

Πώς λειτουργούν τα βοηθητικά προγράμματα απελευθέρωσης μνήμης;

Υπάρχουν μόνο δύο βασικές αρχές της δουλειάς τους:

  • Χρησιμοποιούν τη συνάρτηση EmptyWorkingSet από Windows API. Αυτή η λειτουργία κάνει αναγκαστική επαναφοράαχρησιμοποίητα δεδομένα από τη μνήμη στο αρχείο σελίδας στον σκληρό δίσκο του υπολογιστή. Οπτικά, η ποσότητα της ελεύθερης μνήμης στη διαχείριση εργασιών θα αυξηθεί, αλλά θα τρέχουν τα προγράμματα πιο γρήγορα; Σίγουρα όχι. Επειδή η ταχύτητα ανάγνωσης από το δίσκο είναι πολύ χαμηλότερη από την ταχύτητα ανάγνωσης από τη μνήμη RAM του υπολογιστή.
  • Η δεύτερη μέθοδος «καθαρισμού μνήμης» είναι ότι η εφαρμογή βελτιστοποίησης απαιτεί πολλή μνήμη από το σύστημα. Το ίδιο το σύστημα απελευθερώνει τη μνήμη από την κρυφή μνήμη και τα αχρησιμοποίητα δεδομένα. Αλλά μετά από δέκα λεπτά Τα Windows θα καταλάβουνότι το πρόγραμμα βελτιστοποίησης δεν χρειάζεται αυτή τη μνήμη και θα την επιστρέψει στην κρυφή μνήμη και τα δεδομένα άλλων προγραμμάτων.

Τι μπορείτε να κάνετε για να βοηθήσετε πραγματικά το σύστημά σας με τη βελτιστοποίηση της μνήμης;

Η απάντηση είναι απλή - απλώς μην παρεμβαίνετε στα Windows και ακολουθήστε απλές συμβουλές.

  • Προσπαθήστε να μην εκτελείτε πάρα πολλές εφαρμογές σε αδράνεια. Υπάρχουν χρήστες που μετά την επεξεργασία κειμένου δεν κλείνουν Παράθυρο λέξεων. Και επεξεργάζονται πολλά έγγραφα την ημέρα και όλα κρέμονται στο παρασκήνιο και «τρώνε» τη μνήμη.
  • Αφαιρώ περιττές εφαρμογέςαπό τον υπολογιστή, ειδικά αν μένουν στην εκκίνηση.
  • Προσθέστε φυσική μνήμη εάν το επιτρέπει ο υπολογιστής σας. Το κόστος της μνήμης RAM είναι πλέον πολύ προσιτό, και θα δείτε το αποτέλεσμα της αύξησης της μνήμης αμέσως!

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

Ένα από τα πιο ενοχλητικά πράγματα για τα Windows είναι ότι μπορεί να παγώσει για λίγα δευτερόλεπτα, κάνοντας ξέφρενα κάτι στο δίσκο. Ένας από τους λόγους είναι ο τρόπος με τον οποίο τα Windows λειτουργούν με την εικονική μνήμη του δίσκου από προεπιλογή. Τα Windows φορτώνουν προγράμματα οδήγησης και εφαρμογές στη μνήμη μέχρι να γεμίσει και, στη συνέχεια, αρχίζουν να χρησιμοποιούν μέρος του σκληρού δίσκου για να «ανταλλάσσουν» πληροφορίες, ελευθερώνοντας τη μνήμη RAM για εργασίες υψηλότερης προτεραιότητας. Το αρχείο που χρησιμοποιούν τα Windows για αυτόν τον τύπο " εικονική μνήμη» αρχείο σελιδοποίησης pagefile.sys - αποθηκευμένο σε ριζικός κατάλογοςδίσκος.
Επειδή σκληρό δίσκολειτουργεί πιο αργά από τη φυσική RAM, λοιπόν περισσότερα Windowsτόσο πιο αργά λειτουργεί ο υπολογιστής. Αυτός είναι ο λόγος για τον οποίο η προσθήκη RAM κάνει τα πράγματα πιο γρήγορα - μειώνει την ανάγκη για εικονική μνήμη. Ανεξάρτητα από τον όγκο των εγκατεστημένων φυσική μνήμηΥπάρχει τρόπος να βελτιώσετε την απόδοση της εικονικής μνήμης. Ρυθμίσεις των Windowsοι προεπιλογές είναι αρκετά συντηρητικές, αλλά ευτυχώς μπορούν να αλλάξουν για να βελτιώσουν την απόδοση. Είναι σημαντικό να θυμάστε ότι τα πειράματα με τέτοιες ρυθμίσεις δικαιολογούνται μόνο για συστήματα με ογκομετρική σκληρούς δίσκουςόταν μπορεί να εκχωρηθεί περισσότερη εικονική μνήμη χώρο στο δίσκο.
Μέρος 1: Ρυθμίσεις εικονικής μνήμης
Ένας λόγος που οι προεπιλεγμένες ρυθμίσεις οδηγούν σε κακή απόδοση είναι επειδή το αρχείο σελίδας μεγαλώνει και συρρικνώνεται με τη χρήση, κατακερματίζοντας γρήγορα. Το πρώτο βήμα είναι να διορθώσετε αυτό το πρόβλημα με την εγκατάσταση σταθερό μέγεθοςαρχείο ανταλλαγής.
Σημειώστε ότι η δημιουργία ενός αρχείου σταθερής σελίδας θα παρέχει μια πιο σταθερή ποσότητα ελεύθερου χώρου στο δίσκο. Εάν ο σκληρός σας δίσκος είναι γεμάτος, σταματήστε τη χρήση των Windows τελευταίο κομμάτιελεύθερο χώρο.
1. Στον Πίνακα Ελέγχου, ανοίξτε τη σελίδα System και κάντε κλικ στη σύνδεση Πρόσθετες επιλογέςσυστήματα.
2. Στην καρτέλα Για προχωρημένους, στην ενότητα Απόδοση, κάντε κλικ στο κουμπί Ρυθμίσεις.
3. Στη σελίδα Ρυθμίσεις απόδοσης, επιλέξτε την καρτέλα Για προχωρημένους και, στη συνέχεια, κάντε κλικ στο Αλλαγή για να ανοίξετε το παράθυρο Εικονική μνήμη.
4. Απενεργοποιήστε την επιλογή Αυτόματη επιλογή μεγέθους αρχείου σελιδοποίησης για πρόσβαση στις ρυθμίσεις σε αυτό το παράθυρο.
5. Οι ρυθμίσεις εικονικής μνήμης ρυθμίζονται ξεχωριστά για κάθε δίσκο. Εάν έχετε μόνο μία μονάδα δίσκου, η εικονική μνήμη είναι ήδη ενεργοποιημένη για αυτήν τη μονάδα. Εάν χρησιμοποιείτε περισσότερους από έναν δίσκους ή διαμερίσματα, η εικονική μνήμη θα είναι ενεργοποιημένη από προεπιλογή μόνο στη μονάδα δίσκου των Windows. Ξεκινήστε με τον δίσκο δηλαδή παρούσα στιγμήπεριέχει το αρχείο ανταλλαγής.
Ένας άλλος τρόπος για να αποτρέψετε τα Windows από τη μεγάλη χρήση του σκληρού σας δίσκου είναι να απενεργοποιήσετε την εικονική μνήμη. Μια ακόμη καλύτερη ιδέα θα ήταν να μετακινήσετε το αρχείο ανταλλαγής σε άλλο φυσικό δίσκο, σε αυτή την περίπτωση με Τα Windows λειτουργούνμε την εικονική μνήμη, η διαδικασία δεν θα απορροφήσει όλο τον χυμό από τον κύριο δίσκο του υπολογιστή,
6. Για να ορίσετε ένα σταθερό μέγεθος εικονικής μνήμης, επιλέξτε Καθορισμός μεγέθους και, στη συνέχεια, εισαγάγετε την ίδια τιμή Αρχικό μέγεθοςκαι σε Μέγιστο μέγεθος.
Καθορίστε μόνοι σας την ένταση. Εάν υπάρχει χώρος στο δίσκο, τότε διαθέστε χώρο 2-3 φορές την ποσότητα της εγκατεστημένης μνήμης RAM. Μπορείτε να πειραματιστείτε με διάφορα μεγέθηπροκειμένου να προσδιοριστεί η καταλληλότερη.
7. Σημαντικό: Αφού κάνετε τις αλλαγές σας, κάντε κλικ στο Set ή στο OK για να πραγματοποιήσετε τις αλλαγές πριν μεταβείτε σε άλλη μονάδα δίσκου.
8. Κάντε κλικ στο OK σε καθένα από τα τρία ανοιχτά παράθυρα διαλόγου.
Εάν απλώς αλλάξατε τα μεγέθη των αρχείων σελιδοποίησης, η αλλαγή θα τεθεί σε ισχύ αμέσως. Αλλά αν έχετε προσθέσει ένα αρχείο σελίδας σε οποιαδήποτε μονάδα δίσκου, θα χρειαστεί να κάνετε επανεκκίνηση των Windows για να μπορέσετε να χρησιμοποιήσετε τις νέες ρυθμίσεις.
Μέρος 2: Ανασυγκρότηση του αρχείου σελίδας
Τα βήματα στην προηγούμενη ενότητα θα εξαλείψουν την πιθανότητα κατακερματισμού του αρχείου σελίδας, αλλά δεν θα το διορθώσουν εάν είναι ήδη κατακερματισμένο. Για καλύτερη απόδοσηΗ εικονική μνήμη πρέπει να ανασυγκροτηθεί, αλλά εάν το αρχείο σελίδας είναι σταθερού μεγέθους, τότε αυτό πρέπει να γίνει μόνο μία φορά. Υπάρχουν διάφοροι τρόποι ανασυγκρότησης του αρχείου σελίδας:
Χρησιμοποιήστε το PerfectDisk
Χρησιμοποιήστε το προηγμένο πρόγραμμα ανασυγκρότησης PerfectDisk. Δώστε του την εντολή για ανασυγκρότηση αρχεία συστήματος, και θα προγραμματίσει την ανασυγκρότηση όταν επόμενη εκτόξευση Windows.



Συνιστούμε να διαβάσετε

Κορυφή