$29
Answer the questions below according to the lab specification. Write
your answers directly in this text file and submit it to complete the
lab.
PROBLEM 1: Code Overview
========================
(A) Vector and Matrix
~~~~~~~~~~~~~~~~~~~~~
Examine the header file `matvec.h' which gives type definitions and
declares functions associated with a simple matrix and vector type.
For the matrix type `matrix_t' with R rows and C columns, how is a 2D
matrix actually laid out in memory?
(B) Getting and Setting Elements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For the `matrix_t' and `vector_t' types, convenient means to get and
set elements is provided. This mechanism is used in the utility
functions in `matvec_util.c' and defined in `matvec.h'.
Describe how one would get element (R,C) of `matrix_t' or set it to
value Z. Why are these mechanisms not functions?
PROBLEM 2: Timing Rows vs Columns
=================================
(A) row_sums vs col_sums Timing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Compile and run the `matsums_main' executable using the provided
`Makefile' (typing `make' should suffice).
Run this program with differing parameters which control the number of
rows and columns in the matrix which is summed. Show some example runs
with different parameters including on large square matrix with 8000
rows and 8000 columns.
Note any speed differences between the two on large matrices.
(B) row_sums vs col_sums speed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Examine the source code for the functions `row_sums()' and
`col_sums()' in the file `matsums_funcs.c'. Describe why the
timing/speed differences you observed previously are occurring based
on features of the source code you see and the layout of the
`matrix_t' that is being summed.
PROBLEM 3: opt_col_sums()
=========================
Complete the function `opt_col_sums()' in file `matsums_funcs.c'. This
function should have identical behavior to `col_sums()' (it sums the
columns of the matrix into a provided array). However, it should be
*optimized* so that it achieves performance near to that of the
`row_sums()' function. To achieve this, re-arrange the loops to
iterate as efficiently as possible with respect to the memory
system. Feel free to ask course staff for hints on how to do this or
do some online research.
To time `opt_col_sums()', uncomment relevant blocks in the
`matsums_main.c' program that are provided for it.
Paste your source code and a copy of the timing results of running
`matsums_main' on an 8000 by 8000 matrix.