3. Übung zur Vorlesung Systemprogrammierung II

Transcription

3. Übung zur Vorlesung Systemprogrammierung II
UNIVERSITÄT ULM
Fakultät für Informatik
Verteilte Systeme
Prof. Dr. Peter Schulthess
Ralph Göckelmann
Stefan Frenz
3. Übung zur Vorlesung Systemprogrammierung II
Abgabe per eMail ([email protected]) bis spätestens 09.12.2003 vor den Übungen
Aufgabe 1: Cacheperformance (4 Punkte)
In dieser Aufgabe sollen Sie die Ausführungszeiten von Speicherzugriffen mit und ohne Caches ermitteln.
Die Messungen sollen auf dem Speicherbereich von 0x80000 bis 0x9FFFF stattfinden. Hierfür stehen Ihnen
folgende Methoden zur Verfügung:
public static void SetMemory4(int logAddress, int value, int bytes)
// Beschreibt den Speicherbereich logAddress bis (logAddress+bytes*4 -1)
// mit dem Dword value
public static void GetMemory4(int logAddress, int bytes)
// Liest den Speicherbereich logAddress bis (logAddress+bytes*4 -1)
public static void WBINVD()
// Schreibt veränderte cachelines zurück und invalidiert den Cache
(Eine erweiterte Klasse Intel486.java finden Sie auf der Abteilungsseite)
Achtung: Nach jedem umschalten der Cachestrategie müssen die Caches mittels WBINVD() invalidiert
werden !
a) Ermitteln Sie mittels RDTSC die Ausführungszeit von SetMemory und GetMemory, wenn der gesamte
Speicherbereich gelesen bzw. geschrieben wird.
b) Schalten Sie mittels der Kontrollregister alle Caches ab und wiederholen Sie die Messung.
c) Schalten Sie nun mittels der MSR Register nur den L2-Cache ab und messen Sie die benötigte
Ausführungszeit.
d) Vergleichen und bewerten Sie die erhaltenen Messwerte.
Aufgabe 2: Cachestrategien (7 Punkte)
In dieser Aufgabe sollen Sie mittels der MTRR die Cachestrategien für den Speicherbereich von 0x80000
bis 0x9FFFF festlegen und die Schreib- bzw. Leseperformance ermitteln.
a) Setzten Sie hierfür die Cachestrategie für diesen Bereich auf
– Uncacheable
– Write-Combining
– Write-Through
– Write-Protected
– Write-Back
und ermitteln Sie jeweils die benötigte Ausführungszeit um den gesamten Speicherbereich zu lesen bzw. zu
schreiben. Invalidieren Sie nach jedem umschalten der Cachestrategie alle Caches.
b) Wiederholen Sie die Messungen aus a). Lesen Sie vor Beginn der jeweiligen Messung den
Speicherbereich einmal vollständig aus.
c) Vergleichen und bewerten Sie die Messergebnisse.
d) Überlegen und implementieren Sie ein Zugriffsmuster, bei dem WriteBack und WriteCombining
besonders effektiv sind. Messen Sie hierfür die Ausführungszeiten. Begründen Sie das gewählte Muster.
e) Wie wirken Sich die MTRR auf die Performance aus, wenn Bit 30 im CR0 Register auf 1 gesetzt ist?
Bemerkung: Für Aufgabe 1 und 2 gilt, daß kein Paging verwendet wird und somit die logische
Adresse gleich der physikalische Adresse ist.
Aufgabe 3: Performancemonitoring (4 Punkte)
Ermitteln Sie für nachfolgendes Programm die Anzahl der
– dekodierten Instruktionen
– ausgeführten Instruktionen
– falsch vorhergesagten Sprünge
– ausgeführten Sprünge
– Sprünge, für die der BTB keine Entscheidung erbrachte
int a(int i){
i++;
return i;
}
void b{
int i,j;
for(i=0;i<10;i++){
if((i%2)==0) j=a(i);
}
}

Documents pareils