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
RevLine 
[1f6d5639]1#include<civlc.h>
2
[793cfc2]3int L = 3;
4int M = 4;
5int N = 5;
[f28d814]6int TILE_SIZE = 3;
[1f6d5639]7$input double A[L][M];
8$input double B[M][N];
[364cc7e]9double C[L][N];
[f28d814]10double D[L][N];
[364cc7e]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
[f28d814]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
[364cc7e]47void main() {
48 spec();
[f28d814]49 rowdist();
50 for (int i = 0; i < L; i++) {
51 for (int j = 0; j < N; j++) {
[1f6d5639]52 $assert C[i][j] == D[i][j];
[f28d814]53 }
54 }
[364cc7e]55}
Note: See TracBrowser for help on using the repository browser.