message: remove blocking strategy for csr-dense product, was painfully slow
diff: @@ -220,29 +220,12 @@ where N: 'a + Num + Copy,
  if !rhs.is_standard_layout() && rhs.shape()[1] != 1 {
  panic!("Storage mismatch");
  }
  - // for now we implement a naive strategy, but later on it would
  - // be nice to pick a data dependent block-size to optimize caching effects
  - let lblock_size = 4;
  - let rblock_size = 4;
  +
  let axis0 = Axis(0);
  - for (mut oblock, lblock) in out.axis_chunks_iter_mut(axis0, lblock_size)
  - .zip(lhs.outer_block_iter(lblock_size)) {
  - for (rcount, rblock) in rhs.axis_chunks_iter(axis0, rblock_size)
  - .enumerate() {
  - let col_start = rblock_size * rcount;
  - let col_end = col_start + rblock_size;
  -
  - for (line, mut oline) in lblock.outer_iterator()
  - .zip(oblock.axis_iter_mut(axis0)) {
  - 'col_block: for (col_ind, &lval) in line.iter() {
  - if col_ind < col_start {
  - continue 'col_block;
  - }
  - if col_ind >= col_end {
  - break 'col_block;
  - }
  - let k_inblock = col_ind - col_start;
  - let rline = rblock.subview(axis0, k_inblock);
  + for (line, mut oline) in lhs.outer_iterator().zip(out.axis_iter_mut(axis0)) {
  + for (col_ind, &lval) in line.iter() {
  + let rline = rhs.row(col_ind);
  + // TODO: call an axpy primitive to benefit from vectorisation?
  for (oval, &rval) in oline.iter_mut().zip(rline.iter()) {
  let prev = *oval;
  *oval = prev + lval * rval;
  @@ -250,8 +233,6 @@ where N: 'a + Num + Copy,
  }
  }
  }
  - }
  -}
  /// CSC-dense rowmaj multiplication
  ///
  