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
Matrix vector_scale(const Vector& v, const Matrix& A) {
Matrix M(A);
for (int i=0; i<A.size1(); ++i) {
for (int j=0; j<A.size2(); ++j) {
M(i,j) *= v(i);
size_t m = A.size1(); size_t n = A.size2();
for (size_t i=0; i<m; ++i) { // loop over rows
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;

View File

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