CSC398H5F: "Topics in CS: Parallel Programming" Fall 2018 term (Sep-Dec 2018) at UTM
Instructor: Bogdan Simion, bogdan@cs.toronto.edu
For those of you interested, I will be offering a course on Parallel Programming in the Fall 2018 term, under the course code CSC398H5 at UTM. The course coverage will be similar to the CSC367H1 offered at St George in the Winter term.
Course Rationale and Description
As Moore’s law comes to an end and virtually every device is capable of solid compute cycles using multiple cores and complex memory hierarchies, the future is parallel. Consequently, it is increasingly important to have the ability to program applications that leverage parallel processing effectively. In increasingly higher application domains, designing parallel solutions for solving large problems requires a solid understanding of parallel architectures and parallel models (e.g., shared memory, message passing), efficient synchronization, and scalability considerations.
This course, titled “Topics in Computer Science: Parallel Programming”, covers a range of topics in parallel computing, with the emphasis on exposing Computer Science students to the fundamentals of parallel programming, and enabling them to develop the necessary skills to design efficient software for parallel systems. This course aims to cover a spectrum of topics, from low-level architectural parallelism, parallel programming concepts and parallel algorithm design, concurrency and synchronization, parallel programming paradigms, and applicability of general-purpose parallel architectures (with a focus on GPUs).
Topics will include theoretical aspects of parallel programming, as well as a strong focus on practical implementation, using a variety of parallelization libraries and architectures. You will work with libraries like POSIX threads, OpenMP, MPI, as well as with GPU frameworks like CUDA. Aside from implementation, the course has a strong focus on analyzing your results and reasoning about your findings in a critical and technical manner.
Why should you take this course?
To learn about principles of parallel programming in a practical way. Why? To help you parallelize your applications effectively. Knowing how to get good performance out of your system and speeding up your applications is very important in this day and age, no matter what field you are in, whether systems, machine learning, etc.
To give you a quick teaser, here’s a quote attributed to Seymour Cray, “the father of supercomputing”:
“If you were plowing a field, which would you rather use? Two strong oxen or a 1024 chickens?”
What will you get out of this course?
-
- Ability to operate with parallel programming concepts in a practical context
-
- Ability to profile your application, explain your findings, analyze them and take action
-
- Ability to analyze parallel programs in terms of efficiency, scalability, etc.
-
- Ability to expose tradeoffs and to find the right balance for a given problem
-
- Ability to program multicore systems and GPUs effectively
-
- Learning critical thinking skills for future jobs (either in industry or academia)
…
- Learning critical thinking skills for future jobs (either in industry or academia)
-
- Knowledge to answer interview questions on the topic
…
- Knowledge to answer interview questions on the topic
- 999 . Some grade
Requirements / exclusions:
- Prerequisites:
- CSC209 or equivalent
- CSC258 or equivalent
- Exclusions:
- CSC367H1 (Parallel Programming)
- Expected:
- Strong interest in learning new things and applying them
- Keen appetite for exploration, analyzing results, comparing alternatives, etc.
- Ability to attend lectures and labs at UTM