blas-hs-0.1.1.0: Low-level Haskell bindings to Blas.

StabilityExperimental
Safe HaskellSafe
LanguageHaskell98

Blas.Specialized.Float.Unsafe

Contents

Description

Generic interface to Blas using unsafe 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).

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.

The documentation here is still incomplete. Consult the official documentation for more information.

Notation:

  • denotes dot product (without any conjugation).
  • * denotes complex conjugation.
  • denotes transpose.
  • denotes conjugate transpose (Hermitian conjugate).

Conventions:

  • All scalars are denoted with lowercase Greek letters
  • All vectors are denoted with lowercase Latin letters and are assumed to be column vectors (unless transposed).
  • All matrices are denoted with uppercase Latin letters.

Since: 0.1.1

Synopsis

Level 1: vector-vector operations

Givens rotations

rotg :: Ptr Float -> Ptr Float -> Ptr Float -> Ptr Float -> IO () #

Generate a Givens rotation. (Only available for real floating-point types.)

rotmg :: Ptr Float -> Ptr Float -> Ptr Float -> Float -> Ptr Float -> IO () #

Generate a modified Givens rotation. (Only available for real floating-point types.)

rot :: Int -> Ptr Float -> Int -> Ptr Float -> Int -> Float -> Float -> IO () #

Apply a Givens rotation. (Only available for real floating-point types.)

rotm :: Int -> Ptr Float -> Int -> Ptr Float -> Int -> Ptr Float -> IO () #

Apply a modified Givens rotation. (Only available for real floating-point types.)

Basic operations

swap :: Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Swap two vectors:

(x, y) ← (y, x)

scal :: Int -> Float -> Ptr Float -> Int -> IO () #

Multiply a vector by a scalar.

x ← α x

copy :: Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Copy a vector into another vector:

y ← x

axpy :: Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Add a scalar-vector product to a vector.

y ← α x + y

dotu :: Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO Float #

Calculate the bilinear dot product of two vectors:

x ⋅ y ≡ ∑[i] x[i] y[i]

dotc :: Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO Float #

Calculate the sesquilinear dot product of two vectors.

x* ⋅ y ≡ ∑[i] x[i]* y[i]

sdsdot :: Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> IO Float #

Calculate the dot product of two vectors with extended precision accumulation of the intermediate results and add a scalar value to the result. (Only available for the Float type.)

Norm operations

nrm2 :: Int -> Ptr Float -> Int -> IO Float #

Calculate the Euclidean (L²) norm of a vector:

‖x‖₂ ≡ √(∑[i] x[i]²)

asum :: Int -> Ptr Float -> Int -> IO Float #

Calculate the Manhattan (L¹) norm, equal to the sum of the magnitudes of the elements:

‖x‖₁ = ∑[i] |x[i]|

iamax :: Int -> Ptr Float -> Int -> IO Int #

Calculate the index of the element with the maximum magnitude (absolute value).

Level 2: matrix-vector operations

Multiplication

gemv :: Order -> Transpose -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a general matrix-vector update.

y ← α T(A) x + β y

gbmv :: Order -> Transpose -> Int -> Int -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a general banded matrix-vector update.

y ← α T(A) x + β y

hemv :: Order -> Uplo -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a hermitian matrix-vector update.

y ← α A x + β y

hbmv :: Order -> Uplo -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a hermitian banded matrix-vector update.

y ← α A x + β y

hpmv :: Order -> Uplo -> Int -> Float -> Ptr Float -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a hermitian packed matrix-vector update.

y ← α A x + β y

Triangular operations

trmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Multiply a triangular matrix by a vector.

x ← T(A) x

tbmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Multiply a triangular banded matrix by a vector.

x ← T(A) x

tpmv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr Float -> Ptr Float -> Int -> IO () #

Multiply a triangular packed matrix by a vector.

x ← T(A) x

trsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Multiply an inverse triangular matrix by a vector.

x ← T(A⁻¹) x

tbsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Multiply an inverse triangular banded matrix by a vector.

x ← T(A⁻¹) x

tpsv :: Order -> Uplo -> Transpose -> Diag -> Int -> Ptr Float -> Ptr Float -> Int -> IO () #

Multiply an inverse triangular packed matrix by a vector.

x ← T(A⁻¹) x

Rank updates

geru :: Order -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Perform an unconjugated rank-1 update of a general matrix.

A ← α x y⊤ + A

gerc :: Order -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Perform a conjugated rank-1 update of a general matrix.

A ← α x y† + A

