Reduce row swaps

Improves performance by ~1%
This commit is contained in:
Christopher Berner 2019-03-23 13:29:00 -07:00
parent 1431ace8bf
commit 919b4a0f5b
2 changed files with 7 additions and 6 deletions

@ -52,8 +52,8 @@ impl OctetMatrix {
self.elements.swap(i, j);
}
pub fn swap_columns(&mut self, i: usize, j:usize) {
for row in 0..self.elements.len() {
pub fn swap_columns(&mut self, i: usize, j: usize, start_row: usize) {
for row in start_row..self.elements.len() {
self.elements[row].swap(i, j);
}
}

@ -376,9 +376,10 @@ impl IntermediateSymbolDecoder {
else {
dest = self.A.width() - self.u - swapped_columns;
}
self.swap_columns(dest, col);
// No need to swap the first i rows, as they are all zero (see submatrix above V)
self.swap_columns(dest, col, self.i);
// Also apply to X
self.X.swap_columns(dest, col);
self.X.swap_columns(dest, col, 0);
swapped_columns += 1;
if swapped_columns == r {
break;
@ -788,8 +789,8 @@ impl IntermediateSymbolDecoder {
self.d.swap(i, iprime);
}
fn swap_columns(&mut self, j: usize, jprime: usize) {
self.A.swap_columns(j, jprime);
fn swap_columns(&mut self, j: usize, jprime: usize, start_row: usize) {
self.A.swap_columns(j, jprime, start_row);
self.c.swap(j, jprime);
}