BLAS Level 3 Routines

?gemm performs a matrix-matrix operation
```c := alpha*op(a)*op(b) + beta*c```,
where `c` is an `m`-by-`n` matrix,
`op(a)` is an `m`-by-`k` matrix,
`op(b)` is a `k`-by-`n` matrix.
For the definition of `op(a)` and `op(b)`, see Matrix Arguments.
``` call sgemm (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) call dgemm (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) call cgemm (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) call zgemm (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc) ```

?hemm performs one of the following matrix-matrix operations:
```c := alpha*a*b + beta*c```  for `side` = `'L'`or`'l'`
```c := alpha*b*a + beta*c```  for `side` = `'R'`or`'r'`,
where `a` is a Hermitian matrix,
`b` and `c` are `m`-by-`n` matrices.
``` call chemm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) call zhemm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) ```

?herk performs a rank-n update of a Hermitian matrix, that is, one of the following operations:
```c := alpha*a*conjug(a') + beta*c```  for `trans` = `'N'`or`'n'`
```c := alpha*conjug(a')*a + beta*c```  for `trans` = `'C'`or`'c'`,
where `c` is an `n`-by-`n` Hermitian matrix;
`a` is an `n`-by-`k` matrix, if `trans` = `'N'`or`'n'`,
`a` is a `k`-by-`n` matrix, if `trans` = `'C'`or`'c'`.
``` call cherk (uplo, trans, n, k, alpha, a, lda, beta, c, ldc) call zherk (uplo, trans, n, k, alpha, a, lda, beta, c, ldc) ```

?her2k performs a rank-2k update of an `n`-by-`n` Hermitian matrix `c`, that is, one of the following operations:
```c := alpha*a*conjg(b') + conjg(alpha)*b*conjg(a') + beta*c```,  for `trans` = `'N'`or`'n'`
```c := alpha*conjg(b')*a + conjg(alpha)*conjg(a')*b + beta*c```,  for `trans` = `'C'`or`'c'`
where `c` is an `n`-by-`n` Hermitian matrix;
`a` and `b` are `n`-by-`k` matrices if `trans` = `'N'`or`'n'`,
`a` and `b` are `k`-by-`n` matrices if `trans` = `'C'`or`'c'`.
``` call cher2k (uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc) call zher2k (uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc) ```

?symm performs one of the following matrix-matrix operations using symmetric matrices:
```c := alpha*a*b + beta*c```  for `side` = `'L'`or`'l'`
```c := alpha*b*a + beta*c```  for `side` = `'R'`or`'r'`,
where `a` is a symmetric matrix,
`b` and `c` are `m`-by-`n` matrices.
``` call ssymm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) call dsymm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) call csymm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) call zsymm (side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc) ```

?syrk performs a rank-n update of an `n`-by-`n` symmetric matrix `c`, that is, one of the following operations:
```c := alpha*a*a' + beta*c```  for `trans` = `'N'`or`'n'`
```c := alpha*a'*a + beta*c```  for `trans` = `'T'`or`'t'`,`'C'`or`'c'`,
where `c` is an `n`-by-`n` symmetric matrix;
`a` is an `n`-by-`k` matrix, if `trans` = `'N'`or`'n'`,
`a` is a `k`-by-`n` matrix, if `trans` = `'T'`or`'t'`,`'C'`or`'c'`.
``` call ssyrk (uplo, trans, n, k, alpha, a, lda, beta, c, ldc) call dsyrk (uplo, trans, n, k, alpha, a, lda, beta, c, ldc) call csyrk (uplo, trans, n, k, alpha, a, lda, beta, c, ldc) call zsyrk (uplo, trans, n, k, alpha, a, lda, beta, c, ldc) ```

?syr2k performs a rank-2k update of an `n`-by-`n` symmetric matrix `c`, that is, one of the following operations:
```c := alpha*a*b' + alpha*b*a' + beta*c```  for `trans` = `'N'`or`'n'`
```c := alpha*a'*b + alpha*b'*a + beta*c```  for `trans` = `'T'`or`'t'`,
where `c` is an `n`-by-`n` symmetric matrix;
`a` and `b` are `n`-by-`k` matrices, if `trans` = `'N'`or`'n'`,
`a` and `b` are `k`-by-`n` matrices, if `trans` = `'T'`or`'t'`.
``` call ssyr2k (uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc) call dsyr2k (uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc) call csyr2k (uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc) call zsyr2k (uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc) ```

?trmm performs one of the matrix-matrix operations using triangular matrices:
`b := alpha*op(a)*b`  for `side` = `'L'`or`'l'`
`b := alpha*b*op(a)`  for `side` = `'R'`or`'r'`,
where `b` is an `m`-by-`n` general matrix, and `a` is triangular;
`op(a)` must be an `m`-by-`m` matrix, if `side` = `'L'`or`'l'`
`op(a)` must be an `n`-by-`n` matrix, if `side` = `'R'`or`'r'`.
For the definition of `op(a)`, see Matrix Arguments.
``` call strmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) call dtrmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) call ctrmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) call ztrmm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) ```

?trsm solves one of the following matrix equations:
`op(a)*x = alpha*b`  or  `x*op(a) = alpha*b`,
where `x` and `b` are `m`-by-`n` general matrices, and `a` is triangular;
`op(a)` must be an `m`-by-`m` matrix, if `side` = `'L'`or`'l'`
`op(a)` must be an `n`-by-`n` matrix, if `side` = `'R'`or`'r'`.
For the definition of `op(a)`, see Matrix Arguments.
The routine overwrites `x` on `b`.
``` call strsm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) call dtrsm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) call ctrsm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) call ztrsm (side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb) ```

* Legal Information © 1999, 2002-2004, Intel Corporation