-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmatrix_lib.cpp
More file actions
57 lines (51 loc) · 1.42 KB
/
Copy pathmatrix_lib.cpp
File metadata and controls
57 lines (51 loc) · 1.42 KB
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
#include "matrix_lib.h"
#include <omp.h>
#include <iostream>
void generate_matrix(float* matrix, int size) {
for (int i = 0; i < size; i++) {
matrix[i] = (float)(rand() % 10);
}
}
void print_matrix(float* matrix, int n) {
std::cout << "----------------------" << std::endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int idx = i * n + j;
std::cout << matrix[idx] << " ";
}
std::cout << std::endl;
}
std::cout << "--------------------" << std::endl;
}
void multiply_matrix_on_CPU(float* A, float* B, float* C, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
float C_val = 0;
for (int k = 0; k < n; k++) {
C_val += A[i*n + k] * B[k*n + j];
}
C[i*n + j] = C_val;
}
}
}
void multiply_matrix_on_parallel_CPU(float* A, float* B, float* C, int n) {
#pragma omp parallel for
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
float C_val = 0;
for (int k = 0; k < n; k++) {
C_val += A[i*n + k] * B[k*n + j];
}
C[i*n + j] = C_val;
}
}
}
bool verify_multiplication(float* A, float* B, int n) {
int num_el = n*n;
for (int i = 0; i < num_el; i++) {
if (A[i] - B[i] > 1e-5) {
return false;
}
}
return true;
}