Parallelism
Table of contents
Pull the skeleton repository to get the para assignment. Commit and push your changes to GitLab before submitting your homework to Gradescope.
- Note
- There is no autograder for this assignment. Make sure that your implementation is correctly parallelized; it can pass the tests even if there is no parallelism.
Longest sequence
Use the fork/join framework to implement getLongestSequence. Given an int val, int[] arr, and an int sequentialCutoff, getLongestSequence returns the length of the longest consecutive sequence of val in arr.
For example, if arr is [2, 17, 17, 8, 17, 17, 17, 0, 17, 1], then getLongestSequence(17, arr) should return 3 and getLongestSequence(35, arr) should return 0.
Your code must have O(N) work, O(log N) span, where N is the length of arr, and use the sequentialCutoff argument. You may use the SequenceRange class to carry the return value.
Multi-pass filtering
Use the fork/join framework to implement filterEmpty. Given a String[] arr, filterEmpty returns an array with the lengths of the non-empty strings in arr in order.
For example, if arr is ["", "", "cse", "332", "", "hw", "", "7", "rox"], then filterEmpty(arr) should return [3, 3, 2, 1, 3].
A parallel algorithm for solving this problem in O(N) work and O(log N) span is as follows.
- Parallel map to produce a bit set.
- Parallel prefix over the bit set. (Implementation provided in the skeleton.)
- Parallel map to produce the output.
Do not bother with a sequential cutoff for this exercise. Your base case may process a single element.