Matrix

Scientific computing applications often involve performing matrix multiplications which require a series of multiplications followed by a sum of the products.  One of the advantages of parallel computing is multiple processors can be used to perform the multiplication steps simultaneously.  This can speed up the calculations significantly.  Once the products of all the multiplication steps have been computed they can be added together.

Consider the following code example called Matrix.java which multiplies two 2×2 matrices together.  This code example first calculates the results serially and outputs the results.  It then repeats the process step by step to show how each step performs 2 multiplications and then sums the products.  The first of these calculations also demonstrates how the multiplications can be performed concurrently using threads spawned from Multiply.java.

1) What is the Big O of the serial part of the algorithm (Post into the comments)

2) Rewrite Matrix.java to utilize threads to compute the products of three remaining calculations concurrently using the example from the first calculation

3) What is the Big O of your new concurrent Matrix.java algorithm?  Why?
Extra –  Modify Matrix.java to work with any size matrix (demonstrate by changing n to 10).  You may use random numbers to pre-fill the matrices.  You could consider using recursion for this.

Use javadoc comments.

Other files are attached