public static void Multiple(TensorOld a, TensorOld b, TensorOld result) { var rows = a.shape[0]; var cols = b.shape[1]; var bStep = a.shape[1]; Parallel.For(0, rows, i => { var aStart = a.GetRawOffset(i, 0); var resultStart = result.GetRawOffset(i, 0); Parallel.For(0, cols, j => { var sum = 0d; var bStart = b.GetRawOffset(0, j); for (int k = 0; k < bStep; k++) { sum += a.values[aStart + k] * b.values[k * cols + j]; } //result.values[i * cols + j] = sum; result.SetValueFast(sum, i, j); }); }); }