Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Note that method findSolution() in PartialSolution.java has the task of enumerating different solutions starting from the square located at (initialI,initialJ). It does so by binding the value of this square to each possible value and recurring on an unexplored square until no square has more than one possible value. If the set of possible values for a square becomes empty, then the partial solution with that square is a dead end; it cannot be extended (by binding the unexplored squares to values) to a final solution. When all squares in a partial solution have exactly one value, it is a final solution. In this assignment, you will build a parallel Sudoku puzzle solver by performing the enumeration of possible values for a square (and the return of all solutions based on this choice) in parallel and combining the results of these parallel computations to return the set of all possible solutions extending the given partial soluto initial puzzle.

Your assignment is as follows:

...

Part 2: Convert the sequential task decomposition from Part (1) into a parallel task decomposition. Each Callable task will now be executed in a separate thread, as discussed in Lecture 34. Test your code using the tests in 1). Then record the execution time output for solving puzzle1 in Sudoku.java using this parallel version. If you run your code on a processor with more than 1 core, you should see some improvement in execution time compared to 1. It may be as small as 10% rather than a factor of 2. Discuss the possible trade-offs as to why the parallel version may not be much faster than the sequential version, or may even be slower in some cases. Make your best effort to create a parallel version with the smallest execution time for puzzle1. (Hint: you do not necessarily need to create a parallel thread at each level of the call to findSolution().)

...