Ü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