aboutsummaryrefslogtreecommitdiffstats
path: root/src/examples/matmult.c
blob: 4f0615fa06fa642a531309dd0644fe60cccf9d44 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* matmult.c 

   Test program to do matrix multiplication on large arrays.
 
   Intended to stress virtual memory system.
   
   Ideally, we could read the matrices off of the file system,
   and store the result back to the file system!
 */

#include <stdio.h>
#include <syscall.h>

/* You should define DIM to be large enough that the arrays
   don't fit in physical memory.

    Dim       Memory
 ------     --------
     16         3 kB
     64        48 kB
    128       192 kB
    256       768 kB
    512     3,072 kB
  1,024    12,288 kB
  2,048    49,152 kB
  4,096   196,608 kB
  8,192   786,432 kB
 16,384 3,145,728 kB */
#define DIM 128

int A[DIM][DIM];
int B[DIM][DIM];
int C[DIM][DIM];

int
main (void)
{
  int i, j, k;

  /* Initialize the matrices. */
  for (i = 0; i < DIM; i++)
    for (j = 0; j < DIM; j++)
      {
	A[i][j] = i;
	B[i][j] = j;
	C[i][j] = 0;
      }

  /* Multiply matrices. */
  for (i = 0; i < DIM; i++)	
    for (j = 0; j < DIM; j++)
      for (k = 0; k < DIM; k++)
	C[i][j] += A[i][k] * B[k][j];

  /* Done. */
  exit (C[DIM - 1][DIM - 1]);
}