summaryrefslogtreecommitdiff
path: root/OASIS/c/src/ekd_blas.h
blob: 4c9919d12a0e42b71e456f1399c34f6bdbb7c51e (plain)
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
#ifndef EKD_BLAS_H
#define EKD_BLAS_H

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <omp.h>
#include <cblas.h>

typedef enum {
    MM_ADD,
    MM_SUBTRACT,
    MM_MULTIPLY,
    MM_MULTIPLY_OMP,
    MM_MULTIPLY_GEMM
} matrix_matrix_operation_e;

typedef enum {
    MV_MULTIPLY,
    MV_MULTIPLY_GEMV
} matrix_vector_operation_e;

typedef enum {
    SHIFT_ADD,
    SHIFT_SUBTRACT
} shift_matrix_operation_e;

// Prototypes
void print_matrix(float** matrix, uint32_t rows, uint32_t cols);
void print_vector(float* vector, uint32_t size);
void copy_matrix(float** input_matrix, float** resultant_matrix, uint32_t rows, uint32_t cols);
void copy_vector(float* input_vector, float* resultant_vector, uint32_t size);
void shift_matrix(float** input_matrix, uint32_t size, float trace, shift_matrix_operation_e operation);
float trace_matrix(float** input_matrix, uint32_t size);
void eye(float** input_matrix, uint32_t size);
void outer_product(float* input_vector, uint32_t size, float** resultant_matrix); // outer_productes itself
float inner_product(float* input_vector_1, float* input_vector_2, uint32_t size); // Dots itself
void matrix_operation(float** input_matrix_A, uint32_t rows_A, uint32_t cols_A, float** input_matrix_B, uint32_t rows_B, uint32_t cols_B, float** resultant_matrix, matrix_matrix_operation_e operation);
void transpose(float** input_matrix, uint32_t rows, uint32_t cols, float** transposed_matrix);
uint8_t sign(float num);
void vector_normalize(float* vector, uint32_t size);
float vector_norm(float* vector, uint32_t size);
float matrix_norm(float** input_matrix_A1, float** input_matrix_A, uint32_t rows, uint32_t cols);
float cosine_similarity(float* curr_vector, float* new_vector, uint32_t size);
void matrix_vector_multiply(float** input_matrix, uint32_t rows, uint32_t cols, float* input_vector, float* resultant_vector, matrix_vector_operation_e operation);

#endif /* EKD_BLAS_H */