# HG changeset patch # User Jaroslav Hajek # Date 1252227619 -7200 # Node ID cbabf50315caaa1cdaed9c8163c45647bac21e7d # Parent 3fc7272937ce5bae3f982202e10bff6db7b433a0 optimize Matrix*ColumnVector diff -r 3fc7272937ce -r cbabf50315ca liboctave/CColVector.cc --- a/liboctave/CColVector.cc Sun Sep 06 10:54:36 2009 +0200 +++ b/liboctave/CColVector.cc Sun Sep 06 11:00:19 2009 +0200 @@ -340,20 +340,17 @@ gripe_nonconformant ("operator *", nr, nc, a_len, 1); else { - if (nc == 0 || nr == 0) - retval.resize (nr, 0.0); - else - { - octave_idx_type ld = nr; + retval.clear (nr); + + if (nr != 0) + { + Complex *y = retval.fortran_vec (); - retval.resize (nr); - Complex *y = retval.fortran_vec (); - - F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0, m.data (), ld, - a.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0, m.data (), nr, + a.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); + } } return retval; diff -r 3fc7272937ce -r cbabf50315ca liboctave/ChangeLog --- a/liboctave/ChangeLog Sun Sep 06 10:54:36 2009 +0200 +++ b/liboctave/ChangeLog Sun Sep 06 11:00:19 2009 +0200 @@ -1,3 +1,14 @@ +2009-09-06 Jaroslav Hajek + + * dColVector.h (operator *(const Matrix&, const ColumnVector)): + Optimize. + * fColVector.h (operator *(const FloatMatrix&, const + FloatColumnVector)): Optimize. + * CColVector.h (operator *(const ComplexMatrix&, const + ComplexColumnVector)): Optimize. + * fCColVector.h (operator *(const FloatComplexMatrix&, const + FloatComplexColumnVector)): Optimize. + 2009-09-04 Jaroslav Hajek * Array.cc (Array::clear (const dim_vector&)): new method. diff -r 3fc7272937ce -r cbabf50315ca liboctave/dColVector.cc --- a/liboctave/dColVector.cc Sun Sep 06 10:54:36 2009 +0200 +++ b/liboctave/dColVector.cc Sun Sep 06 11:00:19 2009 +0200 @@ -209,20 +209,17 @@ gripe_nonconformant ("operator *", nr, nc, a_len, 1); else { - if (nr == 0 || nc == 0) - retval.resize (nr, 0.0); - else - { - octave_idx_type ld = nr; + retval.clear (nr); + + if (nr != 0) + { + double *y = retval.fortran_vec (); - retval.resize (nr); - double *y = retval.fortran_vec (); - - F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0, m.data (), ld, - a.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0, m.data (), nr, + a.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); + } } return retval; diff -r 3fc7272937ce -r cbabf50315ca liboctave/fCColVector.cc --- a/liboctave/fCColVector.cc Sun Sep 06 10:54:36 2009 +0200 +++ b/liboctave/fCColVector.cc Sun Sep 06 11:00:19 2009 +0200 @@ -340,20 +340,17 @@ gripe_nonconformant ("operator *", nr, nc, a_len, 1); else { - if (nc == 0 || nr == 0) - retval.resize (nr, 0.0); - else - { - octave_idx_type ld = nr; + retval.clear (nr); + + if (nr != 0) + { + FloatComplex *y = retval.fortran_vec (); - retval.resize (nr); - FloatComplex *y = retval.fortran_vec (); - - F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0, m.data (), ld, - a.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0f, m.data (), nr, + a.data (), 1, 0.0f, y, 1 + F77_CHAR_ARG_LEN (1))); + } } return retval; diff -r 3fc7272937ce -r cbabf50315ca liboctave/fColVector.cc --- a/liboctave/fColVector.cc Sun Sep 06 10:54:36 2009 +0200 +++ b/liboctave/fColVector.cc Sun Sep 06 11:00:19 2009 +0200 @@ -209,20 +209,17 @@ gripe_nonconformant ("operator *", nr, nc, a_len, 1); else { - if (nr == 0 || nc == 0) - retval.resize (nr, 0.0); - else - { - octave_idx_type ld = nr; + retval.clear (nr); + + if (nr != 0) + { + float *y = retval.fortran_vec (); - retval.resize (nr); - float *y = retval.fortran_vec (); - - F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0, m.data (), ld, - a.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0f, m.data (), nr, + a.data (), 1, 0.0f, y, 1 + F77_CHAR_ARG_LEN (1))); + } } return retval;