func (Implementation) Dgemm(tA, tB blas.Transpose, m, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) {
	if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans {
		panic(badTranspose)
	}
	if tB != blas.NoTrans && tB != blas.Trans && tB != blas.ConjTrans {
		panic(badTranspose)
	}
	aTrans := tA == blas.Trans || tA == blas.ConjTrans
	if aTrans {
		checkDMatrix('a', k, m, a, lda)
	} else {
		checkDMatrix('a', m, k, a, lda)
	}
	bTrans := tB == blas.Trans || tB == blas.ConjTrans
	if bTrans {
		checkDMatrix('b', n, k, b, ldb)
	} else {
		checkDMatrix('b', k, n, b, ldb)
	}
	checkDMatrix('c', m, n, c, ldc)
	if beta != 1 {
		if beta == 0 {
			for i := 0; i < m; i++ {
				ctmp := c[i*ldc : i*ldc+n]
				for j := range ctmp {
					ctmp[j] = 0
				}
			}
		} else {
			for i := 0; i < m; i++ {
				ctmp := c[i*ldc : i*ldc+n]
				for j := range ctmp {
					ctmp[j] *= beta
				}
			}
		}
	}
	dgemmParallel(aTrans, bTrans, m, n, k, a, lda, b, ldb, c, ldc, alpha)
}
Dgemm computes
C = beta * C + alpha * A * B,
where A, B, and C are dense matrices, and alpha and beta are scalars.
tA and tB specify whether A or B are transposed.
package gonum
import (
	"runtime"
	"sync"
	"gonum.org/v1/gonum/blas"
	"gonum.org/v1/gonum/internal/asm/f64"
)