program that creates two matrices of
random real numbers between
0 and 1 and then computes the product of the two matrices.
n should be an input parameter. The only output from the program
should be the time required to multiply the matrices.
the complexity of your program, i.e. how many operations does it
perform as a function of the input size n?
- Construct a table of
execution times as a function of the matrix size n. Keep adding
entries until you have runs that take more than a few minutes. Do
the entries in the table agree with your predicted performance
Plot the data in the table with
gnuplot or one of the
other plotting packages described in Chapter ``Scientific
Visualization In High Performance Computing''.
- From the data in
the table can you tell when the matrices are large enough so they
don't all fit in cache? How does this data point correlate with
the size of the cache on your system?
- If you have a vector
processor, can you infer anything about optimum vector sizes from
the pattern of data in your table?
- If you are collecting your
data on a workstation, record the system load average along with
the execution time. Try several runs of the same matrix size but
at times when the load average is high, medium, and low. Plot the
data again, either with separate lines for different load
averages, or with error bars that show the range of times. Does
system load affect the performance of your program?