Optimized row version of vector_scale with approx 20% improvement

release/4.3a0
Alex Cunningham 2010-01-20 02:04:25 +00:00
parent ecde508318
commit 820ae5682d
2 changed files with 8 additions and 3 deletions

View File

@ -545,9 +545,13 @@ return collect(matrices);
// row scaling // row scaling
Matrix vector_scale(const Vector& v, const Matrix& A) { Matrix vector_scale(const Vector& v, const Matrix& A) {
Matrix M(A); Matrix M(A);
for (int i=0; i<A.size1(); ++i) { size_t m = A.size1(); size_t n = A.size2();
for (int j=0; j<A.size2(); ++j) { for (size_t i=0; i<m; ++i) { // loop over rows
M(i,j) *= v(i); double vi = v(i);
//double vi = *(v.data().begin()+i); // not really an improvement
for (size_t j=0; j<n; ++j) { // loop over columns
double * Mptr = M.data().begin() + i*n + j;
(*Mptr) = (*Mptr) * vi;
} }
} }
return M; return M;

View File

@ -87,6 +87,7 @@ double timeVScaleColumn(size_t m, size_t n, size_t reps) {
* Results: * Results:
* Alex's Machine: * Alex's Machine:
* - Original: 0.54 sec (x1000) * - Original: 0.54 sec (x1000)
* - 1st rev : 0.44 sec (x1000)
*/ */
double timeVScaleRow(size_t m, size_t n, size_t reps) { double timeVScaleRow(size_t m, size_t n, size_t reps) {
// make a matrix to scale // make a matrix to scale