|
所在平台: Coursera |
课程主页: https://www.coursera.org/learn/parallel-programming-in-java
课程评论:没有评论
课程名称:Java中的并行编程 课程概述:本课程旨在教授学习者(行业专业人士和学生)Java 8上下文中的并行编程基本概念。并行编程使开发者能够利用多核计算机,提高应用程序的运行速度,通过同时使用多个处理器来实现。完成本课程后,您将学习如何使用流行的Java并行框架(如ForkJoin、Stream和Phaser),为各种多核平台(包括服务器、桌面或移动设备)编写并行程序,同时了解其理论基础,包括计算图、理想并行性、并行加速、阿姆达尔法则、数据竞争和确定性。 为什么选修这门课程? - 所有计算机都是多核计算机,因此了解如何将顺序Java编程的知识扩展到多核并行性非常重要。 - Java 7和Java 8引入了新的并行框架(ForkJoin、Stream),自Java早期以来显著改变了并行编程的范式。 - 每个模块都有指定的迷你项目,为您提供必要的实践经验,帮助您在课程结束后独立使用所学概念。 - 在课程期间,您将可在线访问讲师和导师,以获得针对您在论坛上提出问题的个性化解答。 学习成果: - 理解并行性理论,包括计算图、工作、跨度、理想并行性、并行加速、阿姆达尔法则、数据竞争和确定性。 - 使用Java的ForkJoin框架实现任务并行性。 - 利用Java的Future和Stream框架实现功能并行性。 - 学习带有屏障和迭代分组(分块)扩展的循环级并行性。 - 使用Phaser框架和基于数据的任务实现数据流并行性。 掌握这些概念将使您能够立即在多核Java程序的背景下应用它们,并为将来掌握其他并行编程系统提供基础(例如,C++11、OpenMP、.Net任务并行库)。 课程大纲: 第1部分:任务并行性 描述:在本模块中,我们将学习任务并行性的基本原理。任务是并行编程中最基本的单元。越来越多的编程语言(包括Java和C++)正在从旧的基于线程的方法转向更新的基于任务的方法进行并行编程。我们将学习任务创建、任务终止以及理解任务并行程序各属性的“计算图”理论模型,包括工作、跨度、理想并行性、并行加速和阿姆达尔法则。同时,我们将了解在任务并行性方面流行的Java API,尤其是Fork/Join框架。 第2部分:与Two Sigma对话:在实践中使用 描述:与Two Sigma的董事总经理Jim Ward及软件工程师Margaret Kelley和Jake Kornblau在德克萨斯州休斯顿市的办公室交流,了解并行编程的重要性。 第3部分:循环并行性 描述:欢迎来到模块3,并祝贺您达到了课程的中点!众所周知,许多应用程序在循环中耗费了大部分执行时间,因此学习如何通过并行ism加速循环非常重要,这是本模块的重点。我们将学习如何利用Java中的forall和stream API方便地表达并行的计数循环,以及如何使用这些API来对简单的矩阵乘法程序进行并行化。同时,我们将了解并行循环的屏障构造,并以简单的迭代平均程序示例来说明其使用。最后,我们将学习对并行迭代进行分组/分块的重要性,以减少开销。 第4部分:继续您的学习旅程,专注于“Java中的并行、并发和分布式编程”专业化 描述:接下来的两个视频将展示学习Java中的并发编程和分布式编程的重要性。Vivek Sarkar教授将与行业专业人士在Two Sigma进行交流,了解我们其他两门课程的主题在实践中的应用。
Part: 1
Title:Task Parallelism
Description:In this module, we will learn the fundamentals of task parallelism. Tasks are the most basic unit of parallel programming. An increasing number of programming languages (including Java and C++) are moving from older thread-based approaches to more modern task-based approaches for parallel programming. We will learn about task creation, task termination, and the “computation graph” theoretical model for understanding various properties of task-parallel programs. These properties include work, span, ideal parallelism, parallel speedup, and Amdahl’s Law. We will also learn popular Java APIs for task parallelism, most notably the Fork/Join framework.
Part: 2
Title:Talking to Two Sigma: Using it in the Field
Description:Join Professor Vivek Sarkar as he talks with Two Sigma Managing Director, Jim Ward, and Software Engineers, Margaret Kelley and Jake Kornblau, at their downtown Houston, Texas office about the importance of parallel programming.
Part: 3
Title:Loop Parallelism
Description:Welcome to Module 3, and congratulations on reaching the midpoint of this course! It is well known that many applications spend a majority of their execution time in loops, so there is a strong motivation to learn how loops can be sped up through the use of parallelism, which is the focus of this module. We will start by learning how parallel counted-for loops can be conveniently expressed using forall and stream APIs in Java, and how these APIs can be used to parallelize a simple matrix multiplication program. We will also learn about the barrier construct for parallel loops, and illustrate its use with a simple iterative averaging program example. Finally, we will learn the importance of grouping/chunking parallel iterations to reduce overhead.
Part: 4
Title:Continue Your Journey with the Specialization "Parallel, Concurrent, and Distributed Programming in Java"
Description:The next two videos will showcase the importance of learning about Concurrent Programming and Distributed Programming in Java. Professor Vivek Sarkar will speak with industry professionals at Two Sigma about how the topics of our other two courses are utilized in the field.
This course teaches learners (industry professionals and students) the fundamental concepts of parallel programming in the context of Java 8. Parallel programming enables developers to use multicore computers to make their applications run faster by using multiple processors at the same time. By the end of this course, you will learn how to use popular parallel Java frameworks (such as ForkJoin, Stream, and Phaser) to write parallel programs for a wide range of multicore platforms including servers, desktops, or mobile devices, while also learning about their theoretical foundations including computation graphs, ideal parallelism, parallel speedup, Amdahl's Law, data races, and determinism. Why take this course? • All computers are multicore computers, so it is important for you to learn how to extend your knowledge of sequential Java programming to multicore parallelism. • Java 7 and Java 8 have introduced new frameworks for parallelism (ForkJoin, Stream) that have significantly changed the paradigms for parallel programming since the early days of Java. • Each of the four modules in the course includes an assigned mini-project that will provide you with the necessary hands-on experience to use the concepts learned in the course on your own, after the course ends. • During the course, you will have online access to the instructor and the mentors to get individualized answers to your questions posted on forums. The desired learning outcomes of this course are as follows: • Theory of parallelism: computation graphs, work, span, ideal parallelism, parallel speedup, Amdahl's Law, data races, and determinism • Task parallelism using Java’s ForkJoin framework • Functional parallelism using Java’s Future and Stream frameworks • Loop-level parallelism with extensions for barriers and iteration grouping (chunking) • Dataflow parallelism using the Phaser framework and data-driven tasks Mastery of these concepts will enable you to immediately apply them in the context of multicore Java programs, and will also provide the foundation for mastering other parallel programming systems that you may encounter in the future (e.g., C++11, OpenMP, .Net Task Parallel Library).