We may earn an affiliate commission when you visit our partners.
Course image
Prof. Viktor Kuncak and Dr. Aleksandar Prokopec

With every smartphone and computer now boasting multiple processors, the use of functional ideas to facilitate parallel programming is becoming increasingly widespread. In this course, you'll learn the fundamentals of parallel programming, from task parallelism to data parallelism. In particular, you'll see how many familiar ideas from functional programming map perfectly to to the data parallel paradigm. We'll start the nuts and bolts how to effectively parallelize familiar collections operations, and we'll build up to parallel collections, a production-ready data parallel collections library available in the Scala standard library. Throughout, we'll apply these concepts through several hands-on examples that analyze real-world data, such as popular algorithms like k-means clustering.

Read more

With every smartphone and computer now boasting multiple processors, the use of functional ideas to facilitate parallel programming is becoming increasingly widespread. In this course, you'll learn the fundamentals of parallel programming, from task parallelism to data parallelism. In particular, you'll see how many familiar ideas from functional programming map perfectly to to the data parallel paradigm. We'll start the nuts and bolts how to effectively parallelize familiar collections operations, and we'll build up to parallel collections, a production-ready data parallel collections library available in the Scala standard library. Throughout, we'll apply these concepts through several hands-on examples that analyze real-world data, such as popular algorithms like k-means clustering.

Learning Outcomes. By the end of this course you will be able to:

- reason about task and data parallel programs,

- express common algorithms in a functional style and solve them in parallel,

- competently microbenchmark parallel code,

- write programs that effectively use parallel collections to achieve performance

Recommended background: You should have at least one year programming experience. Proficiency with Java or C# is ideal, but experience with other languages such as C/C++, Python, Javascript or Ruby is also sufficient. You should have some familiarity using the command line. This course is intended to be taken after Functional Program Design in Scala: https://www.coursera.org/learn/progfun2.

Enroll now

What's inside

Syllabus

Parallel Programming
We motivate parallel programming and introduce the basic constructs for building parallel programs on JVM and Scala. Examples such as array norm and Monte Carlo computations illustrate these concepts. We show how to estimate work and depth of parallel programs as well as how to benchmark the implementations.
Read more
Basic Task Parallel Algorithms
We continue with examples of parallel algorithms by presenting a parallel merge sort. We then explain how operations such as map, reduce, and scan can be computed in parallel. We present associativity as the key condition enabling parallel implementation of reduce and scan.
Data-Parallelism
We show how data parallel operations enable the development of elegant data-parallel code in Scala. We give an overview of the parallel collections hierarchy, including the traits of splitters and combiners that complement iterators and builders from the sequential case.
Data Structures for Parallel Computing
We give a glimpse of the internals of data structures for parallel computing, which helps us understand what is happening under the hood of parallel collections.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Learners will be able to develop data-parallel code solutions in Scala
Learners will be able to solve functional problems in parallel
Learners will be able to benchmark and optimize parallel code using microbenchmarking
Learners will gain proficiency with Java or C# and at least one year of programming experience is recommended
Familiarity using the command line is required
This course comes after Functional Program Design in Scala

Save this course

Save Parallel programming to your list so you can find it easily later:
Save

Reviews summary

Well-received parallel programming course

