Java Reference
In-Depth Information
( a )equalsthenumberofrowsinthesecond Matrix ( b ),whichisessentialtotheal-
gorithm, multiply() creates a Matrix named result and enters a sequence of
nested loops to perform the multiplication.
The essence of these loops is as follows: For each row in a , multiply each of that
row'scolumnvaluesbythecorrespondingcolumn'srowvaluesin b .Addtogetherthe
resultsofthemultiplications,andstoretheoveralltotalin result atthelocationspe-
cified via the row index ( i ) in a and the column index ( j ) in b .
When you run this application, it generates the following output, which indicates
thata1-row-by-3-columnmatrixmultipliedbya3-row-by-2columnmatrixresultsina
1-row-by-2-column matrix:
1.0 2.0 3.0
4.0 7.0
5.0 8.0
6.0 9.0
32.0 50.0
Computer scientists classify this algorithm as O(n 3 ), which is read “big-oh of n-
cubed”or“approximatelyn-cubed.”Thisnotationisanabstractwayofclassifyingthe
algorithm'sperformance(withoutbeingboggeddowninspecificdetailssuchasmicro-
processorspeed).AO(n 3 )classificationindicatesverypoorperformance,andthisper-
formance worsens as the sizes of the matrixes being multiplied increase.
The performance can be improved (on multiprocessor and/or multicore platforms)
by assigning each row-by-column multiplication task to a separate thread-like entity.
Listing 6-9 showsyouhowtoaccomplish thisscenario inthecontext oftheFork/Join
Framework.
Listing 6-9. Multiplying two matrixes via the Fork/Join Framework
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;
class MatMult extends RecursiveAction
{
 
Search WWH ::




Custom Search