-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathcompute_optimized.c
51 lines (42 loc) · 1.28 KB
/
compute_optimized.c
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
#include <omp.h>
#include <x86intrin.h>
#include "compute.h"
// Computes the convolution of two matrices
int convolve(matrix_t *a_matrix, matrix_t *b_matrix, matrix_t **output_matrix) {
// TODO: convolve matrix a and matrix b, and store the resulting matrix in
// output_matrix
return -1;
}
// Executes a task
int execute_task(task_t *task) {
matrix_t *a_matrix, *b_matrix, *output_matrix;
char *a_matrix_path = get_a_matrix_path(task);
if (read_matrix(a_matrix_path, &a_matrix)) {
printf("Error reading matrix from %s\n", a_matrix_path);
return -1;
}
free(a_matrix_path);
char *b_matrix_path = get_b_matrix_path(task);
if (read_matrix(b_matrix_path, &b_matrix)) {
printf("Error reading matrix from %s\n", b_matrix_path);
return -1;
}
free(b_matrix_path);
if (convolve(a_matrix, b_matrix, &output_matrix)) {
printf("convolve returned a non-zero integer\n");
return -1;
}
char *output_matrix_path = get_output_matrix_path(task);
if (write_matrix(output_matrix_path, output_matrix)) {
printf("Error writing matrix to %s\n", output_matrix_path);
return -1;
}
free(output_matrix_path);
free(a_matrix->data);
free(b_matrix->data);
free(output_matrix->data);
free(a_matrix);
free(b_matrix);
free(output_matrix);
return 0;
}