Learners largely praise this well-structured parallel programming course, citing its thorough lectures, interesting assignments, and challenging exercises. The course provides a strong foundation in the subject and exceeds expectations in teaching fundamental concepts and principles. While some advanced topics are covered, learners may find the course difficult if they lack background knowledge. Overall, this course is highly recommended for those seeking to expand their skills in parallel programming, especially in the Scala language.
Course focuses on Scala language, providing practical experience in parallel programming.
"The course will introduce some topics on parallel programming and Scala."
"You'll study all fundamental ideas behind parallelism in Scala."
"The new bracket-less syntax brings tons of pain."
Lectures are informative and provide a solid foundation in parallel programming.
"Lectures are very informative."
"The explanations were accompanied by a level of mathematical rigor which helped clarify the material."
"The lectures were really informative and there was never a boring moment."
Assignments are well-designed and challenging, fostering deep understanding.
"I like all four assignments. They are well-designed and interesting."
"The assignments were a little difficult, specially the last one, but I managed to succeed after a few attempts."
"This course definitely has something for newbies as well as experienced developers."
Course has a strong academic focus, which may not be immediately applicable to real-world scenarios.
"This is very academic course."
"I doubt anyone will find it useful in real life unless you are a student or maybe a teacher."
"The first week gives an Okay introduction to the subject, even with half the lessons being about calculating limits of parallelism."
Course covers advanced topics that may be difficult for learners without prior knowledge.
"This course is quite hard to understand with tasks especially at the end of week 4."
"A whole new world has opened up before my very eyes."
"I have fallen in love with Parallelism in the Functional Programming world."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Parallel programming with these activities:
Organize and review course notes, materials, and assignments
Prepare for the course and improve retention by organizing and reviewing all relevant materials, including notes, handouts, and assignments.
Show steps
  • Gather all course materials, including notes, slides, and assignments.
  • Organize the materials in a logical manner.
  • Review the materials regularly to enhance understanding.
Scala Refresher
Strengthen foundational Scala skills by reviewing basic syntax, data structures, and functional programming concepts, ensuring a solid understanding before delving into parallel programming.
Browse courses on Scala
Show steps
  • Review Scala data types, operators, and control flow
  • Practice working with Scala collections and functional operations
Read 'Parallel Programming in Scala'
Reinforce your understanding and supplement your knowledge by reading the book 'Parallel Programming in Scala', which covers the key concepts of the course.
Show steps
  • Obtain a copy of the book.
  • Read the book thoroughly and take notes.
  • Highlight and review important concepts.
Eight other activities
Expand to see all activities and additional details
Show all 11 activities
Solve parallel programming problems on LeetCode
Enhance your understanding of parallel programming concepts by tackling challenges on LeetCode, a platform known for its coding problems.
Browse courses on Task Parallelism
Show steps
  • Choose a problem that involves task or data parallelism.
  • Analyze the problem and devise a parallel solution.
  • Implement your solution and submit it for evaluation.
Parallel Programming Drills
Enhance understanding of parallel programming concepts through practical exercises, solidifying foundational knowledge and improving problem-solving abilities.
Browse courses on Parallel Programming
Show steps
  • Solve coding problems involving task parallelism
  • Implement data parallel algorithms in Scala
  • Analyze and parallelize sequential code
  • Experiment with different parallel collection operations
Follow tutorials on parallel programming in Scala
Expand your knowledge of parallel programming in Scala by exploring online tutorials and resources.
Show steps
  • Identify relevant tutorials that cover concepts related to the course.
  • Follow the tutorials step-by-step and implement the examples.
  • Experiment with different approaches and techniques.
Study Group Discussions
Foster collaboration and enhance understanding by engaging in group discussions on course topics, providing diverse perspectives and clarifying concepts.
Browse courses on Parallel Programming
Show steps
  • Participate in discussions on parallel programming principles
  • Collaborate on solving coding challenges
  • Present and explain parallel programming techniques to peers
Build a data parallel application
Reinforce your knowledge and practice applying the concepts of task and data parallelism by developing a data parallel application.
Show steps
  • Design the architecture of your application.
  • Implement the data parallel operations.
  • Test and benchmark your application.
Attend meetups or conferences focused on parallel programming
Connect with professionals and learn about the latest trends and advancements in parallel programming by attending industry events.
Browse courses on Task Parallelism
Show steps
  • Identify relevant meetups or conferences in your area.
  • Register and attend the event.
  • Network with attendees and speakers.
Parallel Programming Blog Post
Deepen understanding and reinforce learning by creating content that explains parallel programming concepts and techniques, fostering critical thinking and communication skills.
Browse courses on Parallel Programming
Show steps
  • Summarize and explain basic parallel programming concepts
  • Provide examples of parallel algorithms and their implementation
  • Analyze and discuss performance implications of parallel code
