From 3875ac2b8df9145a66e9f6fcf34e77eb3bc2d072 Mon Sep 17 00:00:00 2001 From: Nunigan Date: Tue, 27 Jul 2021 22:01:05 +0200 Subject: added first part of paper and code --- buch/papers/multiplikation/code/MM.c | 465 +++++++++++++++++++++++++++++++++++ 1 file changed, 465 insertions(+) create mode 100755 buch/papers/multiplikation/code/MM.c (limited to 'buch/papers/multiplikation/code/MM.c') diff --git a/buch/papers/multiplikation/code/MM.c b/buch/papers/multiplikation/code/MM.c new file mode 100755 index 0000000..04c4dab --- /dev/null +++ b/buch/papers/multiplikation/code/MM.c @@ -0,0 +1,465 @@ +#include +#include +#include +#include +#include +#include "c_matrix.h" +#include +#include + +void MM(int *A, int *B, int *C, int n); +void openMP_MM(int *A, int *B, int *C, int n); +void winograd(int *A, int *B, int *C, int n); +int winograd_inner(int *a, int *b, int n); +void run_algo(void (*algo)(), char alog_name[], int print); +void run_algo_cblas(int print); +void MM_dc(int *A, int *B, int *C, int n); +void strassen(int *A, int *B, int *C, int n); +void printMatrix(int *C, int n); +void printMatrix_double(double *C, int n); +void split(int *in, int *out, int n, int col, int row); +void join(int *in, int *out, int n, int col, int row); +void add(int *A, int *B, int *C, int n); +void sub(int *A, int *B, int *C, int n); +void multiply(int *A, int *B, int *C, int n); + +int main() { + // omp_set_dynamic(0); + // omp_set_num_threads(4); +// run_algo(openMP_MM, "openMP_MM",0); + run_algo(MM_dc, "MM_dc",0); + run_algo(strassen, "strassen",0); + + run_algo(MM, "MM", 0); + // run_algo(winograd, "winograd", 0); + run_algo_cblas(0); + + return 0; +} + +void MM(int *A, int *B, int *C, int n) { + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + int sum = 0; + for (int k = 0; k < n; ++k) { + sum += (*((A + i * n) + k)) * (*((B + k * n) + j)); + } + *((C + i * n) + j) = sum; + } + } +} + +int winograd_inner(int *a, int *b, int n){ + int ab = 0; + if(n%2==0) + { + int xi = 0; + int etha = 0; + for(int i = 0; i