summaryrefslogtreecommitdiff
path: root/src/matrixOperations/multiplication
diff options
context:
space:
mode:
authorjofret2008-06-19 14:50:31 +0000
committerjofret2008-06-19 14:50:31 +0000
commit679aac39ce151580256c1dca864f156b89355bcb (patch)
tree1277aa159d0596c3b92fbfea370ca483f83c8ae8 /src/matrixOperations/multiplication
parentd2d6f29bf937606615bb3ad34dcafb46002c45d7 (diff)
downloadscilab2c-679aac39ce151580256c1dca864f156b89355bcb.tar.gz
scilab2c-679aac39ce151580256c1dca864f156b89355bcb.tar.bz2
scilab2c-679aac39ce151580256c1dca864f156b89355bcb.zip
Split Multiplication
Diffstat (limited to 'src/matrixOperations/multiplication')
-rw-r--r--src/matrixOperations/multiplication/Makefile.am5
-rw-r--r--src/matrixOperations/multiplication/Makefile.in47
-rw-r--r--src/matrixOperations/multiplication/cmulma.c44
-rw-r--r--src/matrixOperations/multiplication/dmulma.c67
-rw-r--r--src/matrixOperations/multiplication/smulma.c172
-rw-r--r--src/matrixOperations/multiplication/zmulma.c102
6 files changed, 256 insertions, 181 deletions
diff --git a/src/matrixOperations/multiplication/Makefile.am b/src/matrixOperations/multiplication/Makefile.am
index 2d7dbee3..f6d1102f 100644
--- a/src/matrixOperations/multiplication/Makefile.am
+++ b/src/matrixOperations/multiplication/Makefile.am
@@ -17,7 +17,10 @@ instdir = $(top_builddir)/lib
pkglib_LTLIBRARIES = libMatrixMultiplication.la
-libMatrixMultiplication_la_SOURCES = matrixMultiplication.c
+libMatrixMultiplication_la_SOURCES = smulma.c \
+ dmulma.c \
+ cmulma.c \
+ zmulma.c
check_PROGRAMS = testMatrixMultiplication
diff --git a/src/matrixOperations/multiplication/Makefile.in b/src/matrixOperations/multiplication/Makefile.in
index 7983fe53..79837254 100644
--- a/src/matrixOperations/multiplication/Makefile.in
+++ b/src/matrixOperations/multiplication/Makefile.in
@@ -54,7 +54,10 @@ pkglibLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(pkglib_LTLIBRARIES)
libMatrixMultiplication_la_LIBADD =
am_libMatrixMultiplication_la_OBJECTS = \
- libMatrixMultiplication_la-matrixMultiplication.lo
+ libMatrixMultiplication_la-smulma.lo \
+ libMatrixMultiplication_la-dmulma.lo \
+ libMatrixMultiplication_la-cmulma.lo \
+ libMatrixMultiplication_la-zmulma.lo
libMatrixMultiplication_la_OBJECTS = \
$(am_libMatrixMultiplication_la_OBJECTS)
libMatrixMultiplication_la_LINK = $(LIBTOOL) --tag=CC \
@@ -204,7 +207,11 @@ libMatrixMultiplication_la_CFLAGS = -I $(top_builddir)/type \
instdir = $(top_builddir)/lib
pkglib_LTLIBRARIES = libMatrixMultiplication.la
-libMatrixMultiplication_la_SOURCES = matrixMultiplication.c
+libMatrixMultiplication_la_SOURCES = smulma.c \
+ dmulma.c \
+ cmulma.c \
+ zmulma.c
+
check_LDADD = $(top_builddir)/type/libDoubleComplex.la \
$(top_builddir)/type/libFloatComplex.la \
$(top_builddir)/lib/blas/libsciblas.la \
@@ -297,7 +304,10 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixMultiplication_la-matrixMultiplication.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixMultiplication_la-cmulma.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixMultiplication_la-dmulma.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixMultiplication_la-smulma.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libMatrixMultiplication_la-zmulma.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testMatrixMultiplication-testDoubleMatrixMultiplication.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testMatrixMultiplication-testFloatMatrixMultiplication.Po@am__quote@
@@ -322,12 +332,33 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-libMatrixMultiplication_la-matrixMultiplication.lo: matrixMultiplication.c
-@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -MT libMatrixMultiplication_la-matrixMultiplication.lo -MD -MP -MF $(DEPDIR)/libMatrixMultiplication_la-matrixMultiplication.Tpo -c -o libMatrixMultiplication_la-matrixMultiplication.lo `test -f 'matrixMultiplication.c' || echo '$(srcdir)/'`matrixMultiplication.c
-@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixMultiplication_la-matrixMultiplication.Tpo $(DEPDIR)/libMatrixMultiplication_la-matrixMultiplication.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='matrixMultiplication.c' object='libMatrixMultiplication_la-matrixMultiplication.lo' libtool=yes @AMDEPBACKSLASH@
+libMatrixMultiplication_la-smulma.lo: smulma.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -MT libMatrixMultiplication_la-smulma.lo -MD -MP -MF $(DEPDIR)/libMatrixMultiplication_la-smulma.Tpo -c -o libMatrixMultiplication_la-smulma.lo `test -f 'smulma.c' || echo '$(srcdir)/'`smulma.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixMultiplication_la-smulma.Tpo $(DEPDIR)/libMatrixMultiplication_la-smulma.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smulma.c' object='libMatrixMultiplication_la-smulma.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -c -o libMatrixMultiplication_la-smulma.lo `test -f 'smulma.c' || echo '$(srcdir)/'`smulma.c
+
+libMatrixMultiplication_la-dmulma.lo: dmulma.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -MT libMatrixMultiplication_la-dmulma.lo -MD -MP -MF $(DEPDIR)/libMatrixMultiplication_la-dmulma.Tpo -c -o libMatrixMultiplication_la-dmulma.lo `test -f 'dmulma.c' || echo '$(srcdir)/'`dmulma.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixMultiplication_la-dmulma.Tpo $(DEPDIR)/libMatrixMultiplication_la-dmulma.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmulma.c' object='libMatrixMultiplication_la-dmulma.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -c -o libMatrixMultiplication_la-dmulma.lo `test -f 'dmulma.c' || echo '$(srcdir)/'`dmulma.c
+
+libMatrixMultiplication_la-cmulma.lo: cmulma.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -MT libMatrixMultiplication_la-cmulma.lo -MD -MP -MF $(DEPDIR)/libMatrixMultiplication_la-cmulma.Tpo -c -o libMatrixMultiplication_la-cmulma.lo `test -f 'cmulma.c' || echo '$(srcdir)/'`cmulma.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixMultiplication_la-cmulma.Tpo $(DEPDIR)/libMatrixMultiplication_la-cmulma.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmulma.c' object='libMatrixMultiplication_la-cmulma.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -c -o libMatrixMultiplication_la-cmulma.lo `test -f 'cmulma.c' || echo '$(srcdir)/'`cmulma.c
+
+libMatrixMultiplication_la-zmulma.lo: zmulma.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -MT libMatrixMultiplication_la-zmulma.lo -MD -MP -MF $(DEPDIR)/libMatrixMultiplication_la-zmulma.Tpo -c -o libMatrixMultiplication_la-zmulma.lo `test -f 'zmulma.c' || echo '$(srcdir)/'`zmulma.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libMatrixMultiplication_la-zmulma.Tpo $(DEPDIR)/libMatrixMultiplication_la-zmulma.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='zmulma.c' object='libMatrixMultiplication_la-zmulma.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -c -o libMatrixMultiplication_la-matrixMultiplication.lo `test -f 'matrixMultiplication.c' || echo '$(srcdir)/'`matrixMultiplication.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libMatrixMultiplication_la_CFLAGS) $(CFLAGS) -c -o libMatrixMultiplication_la-zmulma.lo `test -f 'zmulma.c' || echo '$(srcdir)/'`zmulma.c
testMatrixMultiplication-testFloatMatrixMultiplication.o: testFloatMatrixMultiplication.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testMatrixMultiplication_CFLAGS) $(CFLAGS) -MT testMatrixMultiplication-testFloatMatrixMultiplication.o -MD -MP -MF $(DEPDIR)/testMatrixMultiplication-testFloatMatrixMultiplication.Tpo -c -o testMatrixMultiplication-testFloatMatrixMultiplication.o `test -f 'testFloatMatrixMultiplication.c' || echo '$(srcdir)/'`testFloatMatrixMultiplication.c
diff --git a/src/matrixOperations/multiplication/cmulma.c b/src/matrixOperations/multiplication/cmulma.c
new file mode 100644
index 00000000..58742d99
--- /dev/null
+++ b/src/matrixOperations/multiplication/cmulma.c
@@ -0,0 +1,44 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2008-2008 - INRIA - Bruno JOFRET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "matrixMultiplication.h"
+
+/*
+** \brief Compute a multiplication for floats complex matrixes.
+** \param in1 : input matrix.
+** \param lines1 : lines of in1 matrix.
+** \param columns1 : columns of in1 matrix.
+** \param in2 : input arry.
+** \param lines2 : lines of in2 matrix.
+** \param columns2 : columns of in2 matrix.
+** \param out : Matrix that contains the multiplication in1 * in2.
+*/
+void cmulma(floatComplex *in1, int lines1, int columns1,
+ floatComplex *in2, int lines2, int columns2,
+ floatComplex *out)
+{
+ int i = 0;
+ int k = 0;
+ floatComplex accu = FloatComplex(0, 0);
+
+ for (i = 0 ; i < lines1 * columns2 ; ++i)
+ {
+ accu = FloatComplex(0,0);
+ for (k = 0; k < columns1 ; ++k)
+ {
+ accu = cadds(accu,
+ ctimess(in1[i % lines1 + k *lines1] ,
+ in2[k + (i / lines1) *lines2] ));
+ }
+ out[i] = accu;
+ }
+}
diff --git a/src/matrixOperations/multiplication/dmulma.c b/src/matrixOperations/multiplication/dmulma.c
new file mode 100644
index 00000000..8c20960a
--- /dev/null
+++ b/src/matrixOperations/multiplication/dmulma.c
@@ -0,0 +1,67 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2008-2008 - INRIA - Bruno JOFRET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef WITHOUT_BLAS
+#include "blas.h"
+#endif
+#include "matrixMultiplication.h"
+
+/*
+** \brief Compute a multiplication for doubles matrixes.
+** \param in1 : input matrix.
+** \param lines1 : lines of in1 matrix.
+** \param columns1 : columns of in1 matrix.
+** \param in2 : input arry.
+** \param lines2 : lines of in2 matrix.
+** \param columns2 : columns of in2 matrix.
+** \param out : Matrix that contains the multiplication in1 * in2.
+*/
+void dmulma(double *in1, int lines1, int columns1,
+ double *in2, int lines2, int columns2,
+ double *out)
+{
+#ifndef WITHOUT_BLAS
+ /*
+ ** USES BLAS DGEMM FUNCTION.
+ */
+ double One = 1;
+ double Zero = 0;
+
+ /* Cr <- 1*Ar*Br + 0*Cr */
+ dgemm_("N","N", &columns2, &columns2, &columns1, &One,
+ in1 , &lines1, in2, &lines2, &Zero, out, &columns2);
+#else
+ /*
+ ** DO NOT USE ANY BLAS FUNCTION.
+ */
+ int i = 0;
+ int k = 0;
+ double accu = 0;
+
+ /*
+ ** How to convert 2 index matrixes to one.
+ ** #define in1(a, b) in1[a+b*lines1]
+ ** #define in2(c, d) in2[c+d*lines2]
+ */
+
+ for (i = 0 ; i < lines1 * columns2 ; ++i)
+ {
+ accu = 0;
+ for (k = 0; k < columns1 ; ++k)
+ {
+ accu += in1[i % lines1 + k * lines1]
+ * in2[k + (i / lines1) * lines2];
+ }
+ out[i] = accu;
+ }
+#endif
+}
diff --git a/src/matrixOperations/multiplication/smulma.c b/src/matrixOperations/multiplication/smulma.c
index dbed4330..edf10a01 100644
--- a/src/matrixOperations/multiplication/smulma.c
+++ b/src/matrixOperations/multiplication/smulma.c
@@ -10,9 +10,6 @@
*
*/
-#ifndef WITHOUT_BLAS
-#include "blas.h"
-#endif
#include "matrixMultiplication.h"
/*
@@ -49,173 +46,4 @@ void smulma(float *in1, int lines1, int columns1,
}
out[i] = accu;
}
-
-}
-
-/*
-** \brief Compute a multiplication for doubles matrixes.
-** \param in1 : input matrix.
-** \param lines1 : lines of in1 matrix.
-** \param columns1 : columns of in1 matrix.
-** \param in2 : input arry.
-** \param lines2 : lines of in2 matrix.
-** \param columns2 : columns of in2 matrix.
-** \param out : Matrix that contains the multiplication in1 * in2.
-*/
-void dmulma(double *in1, int lines1, int columns1,
- double *in2, int lines2, int columns2,
- double *out)
-{
-#ifndef WITHOUT_BLAS
- /*
- ** USES BLAS DGEMM FUNCTION.
- */
- double One = 1;
- double Zero = 0;
-
- /* Cr <- 1*Ar*Br + 0*Cr */
- dgemm_("N","N", &columns2, &columns2, &columns1, &One,
- in1 , &lines1, in2, &lines2, &Zero, out, &columns2);
-#else
- /*
- ** DO NOT USE ANY BLAS FUNCTION.
- */
- int i = 0;
- int k = 0;
- double accu = 0;
-
- /*
- ** How to convert 2 index matrixes to one.
- ** #define in1(a, b) in1[a+b*lines1]
- ** #define in2(c, d) in2[c+d*lines2]
- */
-
- for (i = 0 ; i < lines1 * columns2 ; ++i)
- {
- accu = 0;
- for (k = 0; k < columns1 ; ++k)
- {
- accu += in1[i % lines1 + k * lines1]
- * in2[k + (i / lines1) * lines2];
- }
- out[i] = accu;
- }
-#endif
-}
-
-/*
-** \brief Compute a multiplication for floats complex matrixes.
-** \param in1 : input matrix.
-** \param lines1 : lines of in1 matrix.
-** \param columns1 : columns of in1 matrix.
-** \param in2 : input arry.
-** \param lines2 : lines of in2 matrix.
-** \param columns2 : columns of in2 matrix.
-** \param out : Matrix that contains the multiplication in1 * in2.
-*/
-void cmulma(floatComplex *in1, int lines1, int columns1,
- floatComplex *in2, int lines2, int columns2,
- floatComplex *out)
-{
- int i = 0;
- int k = 0;
- floatComplex accu = FloatComplex(0, 0);
-
- for (i = 0 ; i < lines1 * columns2 ; ++i)
- {
- accu = FloatComplex(0,0);
- for (k = 0; k < columns1 ; ++k)
- {
- accu = cadds(accu,
- ctimess(in1[i % lines1 + k *lines1] ,
- in2[k + (i / lines1) *lines2] ));
- }
- out[i] = accu;
- }
-}
-
-/*
-** \brief Compute a multiplication for doubles matrixes.
-** \param in1 : input matrix.
-** \param lines1 : lines of in1 matrix.
-** \param columns1 : columns of in1 matrix.
-** \param in2 : input arry.
-** \param lines2 : lines of in2 matrix.
-** \param columns2 : columns of in2 matrix.
-** \param out : Matrix that contains the multiplication in1 * in2.
-*/
-void zmulma(doubleComplex *in1, int lines1, int columns1,
- doubleComplex *in2, int lines2, int columns2,
- doubleComplex *out)
-{
-#ifndef WITHOUT_BLAS
- /*
- ** USES BLAS DGEMM FUNCTION.
- */
- int i = 0;
- double One = 1;
- double MinusOne = -1;
- double Zero = 0;
-
- double *in1Real = malloc((uint) lines1 * (uint) columns1 * sizeof(double));
- double *in1Imag = malloc((uint) lines1 * (uint) columns1 * sizeof(double));
- double *in2Real = malloc((uint) lines2 * (uint) columns2 * sizeof(double));
- double *in2Imag = malloc((uint) lines2 * (uint) columns2 * sizeof(double));
-
- double *RealOut = malloc((uint) lines1 * (uint) columns2 * sizeof(double));
- double *ImagOut = malloc((uint) lines1 * (uint) columns2 * sizeof(double));
-
- zreala(in1, lines1 * columns1, in1Real);
- zreala(in2, lines2 * columns2, in2Real);
- zimaga(in1, lines1 * columns1, in1Imag);
- zimaga(in2, lines2 * columns2, in2Imag);
-
- /* Cr <- 1*Ar*Br + 0*Cr */
- dgemm_("N","N", &lines1, &columns2, &columns1, &One,
- in1Real, &lines1, in2Real, &lines2, &Zero, RealOut, &lines1);
-
- /* Cr <- -1*Ai*Bi + 1*Cr */
- dgemm_("N","N", &lines1, &columns2, &columns1, &MinusOne,
- in1Imag, &lines1, in2Imag, &lines2, &One, RealOut, &lines1);
-
- /* Ci <- 1*Ar*Bi + 0*Ci */
- dgemm_("N","N", &lines1, &columns2, &columns1, &One,
- in1Real, &lines1, in2Imag, &lines2, &Zero, ImagOut, &lines1);
-
- /* Ci <- 1*Ai*Br + 1*Ci */
- dgemm_("N","N", &lines1, &columns2, &columns1, &One,
- in1Imag, &lines1, in2Real, &lines2, &One, ImagOut, &lines1);
-
- /* Now fill output matrix */
- for(i = 0 ; i < lines1 * columns2 ; ++i)
- {
- out[i] = DoubleComplex(RealOut[i], ImagOut[i]);
- }
- /* FREE allocated variables */
- free(in1Real);
- free(in2Real);
- free(in1Imag);
- free(in2Imag);
- free(RealOut);
- free(ImagOut);
-#else
- /*
- ** DO NOT USE ANY BLAS FUNCTION.
- */
- int i = 0;
- int k = 0;
- doubleComplex accu = DoubleComplex(0, 0);
-
- for (i = 0 ; i < lines1 * columns2 ; ++i)
- {
- accu = DoubleComplex(0,0);
- for (k = 0; k < columns1 ; ++k)
- {
- accu = zadds(accu,
- ztimess(in1[i % lines1 + k *lines1] ,
- in2[k + (i / lines1) *lines2] ));
- }
- out[i] = accu;
- }
-#endif
}
diff --git a/src/matrixOperations/multiplication/zmulma.c b/src/matrixOperations/multiplication/zmulma.c
new file mode 100644
index 00000000..30147c75
--- /dev/null
+++ b/src/matrixOperations/multiplication/zmulma.c
@@ -0,0 +1,102 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2008-2008 - INRIA - Bruno JOFRET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef WITHOUT_BLAS
+#include "blas.h"
+#endif
+#include "matrixMultiplication.h"
+
+/*
+** \brief Compute a multiplication for doubles matrixes.
+** \param in1 : input matrix.
+** \param lines1 : lines of in1 matrix.
+** \param columns1 : columns of in1 matrix.
+** \param in2 : input arry.
+** \param lines2 : lines of in2 matrix.
+** \param columns2 : columns of in2 matrix.
+** \param out : Matrix that contains the multiplication in1 * in2.
+*/
+void zmulma(doubleComplex *in1, int lines1, int columns1,
+ doubleComplex *in2, int lines2, int columns2,
+ doubleComplex *out)
+{
+#ifndef WITHOUT_BLAS
+ /*
+ ** USES BLAS DGEMM FUNCTION.
+ */
+ int i = 0;
+ double One = 1;
+ double MinusOne = -1;
+ double Zero = 0;
+
+ double *in1Real = malloc((uint) lines1 * (uint) columns1 * sizeof(double));
+ double *in1Imag = malloc((uint) lines1 * (uint) columns1 * sizeof(double));
+ double *in2Real = malloc((uint) lines2 * (uint) columns2 * sizeof(double));
+ double *in2Imag = malloc((uint) lines2 * (uint) columns2 * sizeof(double));
+
+ double *RealOut = malloc((uint) lines1 * (uint) columns2 * sizeof(double));
+ double *ImagOut = malloc((uint) lines1 * (uint) columns2 * sizeof(double));
+
+ zreala(in1, lines1 * columns1, in1Real);
+ zreala(in2, lines2 * columns2, in2Real);
+ zimaga(in1, lines1 * columns1, in1Imag);
+ zimaga(in2, lines2 * columns2, in2Imag);
+
+ /* Cr <- 1*Ar*Br + 0*Cr */
+ dgemm_("N","N", &lines1, &columns2, &columns1, &One,
+ in1Real, &lines1, in2Real, &lines2, &Zero, RealOut, &lines1);
+
+ /* Cr <- -1*Ai*Bi + 1*Cr */
+ dgemm_("N","N", &lines1, &columns2, &columns1, &MinusOne,
+ in1Imag, &lines1, in2Imag, &lines2, &One, RealOut, &lines1);
+
+ /* Ci <- 1*Ar*Bi + 0*Ci */
+ dgemm_("N","N", &lines1, &columns2, &columns1, &One,
+ in1Real, &lines1, in2Imag, &lines2, &Zero, ImagOut, &lines1);
+
+ /* Ci <- 1*Ai*Br + 1*Ci */
+ dgemm_("N","N", &lines1, &columns2, &columns1, &One,
+ in1Imag, &lines1, in2Real, &lines2, &One, ImagOut, &lines1);
+
+ /* Now fill output matrix */
+ for(i = 0 ; i < lines1 * columns2 ; ++i)
+ {
+ out[i] = DoubleComplex(RealOut[i], ImagOut[i]);
+ }
+ /* FREE allocated variables */
+ free(in1Real);
+ free(in2Real);
+ free(in1Imag);
+ free(in2Imag);
+ free(RealOut);
+ free(ImagOut);
+#else
+ /*
+ ** DO NOT USE ANY BLAS FUNCTION.
+ */
+ int i = 0;
+ int k = 0;
+ doubleComplex accu = DoubleComplex(0, 0);
+
+ for (i = 0 ; i < lines1 * columns2 ; ++i)
+ {
+ accu = DoubleComplex(0,0);
+ for (k = 0; k < columns1 ; ++k)
+ {
+ accu = zadds(accu,
+ ztimess(in1[i % lines1 + k *lines1] ,
+ in2[k + (i / lines1) *lines2] ));
+ }
+ out[i] = accu;
+ }
+#endif
+}