source: CIVL/examples/arithmetic/matmat.cvl@ 97cfc53

1.23 2.0 main test-branch
Last change on this file since 97cfc53 was 793cfc2, checked in by Tim Zirkel <zirkeltk@…>, 13 years ago

Reorganized examples and tests. Added algebra, assoc, dining, assume, and scoping examples.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@163 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 1.1 KB
Line 
1#include<civlc.h>
2
3int L = 3;
4int M = 4;
5int N = 5;
6int TILE_SIZE = 3;
7$input double A[L][M];
8$input double B[M][N];
9double C[L][N];
10double D[L][N];
11
12void spec() {
13 for (int i = 0; i < L; i++)
14 for (int j = 0; j < N; j++) {
15 C[i][j] = 0.0;
16 for (int k = 0; k < M; k++)
17 C[i][j] += A[i][k] * B[k][j];
18 }
19}
20
21void rowdist() {
22 int hi1, hi2, hi3;
23
24 for (int i = 0; i < L; i++) {
25 for (int j = 0; j < N; j++) {
26 D[i][j] = 0.0;
27 }
28 }
29
30 for (int ii = 0; ii < L; ii+=TILE_SIZE) {
31 for (int jj = 0; jj < N; jj+=TILE_SIZE) {
32 for (int kk = 0; kk < M; kk+=TILE_SIZE) {
33 hi1 = (ii + TILE_SIZE < L ? ii+TILE_SIZE : L);
34 for (int i = ii; i < hi1; i++) {
35 hi2 = (jj + TILE_SIZE < N ? jj + TILE_SIZE : N);
36 for (int j = jj; j < hi2; j++) {
37 hi3 = (kk + TILE_SIZE < M ? kk + TILE_SIZE : M);
38 for (int k = kk; k < hi3; k++)
39 D[i][j] = D[i][j] + A[i][k] * B[k][j];
40 }
41 }
42 }
43 }
44 }
45}
46
47void main() {
48 spec();
49 rowdist();
50 for (int i = 0; i < L; i++) {
51 for (int j = 0; j < N; j++) {
52 $assert C[i][j] == D[i][j];
53 }
54 }
55}
Note: See TracBrowser for help on using the repository browser.