From 7350184904d50385c89002307c2a4a5f5eef107c Mon Sep 17 00:00:00 2001 From: Raffaele Date: Thu, 13 Jan 2022 16:16:56 +0100 Subject: [PATCH] first implementations by rdgarce --- lina.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- lina.h | 8 +++---- 2 files changed, 73 insertions(+), 5 deletions(-) diff --git a/lina.c b/lina.c index b86096a..8b9c1bd 100644 --- a/lina.c +++ b/lina.c @@ -1,2 +1,70 @@ -#import +#include "lina.h" +// Evaluate the dot product C = A*B where C is of size m by l, A is m by n and B is n by l. +// NOTE: C can't be the same pointer of A or B. +void lina_dot(double **A, double **B, double **C, unsigned int m, unsigned int n, unsigned int l){ + + //Control for the sanity of the inputs: + //C must point to a different memory than A and B + if(C == A || C == B) + //Implement some Cozis-like-good-way method for error signaling + return; + + //Actual dot + //Iteration on A's rows + for(int i=0; i < m;i++){ + + double pos = 0; + + //Iteration on B's collumns + for(int k=0; k < l; k++){ + + //Iteration on the single B collumn for executing the product of sum + for(int j=0; j < n; j++){ + + pos = pos + A[i][j] * B[j][k]; + + } + + //The usage of a support variable 'pos' is for safety purpose (non-zero C matrix) + C[i][k] = pos; + + } + + } + +} + +// Evaluate C = A + B where A,B,C are m by n. +// NOTE: C can be the same location of A or B. +void lina_add(double **A, double **B, double **C, unsigned int m, unsigned int n){ + + for(int i=0;i