Course Description
Parallel programming in Rust is a concise and fast-paced introduction to parallel programming for performance-focused computing intended for existing developers who are accustomed to working with languages that do not prioritize performance and parallelism. This introduction is done in Rust which provides both an excellent developer experience, and excellent single-thread performance, as well as a vast array of parallelization techniques. The course covers both an introduction to fast, safe Rust, as well as simple threading techniques, advanced threading with Crossbeam/flume, automated work-stealing parallelization of Rayon, and GPU acceleration through cudarc. An introduction to the CUDA architecture and programming model is also included.
Prerequisites
- Understanding of fundamental programming concepts
- Proficiency in the Rust programming language at a fundamental level
- An understanding of mathematical concepts at a university freshman level (i.e., fundamentals of calculus and discrete algebra)
Course Objectives
After successfully finishing the course, the students will be able to
- Understand and explain basic and intermediate concepts in parallel programming
- Develop intermediate Rust proficiency
- Solve intermediate parallel programming tasks using the right tools in Rust.
- Easily adapt to domain-specific tooling and challenges.
Course Learning Outcomes
At the end of this course, the students will have
- Written small but functional and high-performance implementations of key algorithms in Rust using suitable tools.
- Had experience in necessary tooling and environment setup for high performance and parallel computing
- Learned the fundamentals of parallel problem decomposition
Textbook and Reference Materials
- Klabnik, Steve, and Carol Nichols. The Rust programming language. No Starch Press, 2023. (and modern online iterations).
- Rust by Example, https://doc.rust-lang.org/rust-by-example/
- Rustlings, https://rustlings.rust-lang.org/
- Relevant crate documentation available on docs.rs
Course Conduct
At the end of each chapter of the course, students will be given exercise problems that they will work to independently solve before they are evaluated at the start of the next chapter. The results of these evaluations will track each student’s progress, and this start-of-chapter session will be used to make sure that everyone understands the solution to these exercises before progressing.
Each chapter will be preceded by assigned reading from the reference documentation. Then, at the start of the class period an overview of this material will be presented. This overview’s key purpose is to identify weaknesses in the student’s understanding of the material and to remedy these weaknesses. This is followed by a series of exercises that are partially done by the student themselves and partially demonstrated by the instructor.
Instructors
Prof. Dušan Gajić, PhD, Full Professor
Prof. Dinu Dragan. PhD, Full Professor
Prof. Veljko Petrović, PhD, Assistant Professor
Branislav Ristić, MSc, Teaching Assistant
Nikola Vukić, MSc, Teaching Assistant
Course Content
About Instructor