Write a
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.

- Analyze
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 model? -
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?