#ifndef EKD_BLAS_H #define EKD_BLAS_H #include #include #include #include #include #include #include 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 */