6 ECTS credits
150 h study time
Offer 1 with catalog number 1001725BNR for all students in the 2nd semester at a (B) Bachelor - advanced level.
This course is a general introduction to fundamental topics within parallelism and distribution. A number of concepts in concurrency and parallelism for distributed and shared-memory memory models are introduced in the first part of the course including fork-join parallelism, multithreading and mutual exclusion, and message passing. The course then studies distributed systems and introduces different inter-processes communication abstractions (e.g. sockets, RMI, Pub/Sub, etc.) and established architectural models (e.g. client-server programs and peer-to-peer systems). The course also teaches a number of fundamental topics in the field such as synchronization (e.g. Lamport and vector clocks) and coordination and agreement (e.g. two-phase commit, FLP impossibility).
During the classes, slides will be projected. These slides are made available ahead of time via the learning platform. The slides also detail the corresponding course material to study per chapter, mostly based on course notes. At the course space, those course notes together with the sample programs shown at class are made available for download.
This course is an introduction to fundamental topics within parallelism and distribution. There is a strong focus on the underlying concepts of parallel and distributed systems, unrelated to a specific technology. However, often, for each topic, there will be case studies of existing technology that builds upon the explained concepts. This way, the student becomes familiar with how the concepts are brought into practice.
Knowledge and Understanding:
The student will gain insight and knowledge in:
• what is parallel computing, different forms of parallelism, concurrency vs parallelism, parallel memory architectures.
• what distributed systems are, what they are used for, different challenges in building distributed programs.
• fundamentals on shared-memory models: fork-join parallelism, and multithreading.
• fundamentals on distributed memory: message passing and the actor model of concurrency.
• the basic principles of networking, as networks connect distributed processes
• the basic distributed architectures: client-server, and peer-to-peer systems.
• the different ways in which distributed processes can be made to communicate with each other: from message passing models (sockets, RPC/RMI) to indirect communication models (e.g. tuple spaces, Pub/Sub, message queues)
• the basic principles of cryptography, to be able to communicate securely over an open network
• why clock synchronization is relevant in distributed systems, physical vs. logical clocks
• the fundamental issue of agreement in distributed systems, and some practical algorithms to solve this issue
Application of Knowledge and Understanding:
The course does not only provide theoretical knowledge and insight. By the end of the course, students should be able to apply the knowledge into practice and be able to design and implement working parallel and distributed programs.
Making Judgements:
Students should be able to judge the applicability of a given programming model, technique or algorithm in a given situation. They can justify their choice.
Communication:
Students should be able to communicate clearly about the topics studied. This is partially done by open questions at the exam and by asking students to submit a written essay about their programming project.
Learning Skills:
After having completed the course, students should have acquired the necessary foundational knowledge for them to be able to go deep and further study emerging parallel and distributed models ( e.g. cloud computing and big data processing, multicore, HPC, mobile computing, etc).
The final grade is composed based on the following categories:
Written Exam determines 50% of the final mark.
PRAC Practical Assignment determines 50% of the final mark.
Within the Written Exam category, the following assignments need to be completed:
Within the PRAC Practical Assignment category, the following assignments need to be completed:
Theory: written exam (closed book).
Practice: programming project with oral project defense.
Theory:
In the written exam, the knowledge and insight of the student is tested w.r.t. the topics discussed during class (see Content). The exam consists of a combination of open and closed questions. The student is expected to be able to synthesize the most important aspects of the question's topic, be able to analyse different solutions or techniques for a same topic, and reason about programs to answers questions and/or justify choices.
Practice: during the year, a detailed project description will be made known with specifications about the end product. The project will consists on two assignments: one focusing on the parallel aspects of the end product, and one focusing on the distributed aspects. For each assignment, the student delivers the implementation of the project, together with a brief report justifying made choices and the design. Each part of the project will be defended orally.
Both written exam and programming project account for 50% of the total score. Students need to obtain at least 8/20 in each evaluating part to be able to get a score for the entire course. If the scores for all parts are not higher than 8, the lowest score is used for the final mark.
Absence in one of the parts implies absence for the entire course. Partial marks for the exam or project, if the student obtains at least half of the score for this part, are transferred to the second session. Students may not relinquish partial marks.
This offer is part of the following study plans:
Bachelor of Computer Science: Default track (only offered in Dutch)
Master of Photonics Engineering: Standaard traject (only offered in Dutch)