Stability | experimental |
---|---|
Safe Haskell | None |
Generic interface to Blas using safe foreign calls. Refer to the GHC documentation for more information regarding appropriate use of safe and unsafe foreign calls.
The functions here are named in a similar fashion to the original Blas
interface, with the type-dependent letter(s) removed. Some functions have
been merged with others to allow the interface to work on both real and
complex numbers. If you can't a particular function, try looking for its
corresponding complex equivalent (e.g. symv
is a special case of hemv
applied to real numbers).
It'd be really nice if these functions were actually documented. Alas, for the time being, you'll have to refer to the various Blas docs scattered across the Internet. Note that the interface is based off of CBlas, not Fortran Blas, which is slightly different.
- class (Floating a, Storable a) => Numeric a where
- type RealType a :: *
- dotu :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO a
- dotc :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO a
- nrm2 :: Int -> Ptr a -> Int -> IO (RealType a)
- asum :: Int -> Ptr a -> Int -> IO (RealType a)
- iamax :: Int -> Ptr a -> Int -> IO Int
- swap :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- copy :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- axpy :: Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- scal :: Int -> a -> Ptr a -> Int -> IO ()
- gemv :: Order -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- gbmv :: Order -> Transpose -> Int -> Int -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- trmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- tbmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- tpmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a -> Int -> IO ()
- trsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- tbsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- tpsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a -> Int -> IO ()
- hemv :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- hbmv :: Order -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- hpmv :: Order -> Uplo -> Int -> a -> Ptr a -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- geru :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- gerc :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- her :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- hpr :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int -> Ptr a -> IO ()
- her2 :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- hpr2 :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> IO ()
- gemm :: Order -> Transpose -> Transpose -> Int -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- symm :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- syrk :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- syr2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- hemm :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()
- herk :: Order -> Uplo -> Transpose -> Int -> Int -> RealType a -> Ptr a -> Int -> RealType a -> Ptr a -> Int -> IO ()
- her2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> RealType a -> Ptr a -> Int -> IO ()
- trmm :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- trsm :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()
- class Numeric a => RealNumeric a where
- dsdot :: Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO Double
- sdsdot :: Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> IO Float
Documentation
class (Floating a, Storable a) => Numeric a whereSource
Blas operations that are applicable to real and complex numbers.
Instances are defined for the 4 types supported by Blas: the single- and double-precision floating point types and their complex versions.
dotu :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO aSource
dotc :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO aSource
nrm2 :: Int -> Ptr a -> Int -> IO (RealType a)Source
asum :: Int -> Ptr a -> Int -> IO (RealType a)Source
iamax :: Int -> Ptr a -> Int -> IO IntSource
swap :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
copy :: Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
axpy :: Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
scal :: Int -> a -> Ptr a -> Int -> IO ()Source
gemv :: Order -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
gbmv :: Order -> Transpose -> Int -> Int -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
trmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
tbmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
tpmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a -> Int -> IO ()Source
trsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
tbsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
tpsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr a -> Ptr a -> Int -> IO ()Source
hemv :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
hbmv :: Order -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
hpmv :: Order -> Uplo -> Int -> a -> Ptr a -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
geru :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
gerc :: Order -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
her :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
hpr :: Order -> Uplo -> Int -> RealType a -> Ptr a -> Int -> Ptr a -> IO ()Source
her2 :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
hpr2 :: Order -> Uplo -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> Ptr a -> IO ()Source
:: Order | Layout of all matrices. |
-> Transpose | ( |
-> Transpose | ( |
-> Int | ( |
-> Int | ( |
-> Int | ( |
-> a | ( |
-> Ptr a | ( |
-> Int | ( |
-> Ptr a | ( |
-> Int | ( |
-> a | ( |
-> Ptr a | ( |
-> Int | ( |
-> IO () |
Calculate a general matrix-matrix product:
c := alpha * opa(a) * opb(b) + beta * c
where opa
and opb
are operations specified by transa
and
transb
respectively.
symm :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
syrk :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
syr2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
hemm :: Order -> Side -> Uplo -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> a -> Ptr a -> Int -> IO ()Source
herk :: Order -> Uplo -> Transpose -> Int -> Int -> RealType a -> Ptr a -> Int -> RealType a -> Ptr a -> Int -> IO ()Source
her2k :: Order -> Uplo -> Transpose -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> RealType a -> Ptr a -> Int -> IO ()Source
trmm :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
trsm :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int -> a -> Ptr a -> Int -> Ptr a -> Int -> IO ()Source
class Numeric a => RealNumeric a whereSource
Blas operations that are only applicable to real numbers.
Note: although complex versions of rot
and rotg
exist in many
implementations, they are not part of the official Blas standard and
therefore not included here. If you really need them, submit a ticket
so we can try to come up with a solution.