GSL-OCaml is an interface to the GSL (GNU scientific library) for the OCaml-language. The latest GSL-version known to be compatible is 2.0.
The platform must not align doubles on double-word addresses, i.e. it should not
define the C-macro ARCH_ALIGN_DOUBLE in the OCaml C-configuration header in
<caml/config.h>.
The underlying GSL-library depends on a C-implementation of the BLAS-library
(Basic Linear Algebra Subroutines). It comes with its own implementation,
gslcblas, which GSL will link with by default.
This implementation is typically considerably slower than alternatives like OpenBLAS or ATLAS (Automatically Tuned Linear Algebra Software) or miscellaneous platform-specific vendor implementations.
If you want GSL-OCaml to link with another BLAS-implementation by default, you
will need to set an environment variable before starting the build process (e.g.
before opam install):
export GSL_CBLAS_LIB=-lopenblasNote that on Mac OS X GSL-OCaml requires the Apple-specific, highly optimized
vendor library vecLib, which is part of the Accelerate-framework, and will
automatically link with it. If you do not wish to use Accelerate you can
override it; for a Homebrew-installed OpenBlas in the usual place you then
need to
export GSL_CBLAS_LIB="-L/usr/local/opt/openblas/lib/ -lopenblas"Read the GSL manual to learn more about the GNU Scientific Library, and also the GSL-OCaml API.
Data types for handling vectors and matrices:
-
Modules
Gsl.Vector,Gsl.Vector.Single,Gsl.Vector_complex,Gsl.Vector_complex.Single, and the corresponding matrix modules use bigarrays with single or double precision and real or complex values. -
Modules
Gsl.Vector_flat,Gsl.Vector_complex_flat, and the corresponding matrix modules use a record wrapping a regular OCaml float array. This approach mirrors thegsl_vectorandgsl_matrixstructs in GSL. -
Module
Gsl.Vectmatdefines a sum type with polymorphic variants that regroups these two representations. For instance:Gsl.Vectmat.v_add (`V v1) (`VF v2)
adds a vector in an OCaml array to a bigarray.
-
Modules
Gsl.Blas Gsl.Blas_flatandGsl.Blas_genprovide an incomplete interface to CBLAS for these types.
Errors in GSL functions raise exceptions:
Gsl.Error.Gsl_exn (errno, msg)You have to call Gsl.Error.init () to initialize error reporting. Otherwise,
the default GSL error handler aborts the program, leaving a core dump (rather
unhelpful with OCaml).
If a callback (for minimizers, solvers, etc.) raises an exception, GSL-OCaml
either returns GSL_FAILURE or NaN to GSL depending on the callback.
In either case the original OCaml exception is not propagated. The GSL function
will either return succesfully (but probably with values containing NaNs
somewhere) or raise a Gsl_exn exception.
Please submit bugs reports, feature requests, contributions to the GitHub issue tracker.
Up-to-date information is available at: https://mmottl.github.io/gsl-ocaml