parallele-programmierung/u08-2/README.md

26 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Problem 8.2: Recursive counting using Callable vs. ForkJoinTask
Class `TreeSumSequential` in the source code folder on the server builds a binary tree with a
random structure with each node containing a random number. Then it sequentially computes for each
node the number of prime numbers up to the number in this node (this computation is performed in
two parts in order to simulate that it may become clear only during the processing of a node that some
further computation effort is necessary see method `countPrimesInTree`). Finally, the total
number of prime numbers over all nodes it printed.
Extend this program by two more implementations of this tree-wide prime number counting:
- a concurrent one that uses a `Callable` for each node and a `ThreadPoolExecutor`
- a concurrent one that uses a `ForkJoinTask` for each node and the `ForkJoinPool.commonPool()`
The tasks for child nodes should be created and submitted about in the middle of processing the parent
node, quite as in `countPrimesInTree`.
Compare the run times of the three implementations if you like, also for different values of the
configuration constants `MAX_NUMBER_IN_NODE` (corresponds to the size of a task) und
`MAX_NODES` (an upper limit for the number of tasks which is reached provided that
`SUBTREE_THRESHOLD_PERCENT` is large enough). The run time of a task depends on the depth
of its node in the tree.
Since all three implementations compute the sum for the same tree, all three must print the same total
number; you may thus use a comparison to the sequentially computed number as a correctness check
of your concurrent implementations.