Improve performance of map_row()

Before:

    test bench_solve100  ... bench:      64,727 ns/iter (+/- 691)
    test bench_solve1000 ... bench:   7,160,735 ns/iter (+/- 315,280)

After:

    test bench_solve100  ... bench:      59,998 ns/iter (+/- 4,502)
    test bench_solve1000 ... bench:   6,761,411 ns/iter (+/- 379,337)
This commit is contained in:
Michael Neumann 2015-10-20 01:00:25 +02:00
parent f8329d5994
commit d33071e044

View File

@ -51,9 +51,13 @@ impl<T: Copy> SquareMatrix<T> {
#[inline(always)] #[inline(always)]
pub fn map_row<F: Fn(T) -> T>(&mut self, row: usize, f: F) { pub fn map_row<F: Fn(T) -> T>(&mut self, row: usize, f: F) {
for col in 0..self.n { assert!(row < self.n);
let n = f(self[(row, col)]);
self[(row, col)] = n; let mut row_slice = &mut self.data[row*self.n .. (row+1)*self.n];
debug_assert!(row_slice.len() == self.n);
for elm in row_slice.iter_mut() {
*elm = f(*elm);
} }
} }