Ejemplo n.º 1
0
        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());
        }