Übung „Nichtsequentielle Programmierung“ - auf Matthias

Werbung
Übung
„Nichtsequentielle Programmierung“
Sommer 2009
Prof. Dr. Marcel Kyas
Blatt 1
Aufgabe 1 (ohne Punkte)
Ermitteln Sie die Eigenschaften der Mehrprozessormaschinen, auf die sie Zugriff haben. Wie
viele Prozessoren/Kerne hat jede einzelne Maschine und was sind deren Taktfrequenzen? Wie
groß sind deren caches und wie sind diese organisiert? Wie viel Hauptspeicher haben diese
Maschinen? Was ist die Zugriffszeit? Welches Speicherkonsistenzprotokoll (memory consistency protocol) wird benutzt? Wie wird die Verbindung zwischen den Prozessoren/Kernen
hergestellt? Wie lange dauert es, eine Nachricht zwischen den Prozessoren auszutauschen,
bzw. auf entfernten Speicher zuzugreifen? Können auch die Grafikkarten zu Berechnungen
benutzt werden? Wie lauten die Antworten für diese?
Aufgabe 2 (ohne Punkte)
Informiere Sie sich über innere Klassen, anonyme Klassen, und wie diese auf Attribute und
Variablen in dem Geltungsbereich ihrer Definition zugreifen dürfen. Schreiben Sie eine kurze
Zusammenfassung, die genau erklären, was alles bei der Benutzung von inneren und anonymen Klassen zu beachten ist und wie man sie benutzen kann.
Aufgabe 3 (10 Punkte)
Betrachten Sie das Java-Programm in Abbildung 1.
1. Schreiben Sie dass Programm so um, dass die at-most-once Eigenschaft eingehalten
wird.
2. Zählen Sie alle möglichen Werte für I.x nach terminieren des Programms auf.
3. Welche der unter 2. aufgezählten Ergebnisse sind nicht möglich, wenn wir annehmen,
dass alle Anweisungen atomar ausgeführt werden? Begründen Sie Ihre Antwort.
1
class I {
public static volatile int x = 0;
}
public class Main {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.start();
b.start();
System.out.println("Result = " + I.x);
}
}
class A extends Thread {
public void run() {
for (int i = 1; i <= 5; ++i)
I.x = I.x + 1;
}
}
class B extends Thread {
public void run() {
I.x = 2 ∗ I.x;
}
}
Abbildung 1: Programm zur Aufgabe 2
Aufgabe 4 (10 Punkte)
Betrachten Sie das Java-Programm in Abbildung 2.
1. Hält dieses Programm die Kriterien der at-most-once-Eigenschaft ein? Begründen Sie
Ihre Antwort.
2. Terminiert dieses Programm? Immer? Manchmal? Nie? Begründen Sie Ihre Antwort.
Nehmen Sie an, dass der Wert einer jeden Variable erst in ein lokales Register geladen
werden muss, bevor darauf operiert werden kann, und dass Werte nur aus Registern
wieder in die Variable geschrieben werden können.
Aufgabe 5 (Programmieraufgabe)
Schreiben Sie ein sequentielles und rekursives Programm, das den Quicksort Algorithmus
implementiert, um ein Feld mit n ganzen Zahlen sortiert. Dann verändern Sie Ihr Programm
so, dass es rekursive Nebenläufigkeit benutzt. Achten Sie darauf, dass die rekursiven Aufrufe
von einander unabhängig sind. Implementieren Sie beide Programme und vergleichen Sie
deren Geschwindigkeit.
Abgabe
Die Lösungen der Aufgaben 1 bis 3 sind bis zum 22. April, 16:00 Uhr, beim jeweiligen Tutor
abzugeben. Die Lösung der Aufgabe 4 ist zum 29. April, 16:00 Uhr, beim Tutor abzugeben.
2
class I {
public static volatile int x = 0;
public static volatile int y = 10;
}
class B extends Thread {
public void run() {
while (I.x != I.y)
I.y = I.y − 1;
}
}
class A extends Thread {
public void run() {
while (I.x != I.y)
I.x = I.x + 1;
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.start();
b.start();
}
}
Abbildung 2: Programm zur Aufgabe 3
3
Herunterladen