Write a blog post about parallel programming in Scala
Solidify your understanding and share your insights by writing a blog post that explains key concepts of parallel programming in Scala.
Browse courses on Task Parallelism
Show steps
  • Choose a specific topic related to parallel programming in Scala.
  • Research and gather information from reliable sources.
  • Organize your content into a coherent and engaging narrative.
  • Write the blog post, ensuring clarity and accuracy.

Career center

Learners who complete Parallel programming will develop knowledge and skills that may be useful to these careers:
Data Scientist
Data Scientists use their knowledge of mathematics, statistics, and computer science to extract meaningful insights from data. This course in Parallel Programming will help you develop the skills you need to succeed as a Data Scientist. You will learn how to parallelize common data science algorithms, and how to use parallel collections to achieve performance.
Machine Learning Engineer
Machine Learning Engineers design and implement machine learning models to solve real-world problems. This course in Parallel Programming will help you build a foundation for a career in Machine Learning Engineering. You will learn about the fundamentals of parallel programming, and how to apply these concepts to machine learning algorithms.
Data Engineer
Data Engineers design and implement data pipelines to collect, store, and process data. This course in Parallel Programming can help build a foundation for a career in Data Engineering. You will learn about the fundamentals of parallel programming, and how to apply these concepts to data engineering tasks.
Computer Scientist
Computer Scientists research and develop new computing technologies. This course in Parallel Programming will help you build a foundation for a career in Computer Science. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the design and implementation of new computing technologies.
Software Engineer
Software Engineers analyze user needs and business requirements to design, develop, test, and deploy software applications. This course in Parallel Programming can help build a foundation for a career in Software Engineering. You will learn about task and data parallel programming, and how to apply these concepts to real-world data analysis tasks.
Systems Analyst
Systems Analysts analyze and design computer systems to meet the needs of businesses and organizations. This course in Parallel Programming may be useful for those interested in a career as a Systems Analyst. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the design of computer systems.
Database Administrator
Database Administrators maintain and administer databases. This course in Parallel Programming may be useful for those interested in a career as a Database Administrator. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the management of databases.
Software Architect
Software Architects design and develop the overall architecture of software systems. This course in Parallel Programming may be useful for those interested in a career as a Software Architect. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the design of software systems.
Consultant
Consultants provide advice and guidance to businesses and organizations on a variety of topics. This course in Parallel Programming may be useful for those interested in a career as a Consultant. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the analysis of business needs and the development of solutions.
Business Analyst
Business Analysts analyze the business needs of organizations and develop solutions to meet those needs. This course in Parallel Programming may be useful for those interested in a career as a Business Analyst. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the analysis of business needs and the development of solutions.
Product Manager
Product Managers manage the development and launch of new products. This course in Parallel Programming may be useful for those interested in a career as a Product Manager. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the development of new products.
Project Manager
Project Managers plan and manage the development of software and other technical projects. This course in Parallel Programming may be useful for those interested in a career as a Project Manager. You will learn about the fundamentals of parallel programming, and how to apply these concepts to the management of technical projects.
Quantitative Analyst
Quantitative Analysts use mathematical and statistical models to analyze financial data and make investment decisions. This course in Parallel Programming may be useful for those interested in a career as a Quantitative Analyst. You will learn about task and data parallel programming, and how to apply these concepts to financial data analysis.
Technical Writer
Technical Writers create documentation for software and other technical products. This course in Parallel Programming may be useful for those interested in a career as a Technical Writer. You will learn about the fundamentals of parallel programming, and how to write clear and concise documentation for technical products.
Teacher
Teachers educate students in a variety of subjects. This course in Parallel Programming may be useful for those interested in a career as a Teacher. You will learn about the fundamentals of parallel programming, and how to teach these concepts to students.

Reading list

