Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool...
Transcript of Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool...
![Page 1: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/1.jpg)
Overview of Parallel Programming in Java
Douglas C. [email protected]
www.dre.vanderbilt.edu/~schmidt
Professor of Computer Science
Institute for Software
Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
![Page 2: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/2.jpg)
2
• Understand the meaning of key parallel programming concepts
• Know when to apply parallelism
• Recognize the parallel programmingframeworks supported by Java
Learning Objectives in this Part of the Lesson
See www.dre.vanderbilt.edu/~schmidt/frameworks.html
![Page 3: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/3.jpg)
3
Learning Objectives in this Part of the Lesson• Recognize the parallelism frameworks
supported by Java, e.g.
• Fork-join pools
![Page 4: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/4.jpg)
4
• Recognize the parallelism frameworks supported by Java, e.g.
• Fork-join pools
• Parallel streamsfilter(not(this::urlCached))
collect(toList())
map(this::downloadImage)
flatMap(this::applyFilters)
Learning Objectives in this Part of the Lesson
…
![Page 5: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/5.jpg)
5
• Recognize the parallelism frameworks supported by Java, e.g.
• Fork-join pools
• Parallel streams
• Completable futures
Learning Objectives in this Part of the Lesson
/page\ =
supplyAsync
(getStartPage())
/imgNum\ = /page\
.thenComposeAsync
(crawlHyperLinks
(page))
/imgNum\ = /page\
.thenApplyAsync
(countImages(page))
.thenApply(List::size)
/imgNum1\.thenCombine(/imgNum2\,
(imgNum1, imgNum2) ->
Integer::sum)
Completable futures also provide a reactive asynchrony programming model
Task 1
Task 2 Task 3
Task 4
![Page 6: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/6.jpg)
6
Overview of Java Parallelism Frameworks
![Page 7: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/7.jpg)
7
• Java 7 introduced the object-oriented fork-join pool framework
See www.infoq.com/interviews/doug-lea-fork-join
Overview of Java Parallelism Frameworks
![Page 8: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/8.jpg)
8
• Java 7 introduced the object-oriented fork-join pool framework
• Provides high performance, fine-grained task execution for data parallelism
join joinjoin
Processsequentially
Processsequentially
Processsequentially
Processsequentially
DataSource1.1 DataSource1.2 DataSource2.1 DataSource2.2
DataSource1 DataSource2
DataSource
fork()
fork() fork()
See www.dre.vanderbilt.edu/~schmidt/PDF/DataParallelismInJava.pdf
Overview of Java Parallelism Frameworks
![Page 9: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/9.jpg)
9See en.wikipedia.org/wiki/Divide_and_conquer_algorithm
Result solve(Problem problem) {
if (problem is small)
directly solve problem
else {
a. split problem into
independent parts
b. fork new sub-tasks
to solve each part
c. join all sub-tasks
d. compose result
from sub-results
}
}
• Java 7 introduced the object-oriented fork-join pool framework
• Provides high performance, fine-grained task execution for data parallelism
• Supports parallel programming by solving problems via “divide & conquer”
Overview of Java Parallelism Frameworks
![Page 10: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/10.jpg)
10
• Java 7 introduced the object-oriented fork-join pool framework
• Provides high performance, fine-grained task execution for data parallelism
• Supports parallel programming by solving problems via “divide & conquer”
• Employs work-stealing to optimize multi-core processor performance
See gee.cs.oswego.edu/dl/papers/fj.pdf
Overview of Java Parallelism Frameworks
![Page 11: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/11.jpg)
11
• Java 8 added two new parallel functional programming frameworks
Additional Frameworks & Languages
Applications
Operating System Kernel
System Libraries
Java Execution Environment (e.g., JVM)
Threading & Synchronization Packages
Java
/JN
IC+
+/C
CSee www.ibm.com/developerworks/library/j-jvmc2
Overview of Java Parallelism Frameworks
![Page 12: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/12.jpg)
12
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
filter(not(this::urlCached))
collect(toList())
…
map(this::downloadImage)
flatMap(this::applyFilters)
See docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
Overview of Java Parallelism Frameworks
![Page 13: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/13.jpg)
13
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
• Partitions a stream into multiple substreams that run independently & combine into a “reduced” result
filter(not(this::urlCached))
collect(toList())
…
map(this::downloadImage)
flatMap(this::applyFilters)
Overview of Java Parallelism Frameworks
![Page 14: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/14.jpg)
14
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
• Partitions a stream into multiple substreams that run independently & combine into a “reduced” result
• Chunks of data in the substreamscan be mapped to multiple threads(& cores)
filter(not(this::urlCached))
collect(toList())
…
map(this::downloadImage)
flatMap(this::applyFilters)
Overview of Java Parallelism Frameworks
![Page 15: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/15.jpg)
15
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
• Partitions a stream into multiple substreams that run independently & combine into a “reduced” result
• Chunks of data in the substreamscan be mapped to multiple threads(& cores)
• Leverages the common fork-join pool
filter(not(this::urlCached))
collect(toList())
…
map(this::downloadImage)
flatMap(this::applyFilters)
Overview of Java Parallelism Frameworks
See dzone.com/articles/common-fork-join-pool-and-streams
![Page 16: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/16.jpg)
16
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
• Partitions a stream into multiple substreams that run independently & combine into a “reduced” result
• Chunks of data in the substreamscan be mapped to multiple threads(& cores)
• Leverages the common fork-join pool
filter(not(this::urlCached))
collect(toList())
…
map(this::downloadImage)
flatMap(this::applyFilters)
Parallel streams provides fine-grained data parallelism functional programming
Overview of Java Parallelism Frameworks
![Page 17: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/17.jpg)
17
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
2. Completable futures
See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html
/page\ =
supplyAsync
(getStartPage())
/imgNum2\ = /page\
.thenComposeAsync
(crawlHyperLinks
(page))
/imgNum1\ = /page\
.thenApplyAsync
(countImages(page))
.thenApply(List::size)
/imgNum1\.thenCombine(/imgNum2\,
(imgNum1, imgNum2) ->
Integer::sum)
Overview of Java Parallelism Frameworks
Task 1
Task 2 Task 3
Task 4
![Page 18: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/18.jpg)
18
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
2. Completable futures
• Supports dependent actionsthat trigger upon completion of async operations
See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html
/page\ =
supplyAsync
(getStartPage())
/imgNum2\ = /page\
.thenComposeAsync
(crawlHyperLinks
(page))
/imgNum1\ = /page\
.thenApplyAsync
(countImages(page))
.thenApply(List::size)
/imgNum1\.thenCombine(/imgNum2\,
(imgNum1, imgNum2) ->
Integer::sum)
Overview of Java Parallelism Frameworks
Task 1
Task 2 Task 3
Task 4
![Page 19: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/19.jpg)
19
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
2. Completable futures
• Supports dependent actionsthat trigger upon completion of async operations
• Async operations can runin parallel in thread pools
See www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html
Overview of Java Parallelism Frameworks
/page\ =
supplyAsync
(getStartPage())
/imgNum2\ = /page\
.thenComposeAsync
(crawlHyperLinks
(page))
/imgNum1\ = /page\
.thenApplyAsync
(countImages(page))
.thenApply(List::size)
/imgNum1\.thenCombine(/imgNum2\,
(imgNum1, imgNum2) ->
Integer::sum)
Task 1
Task 2 Task 3
Task 4
![Page 20: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/20.jpg)
20
• Java 8 added two new parallel functional programming frameworks
1. Parallel streams
2. Completable futures
• Supports dependent actionsthat trigger upon completion of async operations
• Async operations can runin parallel in thread pools
Java completable futures & streams can be combined to good effects!!
List of URLs to Download
…
filter(this::nonNull)
collect(toFuture())
map(this::downloadImageAsync)
flatMap(this::applyFiltersAsync)
map(this::checkUrlCachedAsync)
Overview of Java Parallelism Frameworks
![Page 21: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/21.jpg)
21
• These Java frameworks often eliminate the use of synchronization or explicit threading when developing parallel apps!
Alleviates many accidental & inherent complexities of parallel programming
Overview of Java Parallelism Frameworks
![Page 22: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/22.jpg)
22
• Java parallel streams & completable future functional frameworks use the object-oriented fork-join pool framework by default
See www.oracle.com/technetwork/articles/java/fork-join-422606.html
Overview of Java Parallelism Frameworks
![Page 23: Overview of Parallel Programming in Javaschmidt/cs891s/2020-PDFs/1... · oriented fork-join pool framework •Provides high performance, fine-grained task execution for data parallelism](https://reader033.fdocuments.in/reader033/viewer/2022042221/5ec75e1ce46b2237e7578b04/html5/thumbnails/23.jpg)
23
End of Overview of Parallelism in Java