ERASMUS Bericht

Nachdem ich nun mittlerweile wieder zurück in Deutschland bin, ist es Zeit für den obligatorischen ERASMUS-Bericht. Anbei findet ihr das PDF für meine Hochschule, aber auch ein paar persönliche Meinungen von mir zu den Vorlesungen die besucht habe. Ich hoffe es hilft euch.

TDDB68 Concurrent programming and Operating Systems (Bachelor)

Diese Vorlesung war meine einzige Bachelor-Vorlesung. Sie wird für die Vorlesung “Multicore and GPU Programming” als Voraussetzung angegeben (was aber für ERASMUS-Studenten formell egal ist). Jedoch wollte ich etwas ins Thema und in C-Programmierung reinkommen.
Die Vorlesung ist fundiert und orientiert sich stark am Buch “Operating System Concepts” von Silberschatz. Ich empfehle das Buch sehr, man kann es wirklich günstig gebraucht kaufen.
Das wirklich interessante an der Vorlesung sind aber die Labs. Hierbei arbeitet man an Pintos, einem kleinen Operating System, dass in einer VM läuft. Pintos ist sehr einfach und umfasst nur ein paar tausend Zeilen C-Code. In den Labs wird dieses System erweitert. Man muss beispielsweise System Calls implementieren oder etwas im Prozess-Scheduler verbessern.
Die Labs sind gut dokumentiert und machen Spaß. Am Anfang braucht man etwas Zeit um sich zurecht zu finden, aber ich finde es lohnt sich. Wer die Labs rechtzeitig besteht bekommt außerdem Bonus-Punkte für die Klausur. Man sollte aber definitiv programmieren können und etwas C kennen.

TDDB84 Design Patterns (Master)

Diese Vorlesung befasst sich relativ klassisch mit dem Thema Design Patterns. Alles orientiert sich demnach auch am Buch “Design Patterns” der GoF. Die Vorlesung nimmt jedes Pattern einzeln durch, bespricht Vor- und Nachteile, sowie Beispiele. In den Labs werden einige ausgewählte Pattern mit kleinen Beispielen in Java programmiert.
Die Vorlesung hat Spaß gemacht und war außerdem recht einfach. Die Labs und die Klausur gehen locker von der Hand. Der Prof ist zudem ein Phänomen. Ihr werdet gut unterhalten und bekommt sicher einige Geschichten aus dem Silicon Valley oder der NASA zuhören.

TDDB44 Compiler Construction (Master)

Bei dieser Vorlesung bin ich etwas zwiegespalten. Die Vorlesung an sich ist relativ schlecht. Es wird sich am Buch “Compilers: Principles, Techniques, and Tools” von Alfred V. Aho orientiert und das Thema Stück für Stück besprochen. Automatentheorie, Regex, Sprachen, Alphabete, Parser… blabla. Alles ist relativ banal, aber gleichzeitig schlecht erklärt. Über den theoretischen Grundbau kommt die Vorlesung nicht hinaus. Wer sich für Konzepte wie Objektorientierung, Garbage Collection, Optimierung oder ähnliches interessiert ist hier falsch.
Auf der anderen Seite sind aber die Labs. Diese sind unglaublich gut dokumentiert (mit ca. 130 Seiten) und machen durchweg Spaß. Es waren die besten Labs die ich bisher in meinem Studium hatte. Die Aufgabenstellung ist klar, die Lösung meist schwierig, aber genau so, dass man selbst dahinter kommt und nicht entnervt aufgibt.
Wer sich für das Thema interessiert sollte es machen, denn der theoretische Teil wird wohl überall gleich sein. Wer nur mal reinschnuppern möchte wird enttäuscht sein.

TDDD56 Multicore and GPU Programming (Master)

Die Vorlesung greift ein sehr aktuelles Thema der Informatik auf – allerdings nur in einer Hälfte, denn die Vorlesung ist in zwei Blöcke geteilt. Der erste Block beschäftigt sich mit einfacher Thread-Programmierung. Es geht um Synchronisierung, Kommunikation und z.B. Non-Blocking-Data-Structures. Alles ist relativ simple, wäre es nicht in C++ erklärt.
Die zweite Hälfte beschäftigt sich dann mit GPU-Programmierung. Das Thema ist gut erklärt und spannend, aber leider etwas kurz. Alles in allem spricht man ca. 3 Wochen wirklich über GPUs. Dafür könnte man sich auch einfach ein paar Tutorials durchlesen. Aber, die Vorlesung ist gut gemacht, was vor allem an den zwei Professoren liegt.
Die Labs sind hingegen schlicht nervig. Die Code-Vorlagen sind riesig (für winzige Beispiele) und voller Fehler. Außerdem gibt es zisch Skripte um Grafiken zu generieren die garantiert nicht funktionieren. Die Aufgaben sind teils nicht eindeutig beschrieben und es macht wirklich keinen Spaß.
Ich war enttäuscht von dieser Vorlesung, bin aber auf der anderen Seite ganz froh mal etwas über GPU-Programmierung gehört zu haben. Schade dass man nicht mehr daraus gemacht hat.

Swedish for Foreign Students (egal)

Klassiker. Schwedisch in Schweden zu lernen gehört einfach dazu. Mein Tipp ist aber einen Anfängerkurs schon vorab in Deutschland zu machen. Schwedisch ist zwar einfach (gerade für Deutsche), aber so einfach nun auch wieder nicht. Wer hingegen schon etwas Schwedisch kann, kann hier ganz entspannt mitschwimmen und seine Kenntnisse noch ein wenig verbessern. Andernfalls werdet ihr sicher einige Nachmittage Verben und Substantive mit “a” und “ar” und “en” versehen bis ihr nicht mehr wisst was Singular und Plural ist.
Der Kurs macht aber Spaß und ihr lernt viele andere Austauschstudenten kennen. Ein Muss.

Download: ERASMUS Bericht.pdf

Ich hoffe euch helfen meine Einschätzungen und Kommentare ein wenig weiter. Ich bin insgesamt sehr zufrieden mit meinem Studium gewesen und – bei aller Kritik – auch mit meinen Vorlesungen.

Beste Grüße,
Thomas Uhrig

Hej då Sverige!

After almost 5 months Linköping University in Sweden, it’s time for me to leave and go home again. The tickets for the ferry are already booked as well as a cheap hostel in the middle of Hamburg – I think this stop will be fun.

Here are some last pictures from Lappland, Västerås and Linköping itself. Enjoy, I did it.

Best regards,
Thomas Uhrig

Calculating Mandelbrot Set with Java Tasks

Last week, my new courses for the second period of this semester started. Since one of the courses is about multicore and GPU programming, I wanted to prepare myself a little bit. As a small practice for our first lab next Thursday, I implemented the Mandelbrot set in Java. I used tasks to draw the picture in parallel and made some measurements.

Java tasks are a more lightweight version of threads and enable a straight divide-and-conquer way of programming. They are one of the new features in Java 7 and work like this:

  1. Create a task by implementing the functional interface RecursiveAction or RecursiveTask.

  2. Call the invoke-method on an instance of the class ForkJoinPool to execute the task and to wait for it.

To create and invoke a new task is quite easy (and by passing Lambda-functions in Java 8, it will be even more easy).

In my implementation (see https://wordless@bitbucket.org/wordless/mandelbrot), I used 4 tasks since my laptop has 4 cores. Each task draws one or more rows of the image. I implemented two different load management strategies, since the computation of the “black” parts of the image is more time consuming then the computation of the “blue” parts. Both load management strategies are visualized in the image below.
In the first and very simple strategy, each task draws one big single row. Hence, the tasks at the boarders have to do less then the tasks in the center, because in the center are more black regions that are more difficult to compute.
In the second strategy, I divided the whole picture into many rows. Therefore, each task has some parts of every region.The load is balanced more equally.

The results are looking are shown in the chart below.The performance is significantly better when 2, 3 or 4 tasks are used instead of one. If I use 8, 16 or 32, the performance gets even better, however, there seems to be a limit. In this case, I also didn’t use really 8 or more tasks, I only used four. But I divided the picture into 8 rows, 16 rows or 32 rows and assigned them to the 4 tasks.

By the way, the results of my drawings are looking like this:

Best regards,
Thomas Uhrig

Halbzeit in Schweden

Wow, das ging eigentlich ziemlich schnell. Nachdem ich gestern meine zweite Klausur für diese Periode geschrieben habe, beginnt am kommenden Montag offiziell die zweite Halbzeit des Wintersemesters. Da fahren die Schweden nämlich ihren etwas eigenen Bildungsweg und unterteilen das Semester kurzerhand nochmal in zwei Hälften (inklusive je einer Klausurphasen).

Nachdem das “kleine Semesterende” aber auch mit ein paar Tagen vorlesungsfreier Zeit verbunden ist, nutze ich diese um ein paar Bilder zu posten. Die Bilder sind in den vergangenen Wochen entstanden, stammen Aus Tallinn, Norrköping, Örebro und einigen anderen Orten und haben keine spezielle Ordnung – dafür aber Kommentare.

Am 21. Dezember geht es übrigens wieder zurück mit einem kleinen Zwischenstopp in Hamburg. Die Fähre ist schon gebucht, aber falls uns noch jemand eine Schlafgelegenheit für die Nacht anbieten könnte, immer gerne. Wir sind mit dem Auto unterwegs und dementsprechend lange aus Achse.

Beste Grüße,
Thomas Uhrig

Välkommen till Linköping!

Last Monday, I arrived in Linköping, Sweden. Until December, I will do my ERASMUS semester here. I’m at the Linköping University, where I will take some courses of the Computer Science Master Program. The orientation program is starting today (in about an hour) and the actual courses will start next Monday.

Together with my girlfriend, I traveled to Sweden in the last couple of weeks. Here are some of our impressions. The pictures have no special order. They are from Germany (Düsseldrof, Münster and Rostock), Denmark (especially from Copenhagen) and Sweden.

I will not blog about every little happening, but you will probably find some of the “big news” or “great pictures” here.

Best regards,
Thomas Uhrig