code: private static void multiplyAxB(final double[] aBlock, final double[] bBlock,
  			final double[] cBlock, final int step) {
  		final int blockStripeMini = step % 3;
  		final int blockStripeMaxi = step / 3;
  		final int blockArea = step * step;
  
  		for (int iL = 0; iL < blockArea; iL += step) {
  			int rc = iL;
  
  			for (int kL = 0; kL < blockArea; kL += step) {
  				int ra = iL;
  				int rb = kL;
  				double sum = 0.0d;
  
  				for (int jL = blockStripeMini; --jL >= 0;) {
  					sum += aBlock[ra++] * bBlock[rb++];
  				}
  
  				// loop unrolling
  				for (int jL = blockStripeMaxi; --jL >= 0;) {
  					sum += aBlock[ra++] * bBlock[rb++] //
  							+ aBlock[ra++] * bBlock[rb++] //
  							+ aBlock[ra++] * bBlock[rb++];
  				}
  
  				cBlock[rc++] += sum;
  			}
  		}
  	}
docs: Multiply row-major block (a) x column-major block (b), and add to block
  c.
  
  @param a
  - block from {@link #matrixA}
  @param b
  - block from {@link #matrixB}
  @param c
  - block from result matrix {@link #matrixC}