Optimized row version of vector_scale with approx 20% improvement
parent
ecde508318
commit
820ae5682d
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue