From a64e80432cf2222a84503f4202c04cfdbf705d27 Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Tue, 12 Mar 2019 09:45:02 +0100 Subject: et hop un Makefile pour les matrices complexes --- test/monniaux/complex/Makefile | 12 ++ test/monniaux/complex/complex.c | 247 ------------------------------------ test/monniaux/complex/complex_mat.c | 247 ++++++++++++++++++++++++++++++++++++ 3 files changed, 259 insertions(+), 247 deletions(-) create mode 100644 test/monniaux/complex/Makefile delete mode 100644 test/monniaux/complex/complex.c create mode 100644 test/monniaux/complex/complex_mat.c (limited to 'test') diff --git a/test/monniaux/complex/Makefile b/test/monniaux/complex/Makefile new file mode 100644 index 00000000..1c701783 --- /dev/null +++ b/test/monniaux/complex/Makefile @@ -0,0 +1,12 @@ +include ../rules.mk + +PRODUCTS=complex_mat.gcc.host.out complex_mat.ccomp.host.out \ + complex_mat.gcc.k1c.out complex_mat.ccomp.k1c.out \ + complex_mat.gcc.k1c.s complex_mat.ccomp.k1c.s + +all: $(PRODUCTS) + +complex_mat.gcc.host.s complex_mat.ccomp.host.s complex_mat.gcc.k1c.s complex_mat.ccomp.k1c.s : ../clock.h + +complex_mat.gcc.host complex_mat.ccomp.host : ../clock.gcc.host.o +complex_mat.gcc.k1c complex_mat.ccomp.k1c : ../clock.gcc.k1c.o diff --git a/test/monniaux/complex/complex.c b/test/monniaux/complex/complex.c deleted file mode 100644 index 6c7dae1d..00000000 --- a/test/monniaux/complex/complex.c +++ /dev/null @@ -1,247 +0,0 @@ -#include -#include -#include -#include -#include "../clock.h" - -typedef double REAL; - -typedef struct { - REAL re, im; -} COMPLEX; - -static inline void COMPLEX_zero(COMPLEX *r) { - r->re = r->im = 0.0; -} - -static inline void COMPLEX_add(COMPLEX *r, - const COMPLEX *x, - const COMPLEX *y) { - double re = x->re + y->re; - double im = x->im + y->im; - r->re = re; - r->im = im; -} - -static inline void COMPLEX_mul(COMPLEX *r, - const COMPLEX *x, - const COMPLEX *y) { - double re = x->re * y->re - x->im * y->im; - double im = x->im * y->re + x->re * y->im; - r->re = re; - r->im = im; -} - -static inline void COMPLEX_mul_addto(COMPLEX *r, - const COMPLEX *x, - const COMPLEX *y) { - double re = r->re + x->re * y->re - x->im * y->im; - double im = r->im + x->im * y->re + x->re * y->im; - r->re = re; - r->im = im; -} - -#define MACRO_COMPLEX_mul_addto(rre, rim, x, y) \ - { \ - double xre = (x).re, xim=(x).im, \ - yre = (y).re, yim=(y).im; \ - (rre) += xre * yre - xim * yim; \ - (rim) += xim * yre + xre * yim; \ - } - - -void COMPLEX_mat_mul1(unsigned m, unsigned n, unsigned p, - COMPLEX * restrict c, unsigned stride_c, - const COMPLEX *a, unsigned stride_a, - const COMPLEX *b, unsigned stride_b) { - for(unsigned i=0; i 0) { - do { - CHUNK - CHUNK - CHUNK - CHUNK - j4++; - } while (j4 < n4); - } - } - { - unsigned j4=0, n4=n%UNROLL; - if (n4 > 0) { - do { - CHUNK - j4++; - } while (j4 < n4); - } - } - pc_i[k] = total; - } - pa_i += stride_a; - pc_i += stride_c; - } -} - -#undef CHUNK -#define CHUNK \ - MACRO_COMPLEX_mul_addto(totalre, totalim, *pa_i_j, *pb_j_k) \ - pa_i_j ++; \ - pb_j_k = (COMPLEX*) ((char*) pb_j_k + stride_b_scaled); - -void COMPLEX_mat_mul9(unsigned m, unsigned n, unsigned p, - COMPLEX * c, unsigned stride_c, - const COMPLEX *a, unsigned stride_a, - const COMPLEX *b, unsigned stride_b) { - const COMPLEX *pa_i = a; - COMPLEX * pc_i = c; - size_t stride_b_scaled = sizeof(COMPLEX) * stride_b; - for(unsigned i=0; i 0) { - do { - CHUNK - CHUNK - CHUNK - CHUNK - j4++; - } while (j4 < n4); - } - } - { - unsigned j4=0, n4=n%UNROLL; - if (n4 > 0) { - do { - CHUNK - j4++; - } while (j4 < n4); - } - } - pc_i[k].re = totalre; - pc_i[k].im = totalim; - } - pa_i += stride_a; - pc_i += stride_c; - } -} - -bool COMPLEX_equal(const COMPLEX *a, - const COMPLEX *b) { - return a->re==b->re && a->im==b->im; -} - -bool COMPLEX_mat_equal(unsigned m, - unsigned n, - const COMPLEX *a, unsigned stride_a, - const COMPLEX *b, unsigned stride_b) { - for(unsigned i=0; i +#include +#include +#include +#include "../clock.h" + +typedef double REAL; + +typedef struct { + REAL re, im; +} COMPLEX; + +static inline void COMPLEX_zero(COMPLEX *r) { + r->re = r->im = 0.0; +} + +static inline void COMPLEX_add(COMPLEX *r, + const COMPLEX *x, + const COMPLEX *y) { + double re = x->re + y->re; + double im = x->im + y->im; + r->re = re; + r->im = im; +} + +static inline void COMPLEX_mul(COMPLEX *r, + const COMPLEX *x, + const COMPLEX *y) { + double re = x->re * y->re - x->im * y->im; + double im = x->im * y->re + x->re * y->im; + r->re = re; + r->im = im; +} + +static inline void COMPLEX_mul_addto(COMPLEX *r, + const COMPLEX *x, + const COMPLEX *y) { + double re = r->re + x->re * y->re - x->im * y->im; + double im = r->im + x->im * y->re + x->re * y->im; + r->re = re; + r->im = im; +} + +#define MACRO_COMPLEX_mul_addto(rre, rim, x, y) \ + { \ + double xre = (x).re, xim=(x).im, \ + yre = (y).re, yim=(y).im; \ + (rre) += xre * yre - xim * yim; \ + (rim) += xim * yre + xre * yim; \ + } + + +void COMPLEX_mat_mul1(unsigned m, unsigned n, unsigned p, + COMPLEX * restrict c, unsigned stride_c, + const COMPLEX *a, unsigned stride_a, + const COMPLEX *b, unsigned stride_b) { + for(unsigned i=0; i 0) { + do { + CHUNK + CHUNK + CHUNK + CHUNK + j4++; + } while (j4 < n4); + } + } + { + unsigned j4=0, n4=n%UNROLL; + if (n4 > 0) { + do { + CHUNK + j4++; + } while (j4 < n4); + } + } + pc_i[k] = total; + } + pa_i += stride_a; + pc_i += stride_c; + } +} + +#undef CHUNK +#define CHUNK \ + MACRO_COMPLEX_mul_addto(totalre, totalim, *pa_i_j, *pb_j_k) \ + pa_i_j ++; \ + pb_j_k = (COMPLEX*) ((char*) pb_j_k + stride_b_scaled); + +void COMPLEX_mat_mul9(unsigned m, unsigned n, unsigned p, + COMPLEX * c, unsigned stride_c, + const COMPLEX *a, unsigned stride_a, + const COMPLEX *b, unsigned stride_b) { + const COMPLEX *pa_i = a; + COMPLEX * pc_i = c; + size_t stride_b_scaled = sizeof(COMPLEX) * stride_b; + for(unsigned i=0; i 0) { + do { + CHUNK + CHUNK + CHUNK + CHUNK + j4++; + } while (j4 < n4); + } + } + { + unsigned j4=0, n4=n%UNROLL; + if (n4 > 0) { + do { + CHUNK + j4++; + } while (j4 < n4); + } + } + pc_i[k].re = totalre; + pc_i[k].im = totalim; + } + pa_i += stride_a; + pc_i += stride_c; + } +} + +bool COMPLEX_equal(const COMPLEX *a, + const COMPLEX *b) { + return a->re==b->re && a->im==b->im; +} + +bool COMPLEX_mat_equal(unsigned m, + unsigned n, + const COMPLEX *a, unsigned stride_a, + const COMPLEX *b, unsigned stride_b) { + for(unsigned i=0; i