Achtung: Dies ist eine historische Web-Site. Aktuell ist https://rainer.gerhards.net/ (engl) bzw https://www.rainer-gerhards.de/ (deutsch). Alle dynamischen Funktionen, Formulare etc auf dieser Seite sind abgeschaltet.
Datenschutzerklärung Impressum

 
01.08.2017, 22:49 Uhr
Hauptmenü
|--> Infos
|--> Forum
|--> Fotos


Sprachwahl
Sprache auswählen:




Online
Aktuell 1 Gast und 0 registrierte Benutzer online.

Anmeldung

Anmeldung




 





Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
Autor Nachricht
rgerhards
Titel: Ausgerichtete (aligned) Zugriffe  BeitragVerfasst am: 02.12.2009, 13:46 Uhr



Anmeldung: 25. Sep 2006
Beiträge: 688

Von mir vielleicht etwas Weiteres zur Sinnhaftigkeit ausgerichteter Speicherzugriffe.

Man betrachte Fernuni-Kurs 1608 Abbildung 4.22 (oder ein anderes Bild eine Speichermatrix, z.B. [1]) an: das ist ein bitorientierter Speicher, im Text auf Seite 200 sieht man aber, das die Organisation auch für größere Wortbreiten gleich ist (bzw. sein kann). Man beachte den matrixförmigen Aufbau. Bei heute real existierendem Hauptspeicher ist es so, dass nicht ein einzelnes Element ausgelesen wird, sondern vielmehr eine ganze Zeile. Diese Zeile wird in ein Zwischenregister "geschoben" und dort wird dann die entsprechende Spalte ausgelesen, womit der Zugriff dann endgültig abgeschlossen wird.

Hier kommt dann die Modulo-Operation ins Spiel. Nehmen wir einen Byte-adressierbaren Speicher mit einer Zeilengröße n von 4 Byte an (in der Praxis sind heute, meine ich, 64 Byte üblich). Betrachten wir nun eine beliebige Adresse A. Dann kann man diese Adresse in eine Zeilen-Adresse A_Z und eine Spaltenadresse A_S zerlegen. Dabei gilt

A_S = A mod n
A_Z = A div n (div sei das ganzzahlige Divisionsergebnis)

Ein Zugriff wäre dann auf den Zeilenanfang ausgerichtet, wenn A_Z gleich Null ist. Konkretes Beispiel:

A = 1024, n = 4
A_S = 1024 mod 4 = 0
A_Z = 1024 div 4 = 256

Nehmen wir an, dass zwei Byte an dieser Adresse gelesen werden müssen. Dann ist ein Zugriff auf die Speichermatrix notwendig, denn A_S lädt die (Inhalten der Speicherstellen an) Adressen 1024, 1025, 1026, 1027 in das Zwischenregister, darauf kann dann mit A_S zugegriffen werden. Es ist also nur ein Zugriff auf die Speichermatrix selbst erforderlich, um das 16-Bit Datum auszulesen.

Nehmen wir nun an, die Adresse ist 1023

A=1023, n=4
A_S = 1023 mod 4 = 3
A_Z = 1023 div 4 = 255

Da A_S <> 0, ist der Zugriff nicht auf den Beginn der Zeile ausgerichtet. Die gelesene Zeile umfasst damit die Adressen 1020, 1021, 1022, 1023. Von unserem 16-Bit Wert erhalten wir also zunächst einmal nur den Wert an Adresse 1023, anschließend ist ein weiterer Zugriff auf die Speichermatrix mit A_Z = 256 (wie oben!) erforderlich.

Im Ergebnis dauert der Zugriff also länger. Man kann das in einem rechenintensiven Programm durchaus auch in der Praxis bemerken. Solche "nicht ausgerichteten" Speicherzugriffe können die Laufzeit deutlich erhöhen. Ausserdem bringen sie noch eine Reihe weiterer Probleme mit sich, z.B. bei der Synchronisation von nebenläufigen Prozessen.

Zum Speicherzugriff könntest Du evtl. auch einmal in meine Präsentation zum Cache schauen, ab Folie drei die nächsten paar Folien:

http://www.gerhards.net/module-Pagesett ... -204.phtml

Für die Experten: ich habe hier versucht vertretbar zu vereinfachen und dennoch ein konkretes Anwendungsbeispiel zu erhalten. Ich bin der Meinung, dass die Aussagen korrekt sind. Allerdings wird man im Detail Korrekturen vornehmen müssen, wenn man an reale CPUs denkt...

Ich hoffe, das Beispiel ist nützlich.
Rainer

[1] http://www.weblearn.hs-bremen.de/risse/ ... memory.pdf
 
 Benutzer-Profile anzeigen Private Nachricht senden  
Antworten mit Zitat Nach oben
Beiträge vom vorherigen Thema anzeigen:     
Gehe zu:  
Alle Zeiten sind GMT + 1 Stunde
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen Druckerfreundliche Version Einloggen, um private Nachrichten zu lesen Nächstes Thema anzeigen
PNphpBB2 © 2003-2007 
:: RSS Feed: ::
Page created in 0.146482229233 seconds.

Ferientips - das Urlaubsweb - Jan Gerhards - Ulrike Gerhards - Ulrike Gerhards Foto Site