haskell bindings for blas and lapack
C++ Haskell
Failed to load latest commit information.
examples symm tests Apr 10, 2015
src/Numerical/HBLAS in between state of massive refactor of lovely GSOC work Jan 10, 2016
tests Merge branch 'remerge-gsoc-target' into remerge-gsoc Jan 10, 2016
unused-ffi-utils
.gitignore BLAS: symm added Mar 29, 2015
.travis.yml modernizing the travis and deps Jan 10, 2016
LICENSE first commit Dec 26, 2013
Setup.hs
changelog.md 0.3.1.1 release, bug fixes in show and improved tests Jun 18, 2014
hblas.cabal modernizing the travis and deps Jan 11, 2016
readme.md fix readme Jan 10, 2016

readme.md

Wellposed

About hblas

hblas is an open source component of the Wellposed® mathematical software suite.

Members of the numerical haskell open source community can be found on irc at #numerical-haskell on freenode, and via the numericalhaskell mailing list.

Build Status

hblas is a self contained full (well, not quite yet) BLAS and LAPACK binding that provides the full BLAS and LAPACKE APIs in a simple, unopinionated, Haskell wrapper.

This library is NOT meant to be used by end users, it is designed to be an unopinionated, simple, portable, easy to install BLAS/LAPACK substrate for higher level numerical computing libraries to build upon. Morever, this library is strictly a wrapper, and simply makes using the functionality of BLAS and LAPACK more accessible.

This library is NOT meant to be used a standalone array library (except in desperation), but rather should be used by a higher level numerical array library to provide high performance linear algebra routines.

Install

By default, hblas will assume you have BLAS and LAPACK built and installed.

OSX

On OS X systems, things will just work.

$ cabal install

Linux

On linux and bsd systems, you will need to manually install the BLAS and LAPACK libraries beforehand.

$ sudo apt-get install libblas liblapack
$ cabal install

Testing

To run the test suite execute:

$ cabal test

Linking

If you get an error like undefined reference to 'cblas_sdsdot' when building or running an HBLAS program, you might be on a system that builds BLAS and CBLAS separately, such as Arch Linux.

In which case, be sure to install CBLAS and invoke cabal install hblas -fCBLAS to make sure hblas links to CBLAS properly.

Usage

API is subject to change.

import Foreign.Storable
import Numerical.HBLAS.BLAS
import Numerical.HBLAS.MatrixTypes

-- Generate the constant mutable square matrix of the given type and dimensions.
constMatrix :: Storable a => Int -> a -> IO (IODenseMatrix Row a)
constMatrix n k = generateMutableDenseMatrix SRow (n,n) (const k)

example_dgemm :: IO ()
example_dgemm = do
    left  <- constMatrix 2 (2 :: Double)
    right <- constMatrix 2 (3 :: Double)
    out   <- constMatrix 2 (0 :: Double)

    dgemm NoTranspose NoTranspose 1.0 1.0 left right out

    resulting <- mutableVectorToList $ _bufferDenMutMat out
    print resulting

Getting Involved

Patches, bug reports, tests, and other contributions welcome.

If you want to add a new routine, check out the ones listed in the lapack section of the Intel MKL manual to get some human readable documentation.

Commercial Support

I have > 32bit size arrays, help!

Congrats, you have ``big compute on big data'', contact Carter and we'll try to help you out.