PARALLEL AND 
DISTRIBUTED COMPUTING
IVAN 
PUZYREVSKIY

Modern computing is all about distribution. Big Data, Machine Learning, Systems – all these new and fancy subjects require us to leverage the power of many available cores and devices. This course aims to provide students with background knowledge in parallel programming and concurrent and distributed computing. Students will learn how to structure, write, run and debug multithreaded applications in Java. More importantly, they will also learn how to reason about the code running in parallel to ensure that the desired safety and liveness properties are present in a scalable way without sacrificing performance. As a teaser, by the end of the course students are introduced to distributed computing.

The course builds on the classical model of computation with a single processor and memory, and iteratively introduces one more bit of complexity at once. First, the course explores the effects of introducing several processors into the computational model while keeping a shared memory. Then, the course explores the effects of replacing the shared memory model with the message-passing model (as in distributed computing). If time permits, the effects of failures on the computational model will be discussed.

On the practical side, the course includes a lot of labs and programming exercises to ensure enough hands-on experience. Performance matters are covered as well, as students will be delivered content on basic performance analysis capabilities.

Currently Ivan is a technical lead in Yandex, where he supervises and leads the development of Yandex.Travel, an online travel service. Prior to that, he was working for 6+ years on the data storage and processing infrastructure that powers all the services in the company and scales over thousands of machines.

Ivan teaches at Higher School of Economics, where he leads the distributed systems seminar. He also contributed significantly towards the distributed systems programme for the bachelors. Also, Ivan has been teaching at Yandex School of Data Analysis since 2011.

Ivan Puzyrevskiy holds the Specialist Degree in Mathematics from the Moscow State University as of 2011, where he studied the external memory algorithms and the resilient algorithms for his thesis.

The primary objective of the course is to provide students with the practical skills to write parallel and distributed algorithms in Java as well as to provide students with the rigorous framework to reason and analyse the properties of the algorithms.

Upon the completion of the course students will be able to:
-Write a multithreaded application in Java
-Structure the multi-threaded code in a composable and scalable manner
-Understand and formulate the safety and the liveness properties
-Use synchronisation primitives to ensure the correct behaviour of an algorithm
-Identify problems that hinder the performance of a parallel algorithm
-Transform existing programmes to leverage the available parallelism
-Argument when the algorithm will not benefit from the available parallelism
-Write fault tolerant and highly available distributed applications with the provided tooling

SKILLS:

-System programming

-External memory algorithms

-Resilient algorithms

-Distributed Computing




ABOUT IVAN
WHAT YOU WILL LEARN
RESERVE MY SPOT

DATE: 27 Apr - 15 May, 2020

DURATION: 3 Weeks

LECTURES: 3 Hours per day

LANGUAGE: English

LOCATION: Barcelona, Harbour.Space Campus

COURSE TYPE: Offline

RESERVE MY SPOT

DATE: 27 Apr - 15 May, 2020

DURATION:  3 Weeks

LECTURES: 3 Hours per day

LANGUAGE: English

LOCATION: Barcelona, Harbour.Space Campus

COURSE TYPE: Offline

All rights reserved. 2017

Harbour.Space University
Tech Heart
COURSE OUTLINE
SHOW MORE

Session 1

Introduction to the Course

Course syllabus, logistics, grading. Introduction to the concurrency and
parallelism. Hardware support. Real-world environments that exhibit parallelism

Session 4

Basic Patterns and Techniques
Data/work-parallelism; load balancing and distribution; synchronisation and communication

Session 3

Multithreaded Programming in Java (2)
Locks, Conditional Variables and synchronization issues

Session 2

Multithreaded Programming in Java (1)

Threads, interrupts and concurrency effects

PARALLEL AND 
DISTRIBUTED
COMPUTING
BIBLIOGRAPHY

Modern computing is all about distribution. Big Data, Machine Learning, Systems – all these new and fancy subjects require us to leverage the power of many available cores and devices. This course aims to provide students with background knowledge in parallel programming and concurrent and distributed computing. Students will learn how to structure, write, run and debug multithreaded applications in Java. More importantly, they will also learn how to reason about the code running in parallel to ensure that the desired safety and liveness properties are present in a scalable way without sacrificing performance. As a teaser, by the end of the course students are introduced to distributed computing.

The course builds on the classical model of computation with a single processor and memory, and iteratively introduces one more bit of complexity at once. First, the course explores the effects of introducing several processors into the computational model while keeping a shared memory. Then, the course explores the effects of replacing the shared memory model with the message-passing model (as in distributed computing). If time permits, the effects of failures on the computational model will be discussed.

On the practical side, the course includes a lot of labs and programming exercises to ensure enough hands-on experience. Performance matters are covered as well, as students will be delivered content on basic performance analysis capabilities.

The primary objective of the course is to provide students with the practical skills to write parallel algorithms in Java, as well as to provide them with the rigorous framework to reason and analyse the properties of these algorithms.

Upon completion of the course, students will be able to:


-Write a multithreaded application in Java
-Structure the multi-threaded code in a composable and scalable manner
-Understand and formulate the safety and the liveness properties
-Use synchronisation primitives to ensure the correct behaviour of an algorithm
-Identify problems that hinder the performance of a parallel algorithm
-Transform existing programmes to leverage the available parallelism
-Argument when the algorithm will not benefit from the available parallelism

Ivan is currently a technical lead at Yandex, where he supervises and leads the development of Yandex.Travel, an online travel service. Prior to that, he was working for 6+ years on the data storage and processing infrastructure that powers all the services in the company and scales over thousands of machines.

Ivan teaches at Higher School of Economics, where he leads the distributed systems seminar. He also contributed significantly towards the distributed systems programme for the bachelors. Also, Ivan has been teaching at Yandex School of Data Analysis since 2011.

Ivan Puzyrevskiy holds the Specialist Degree in Mathematics from the Moscow State University as of 2011, where he studied the external memory algorithms and the resilient algorithms for his thesis.

Harbour.Space is a university created by entrepreneurs for entrepreneurs. We focus on meeting the demands of the future, while traditional education providers are too often stuck in the past.

We’re one of the only European institutions completely dedicated to technology, design and entrepreneurship, and our interdisciplinary courses are taught by some of today’s leading professionals. Our aim is not only to equip students with the knowledge to take on the real world, but to nurture, create and shape tomorrow’s tech superstars.

 Learn more about Harbour.Space.

ABOUT
HARBOUR.SPACE 
HARBOUR.SPACE UNIVERSITY