Skip to content

Commit 775b1fb

Browse files
committed
feat: add matrix multiplication benchmark
1 parent e9a7688 commit 775b1fb

1 file changed

Lines changed: 43 additions & 21 deletions

File tree

benchmarks/macro/matrix_mul.prox

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,55 @@
11

2+
func create_matrix(rows, cols) {
3+
let m = [];
4+
for (let i = 0; i < rows; i = i + 1) {
5+
let row = [];
6+
for (let j = 0; j < cols; j = j + 1) {
7+
list_push(row, 0);
8+
}
9+
list_push(m, row);
10+
}
11+
return m;
12+
}
13+
14+
func multiply(a, b) {
15+
let rowsA = len(a);
16+
let colsA = len(a[0]);
17+
let rowsB = len(b);
18+
let colsB = len(b[0]);
19+
20+
if (colsA != rowsB) return null;
21+
22+
let result = create_matrix(rowsA, colsB);
23+
24+
for (let i = 0; i < rowsA; i = i + 1) {
25+
for (let j = 0; j < colsB; j = j + 1) {
26+
let sum = 0;
27+
for (let k = 0; k < colsA; k = k + 1) {
28+
sum = sum + a[i][k] * b[k][j];
29+
}
30+
result[i][j] = sum;
31+
}
32+
}
33+
return result;
34+
}
35+
236
func main() {
3-
let start = time();
4-
let size = 50;
5-
let a = [];
6-
let b = [];
7-
8-
// Init matrices
37+
let size = 30;
38+
let a = create_matrix(size, size);
39+
let b = create_matrix(size, size);
40+
41+
// Init values
942
for (let i = 0; i < size; i = i + 1) {
10-
let row_a = [];
11-
let row_b = [];
1243
for (let j = 0; j < size; j = j + 1) {
13-
push(row_a, i + j);
14-
push(row_b, i - j);
44+
a[i][j] = i + j;
45+
b[i][j] = i - j;
1546
}
16-
push(a, row_a);
17-
push(b, row_b);
1847
}
19-
20-
// Multiply
21-
let c = [];
22-
for (let i = 0; i < size; i = i + 1) {
23-
let row_c = [];
24-
for (let j = 0; j < size; j = j + 1) {
25-
let sum = 0;
26-
for (let k = 0; k < size; k = k + 1) {
27-
sum = sum + a[i][k] * b[k][j];
48+
2849
let start = clock();
2950
let c = multiply(a, b);
3051
let elapsed = clock() - start;
52+
3153
print("Time: " + to_string(elapsed));
3254
print("C[0][0]: " + to_string(c[0][0]));
3355
}

0 commit comments

Comments
 (0)