We've selected 29 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Parallel programming.
Offers a comprehensive introduction to parallel programming, covering various parallel programming models and paradigms, as well as practical techniques for writing efficient parallel code.
Provides a practical guide to parallel programming in C# and .NET Core. It covers a wide range of topics, from the basics of parallel programming to advanced techniques such as asynchronous programming and data parallelism.
Provides a solid foundation in computer architecture, covering topics such as pipelining, cache design, and memory hierarchies, which are essential for understanding the underlying principles of parallel programming.
Provides a comprehensive introduction to parallel computer architecture and programming, covering topics such as parallel algorithms, shared memory, and distributed memory systems, which will provide a broader context for the concepts discussed in this course.
The book provides a comprehensive overview of parallel programming with Java, useful as additional reading material for the course.
Provides a comprehensive introduction to functional programming in Scala. Functional programming is suitable for parallel programming.
Provides a comprehensive introduction to parallel and concurrent programming in Haskell. Haskell suitable functional programming language for parallel programming so this book provides a good background.
Although this book is not directly related to parallel programming in Scala, it provides valuable insights into modern Fortran, which high-performance language that is often used for scientific computing, which common application area for parallel programming.
The book provides a practical guide to functional and reactive domain modeling, useful for gaining a deeper understanding of the concepts covered in the course.
Provides a practical guide to writing concurrent programs. It covers a wide range of topics, from the basics of concurrency to advanced techniques such as deadlock avoidance and livelock prevention.
Provides a comprehensive introduction to concurrent programming in Java. It covers a wide range of topics, from the basics of concurrency to advanced techniques such as thread pools and non-blocking algorithms.
Provides a comprehensive guide to concurrency programming in C++. It covers a wide range of topics, including task parallelism, data parallelism, and distributed computing.
Provides a practical guide to writing concurrent programs in Java. It covers a wide range of topics, from the basics of concurrency to advanced techniques such as thread pools and non-blocking algorithms.
Provides a comprehensive guide to writing effective Java code. It covers a wide range of topics, from the basics of Java programming to advanced techniques such as generics and concurrency.
Provides a collection of recipes for solving common problems in Scala. It covers a wide range of topics, from the basics of Scala programming to advanced techniques such as functional programming and concurrency.
Provides a comprehensive introduction to parallel programming using OpenMP. It covers a wide range of topics, including task parallelism, data parallelism, and distributed computing.
Provides a comprehensive introduction to parallel programming with OpenMP. OpenMP widely used parallel programming API for C, C++, and Fortran.
Serves as a comprehensive introduction to C# programming, which can provide a foundation for understanding the concepts of parallel programming in Scala, given that Scala is built on the Java Virtual Machine.
Provides a comprehensive guide to parallel programming using CUDA. It covers a wide range of topics, including task parallelism, data parallelism, and distributed computing.
Presents design patterns and best practices for parallel programming, which can complement the concepts covered in this course.
Provides a comprehensive introduction to parallel programming with OpenCL. OpenCL parallel programming platform for heterogeneous systems.
Provides a comprehensive guide to parallel programming using Rust. It covers a wide range of topics, including task parallelism, data parallelism, and distributed computing.
Provides a comprehensive guide to parallel programming using F#. It covers a wide range of topics, including task parallelism, data parallelism, and distributed computing.
Provides a comprehensive guide to parallel programming using MPI. It covers a wide range of topics, including task parallelism, data parallelism, and distributed computing.
Provides a comprehensive treatment of concurrent programming, covering topics such as synchronization, mutual exclusion, and deadlock avoidance, which can provide a theoretical foundation for understanding parallel programming.
Serves as an introduction to parallel computing, covering topics such as parallel algorithms, shared memory, and distributed memory systems, which can provide a broader context for the concepts discussed in this course.
Provides a comprehensive introduction to parallel programming. It covers a wide range of topics, from the basics of parallel programming to advanced techniques such as parallel algorithms and architectures.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Parallel programming.
Parallel programming (Scala 2 version)
Most relevant
Big Data Analysis with Scala and Spark
Most relevant
Big Data Analysis with Scala and Spark (Scala 2 version)
Most relevant
Parallel Programming in Java
Most relevant
Learn Parallel Programming with C# and .NET
Most relevant
Advanced .NET with TPL & PLINQ: Conducting Performance...
Most relevant
Functional Program Design in Scala (Scala 2 version)
Most relevant
Functional Program Design in Scala
Most relevant
Effective Programming in Scala
Most relevant
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser