Teaching
I have been hired as Junior Professor in the Computer Science Institute of the UFRGS in March 2005. In Brazil, the universities have three missions: teaching, research and what we call “extension” (whatever activity related to the society generally speaking). For that reason, I dedicate a good part of my time to teaching, both in undergraduate courses (Computer Science and Computer Engineering) and in Master/PhD lectures.
Special lecture at the Technische Universität Berlin, 2008/10
- The pdf slides of the first lecture on Parallel Programming for High-Performance (Oct., 13th 2008).
- The pdf slides of the second lecture on Parallel Programming (Oct., 14th 2008), about PRAM complexity.
- The pdf slides of the third lecture on Parallel Programming (Oct., 15th 2008), about PRAM complexity of a few linear algebra algorithms.
- The pdf slides of the fourth lecture on Parallel Programming (Oct., 16th 2008), about models with communication costs, and domain decomposition.
- The pdf slides of the fifth lecture on Parallel Programming (Oct., 20th 2008), about the Message Passing Interface (MPI).
- The pdf specification and code of the sixth lecture on Parallel Programming (Oct., 20th 2008), which is a practical session. It will be in the room TEL 206. The TEL building is the high rise at Ernst-Reuter-Platz.
Undergraduate studies: Compilers and Operating Systems
- I am in charge, since the first semester of 2006, of the lecture in Compilers (60 hours / semester). Since it is the unique lecture in this area that we provide in our courses, it is somewhat extensive and includes lexical analysis, parsing (top-down and bottom-up), semantic analysis, code generation and optimization (it is common to find a separate course for this last part). Since 2008/2, I have complemented the theoretical lectures with a project, made up of 7 2 weeks steps, each one leading the students to build a small compiler.
This lecture is really trying, for the students and for the teacher. But it is thrilling, too. It fits with a good part of my research interests, since High-Performance Computing starts with the good use of compilers.
Here are some slides and podcasts of my lectures in Compilers. - I have lectured, during 6 semesters, in Operating Systems I, together with my colleague Prof. Carissimi. The course, of 60 hours / semester, is an introduction to the three main functions of a kernel: handling processes and threads, schedule them into the CPU; manage virtual memory; and organizing the data in file systems.
Although this lecture had a lot to deal with my research (parallel programming in shared-memory systems, and distributed platforms / MPI), I have chosen in June 2008, to dedicate myself more to Compilers and graduate lectures.
Graduate Lectures: Parallel Programming for HPC (Master and PhD)
- I give a series of lecture called “Parallel Programming for High-Performance Computing” each first semester of the year. Its introduces the classical tools: OpenMP, Posix Threads, MPI, UPC, Cilk, etc. It is a practical oriented course of 60 hours (4h pro week, during 15 weeks).
I have left here some slides on MPI and OpenMP, with a few simple examples. - In the second semester of each year, I provide a companion lecture called “Design of Parallel Algorithms”, which is much more theoretical. This time, we treat parallel models to determine the complexity of an algorithm: PRAM, BSP and LogP are the main models that are studied. At this point, I can not help citing my former PhD advisor, now colleague and friend, Jean-Louis Roch, as an inspiring source for this lecture.
—
Fri Apr 02 16:48:12 -0300 2010