Computer Architecture
BSc
2026/27 (2nd), 2025/26 (2nd), 2020/21 (1st), 2019/20 (2nd), 2018/19 (2nd), 2017/18 (2nd), 2016/17 (2nd), 2014/15 (2nd), 2013/14 (2nd), 2009/10 (2nd)
2026/27, 2025/26: Computer Architecture is a first-year course on how computers work, from the representation of information to the execution of programs by the hardware. It covers digital representation of data (integers and their operations, floating point, text and Unicode), C programming, the RISC-V instruction set and assembly language (including procedure calls and the call stack), and the translation from C to assembly and machine code. It then turns to processor organization (the datapath, pipelining and its hazards), the memory hierarchy (caches and virtual memory), and input/output. In the practical classes, students write weekly exercises and programming projects in C and RISC-V assembly. Assessment combines regular Moodle quizzes, the projects and tests about them, and written theory tests. The course aims to give students a solid understanding of the hardware/software interface and of how architecture affects program behaviour and performance.
Computer Systems and Networks
PhD
2026/27 (1st), 2025/26 (1st), 2024/25 (1st), 2023/24 (1st), 2021/22 (1st), 2020/21 (1st), 2019/20 (1st), 2018/19 (1st)
2026/27, 2025/26: Lecturing a module on Concurrency.
Concurrent Systems
MSc
2026/27 (1st), 2025/26 (1st), 2024/25 (2nd)
2026/27: Concurrent Systems covers the principles and practice of shared-memory multiprocessor programming, based on The Art of Multiprocessor Programming. The theory runs from mutual exclusion and the correctness and progress of concurrent objects (linearizability, lock- and wait-freedom), through consensus and the relative power of synchronization primitives, to practical techniques: spin locks and contention, fine-grained and lock-free data structures, data races and deadlocks, and transactional memory. In a semester-long group project, students design, implement, test and evaluate a concurrent system, from lock-free data structures and synchronization primitives to memory reclamation and analysis tools. They develop it in checkpointed phases, review each other’s work, present it publicly, and defend it individually. The course aims to make students able to reason rigorously about concurrent algorithms and to build, measure and justify efficient, correct concurrent software.
2025/26, 2024/25: Concurrent Systems covers the principles and practice of shared-memory multiprocessor programming, based on The Art of Multiprocessor Programming. The theory runs from mutual exclusion and the correctness and progress of concurrent objects (linearizability, lock- and wait-freedom), through consensus and the relative power of synchronization primitives, to practical techniques: spin locks and contention, fine-grained and lock-free data structures, data races and deadlocks, and transactional memory. In the practical classes, students solve exercises that put these concepts into practice and develop a project in groups of two: implementing and evaluating a concurrent algorithm or system. The course aims to make students able to reason rigorously about concurrent algorithms and to build correct, efficient concurrent software.
Curricular Development Activity
BSc
2024/25 (1st)
Informatics for Sciences and Engineering E
BSc
2023/24 (2nd)
High Performance Computing
MSc
2023/24 (1st)
Introduction to Programming for Science and Engineering
BSc
2023/24 (1st)
Concurrency and Parallelism
MSc
2021/22 (2nd), 2020/21 (2nd), 2019/20 (2nd), 2018/19 (1st), 2017/18 (1st), 2016/17 (1st), 2015/16 (1st), 2014/15 (1st), 2013/14 (1st)
Big Data Processing Systems
MSc
2021/22 (1st), 2020/21 (1st), 2019/20 (1st)
Foundations of Operating Systems
BSc
2021/22 (1st)
Scientific Text Processing with LaTeX
Doctoral School · PhD
2019/20, 2018/19, 2017/18, 2016/17 (×2), 2016/17 (×2), 2015/16 (×2), 2015/16 (×2), 2014/15 (×2), 2014/15 (×2)
Co-lectured with José Alferes and João Leitão.
Transactional Systems
PhD
2017/18 (1st), 2016/17 (1st), 2015/16 (1st), 2014/15 (1st), 2013/14 (1st), 2011/12 (1st), 2010/11 (1st)
Integrative Project
BSc
2012/13 (2nd), 2010/11 (2nd)
Operating Systems
MSc
2012/13 (2nd), 2009/10 (1st), 2006/07 (2nd)
Cross-cutting Skills for Science and Technology
BSc
2012/13 (1st)
Introduction to Computer Systems and Networks
BSc
2012/13 (1st), 2008/09 (1st), 2007/08 (1st), 2006/07 (1st)
Advanced Topics in Parallel and Distributed Computing
MSc
2007/08 (1st), 2006/07 (2nd), 2005/06 (2nd), 2004/05 (2nd)
Operating Systems
Lic
2005/06 (2nd), 2004/05 (2nd), 2003/04 (2nd), 2001/02 (2nd), 2000/01 (2nd), 1999/00 (2nd), 1995/96 (2nd), 1994/95 (2nd), 1993/94 (2nd), 1992/93 (2nd), 1991/92 (2nd)
Parallel and Distributed Computing Systems
Lic
2005/06 (1st), 2004/05 (1st), 2003/04 (1st)
Computer Systems and Architecture III
Lic
2002/03 (1st), 2001/02 (1st), 1999/00 (1st), 1995/96 (1st)
Advanced Operating Systems
Lic
1994/95 (1st), 1993/94 (1st), 1992/93 (1st), 1991/92 (1st)
Computer Systems and Architecture II
Lic
1994/95 (1st), 1993/94 (1st), 1992/93 (1st)