her :: Order -> Uplo -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Perform a rank-1 update of a Hermitian matrix.

A ← α x y† + A

hpr :: Order -> Uplo -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> IO () #

Perform a rank-1 update of a Hermitian packed matrix.

A ← α x y† + A

her2 :: Order -> Uplo -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Perform a rank-2 update of a Hermitian matrix.

A ← α x y† + y (α x)† + A

hpr2 :: Order -> Uplo -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Ptr Float -> IO () #

Perform a rank-2 update of a Hermitian packed matrix.

A ← α x y† + y (α x)† + A

Level 3: matrix-matrix operations

Multiplication

gemm #

Arguments

:: Order

Layout of all the matrices.

-> Transpose

The operation T to be applied to A.

-> Transpose

The operation U to be applied to B.

-> Int

Number of rows of T(A) and C.

-> Int

Number of columns of U(B) and C.

-> Int

Number of columns of T(A) and number of rows of U(B).

-> Float

Scaling factor α of the product.

-> Ptr Float

Pointer to a matrix A.

-> Int

Stride of the major dimension of A.

-> Ptr Float

Pointer to a matrix B.

-> Int

Stride of the major dimension of B.

-> Float

Scaling factor β of the original C.

-> Ptr Float

Pointer to a mutable matrix C.

-> Int

Stride of the major dimension of C.

-> IO () 

Perform a general matrix-matrix update.

C ← α T(A) U(B) + β C

symm #

Arguments

:: Order

Layout of all the matrices.

-> Side

Side that A appears in the product.

-> Uplo

The part of A that is used.

-> Int

Number of rows of C.

-> Int

Number of columns of C.

-> Float

Scaling factor α of the product.

-> Ptr Float

Pointer to a symmetric matrix A.

-> Int

Stride of the major dimension of A.

-> Ptr Float

Pointer to a matrix B.

-> Int

Stride of the major dimension of B.

-> Float

Scaling factor α of the original C.

-> Ptr Float

Pointer to a mutable matrix C.

-> Int

Stride of the major dimension of C.

-> IO () 

Perform a symmetric matrix-matrix update.

C ← α A B + β C    or    C ← α B A + β C

where A is symmetric. The matrix A must be in an unpacked format, although the routine will only access half of it as specified by the Uplo argument.

hemm #

Arguments

:: Order

Layout of all the matrices.

-> Side

Side that A appears in the product.

-> Uplo

The part of A that is used.

-> Int

Number of rows of C.

-> Int

Number of columns of C.

-> Float

Scaling factor α of the product.

-> Ptr Float

Pointer to a Hermitian matrix A.

-> Int

Stride of the major dimension of A.

-> Ptr Float

Pointer to a matrix B.

-> Int

Stride of the major dimension of B.

-> Float

Scaling factor α of the original C.

-> Ptr Float

Pointer to a mutable matrix C.

-> Int

Stride of the major dimension of C.

-> IO () 

Perform a Hermitian matrix-matrix update.

C ← α A B + β C    or    C ← α B A + β C

where A is Hermitian. The matrix A must be in an unpacked format, although the routine will only access half of it as specified by the Uplo argument.

Rank updates

syrk :: Order -> Uplo -> Transpose -> Int -> Int -> Float -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a symmetric rank-k update.

C ← α A A⊤ + β C    or    C ← α A⊤ A + β C

herk :: Order -> Uplo -> Transpose -> Int -> Int -> Float -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a Hermitian rank-k update.

C ← α A A† + β C    or    C ← α A† A + β C

syr2k :: Order -> Uplo -> Transpose -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a symmetric rank-2k update.

C ← α A B⊤ + α* B A⊤ + β C    or    C ← α A⊤ B + α* B⊤ A + β C

her2k :: Order -> Uplo -> Transpose -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> Float -> Ptr Float -> Int -> IO () #

Perform a Hermitian rank-2k update.

C ← α A B† + α* B A† + β C    or    C ← α A† B + α* B† A + β C

Triangular operations

trmm :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Perform a triangular matrix-matrix multiplication.

B ← α T(A) B    or    B ← α B T(A)

where A is triangular.

trsm :: Order -> Side -> Uplo -> Transpose -> Diag -> Int -> Int -> Float -> Ptr Float -> Int -> Ptr Float -> Int -> IO () #

Perform an inverse triangular matrix-matrix multiplication.

B ← α T(A⁻¹) B    or    B ← α B T(A⁻¹)

where A is triangular.