static string gemm <M, N>(bool silent = true) where M : ITypeNat, new() where N : ITypeNat, new() { var m = nati <M>(); var n = nati <N>(); (var method, var introMsg) = varintro($"{m}x{n} * {n}x{m} = {m}x{m}", silent); var count = m * n; var srcA = span <double>(count); for (var i = 1; i <= count; i++) { srcA[i - 1] = i; } var a = BlockMatrix.Load <M, N, double>(srcA); var srcB = span <double>(m * n); for (var i = 1; i <= count; i++) { srcB[i - 1] = i; } var b = BlockMatrix.Load <N, M, double>(srcB); (var timer, var startMsg) = input( nameof(a), a.Format(), nameof(b), b.Format(), silent ); var c = mkl.gemm(a, b); var time = snapshot(timer); var finaleMsg = finale(nameof(c), c.Format(), timer, silent, method); var report = sbuild(); report.AppendLine(introMsg); report.AppendLine(startMsg); report.AppendLine(finaleMsg); return(report.ToString()); }