Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/jhumphry/LALG

This is an Ada 2012 package that provides an interface to BLAS.
https://github.com/jhumphry/LALG

Last synced: 2 months ago
JSON representation

This is an Ada 2012 package that provides an interface to BLAS.

Lists

README

        

# LALG

## Introduction

This is an Ada 2012 package that provides an interface to dense linear
algebra packages. Initially the focus is on
[BLAS](http://www.netlib.org/blas), which has been covered except for
routines working on banded matrices.

Other Ada interfaces to BLAS exist, but they tend to have limitations.
Any Ada compiler that supports `Interfaces.Fortran` can compile an
interface that calls the routines in BLAS, passing in Ada arrays with
`Convention => Fortran` set or, with a little more work, mutating the
operand order and the various `TRANS` parameters to allow Ada arrays
with the default `Convention` to be used. Such an interface can do
basic linear algebra operations, but it cannot operate on sub-slices or
sub-blocks of vectors or matrices without making temporary copies.

The aim of this project is to develop a set of vector and matrix types
in a tagged type hierarchy that encompasses both types that wrap
'concrete' in-memory arrays and types that provide a 'view' onto a
slice or sub-block of one of the 'concrete' types. If `A` is an object
of type `Concrete_Real_Matrix`, for example, then `A.Row(2)` will
return a `Real_Matrix_Vector` object which can be used by any routine
which requires a vector and will operate in-place on the second row of
the matrix `A`. This requires some assumptions about ABI compatibility
between Ada and Fortran on the platform in question, but in practice few
problems are expected.

The Ada subprograms in `LALG.Real_BLAS` have the same names as in BLAS,
but without the precision specifier `s` or `d` (which are unnecessary as
`LALG` will have been instantiated for one precision or the other).
Parameters relating to the size or stride of the inputs are not
required, as the vector and matrix types will provide the correct
values each time.

A set of unit tests has been provided. These do not test the BLAS
library for correctness or accuracy. Instead they run limited checks
against each routine in the Ada interface to make sure that the
interfacing with the Fortran code is functional.

Two `.gpr` project files have been provided for those using
GNAT/GPRBuild. There are two parameters - a `mode` parameters that can
be set to `debug` or `optimize` and a `blas` parameter that can be set
to `system`, `netlib` or `openblas` to select the BLAS library that you
wish to link to. It may be necessary to change the 'Linker' settings in
`lalg_tests.gpr` if your desired BLAS library is not in the expected
place.

## Copyright license

The package is provided under the ISC license:

> Copyright (c) 2015 - 2022, James Humphry
>
> Permission to use, copy, modify, and/or distribute this software for any
> purpose with or without fee is hereby granted, provided that the above
> copyright notice and this permission notice appear in all copies.
>
> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
> REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
> AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
> INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
> LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
> OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
> PERFORMANCE OF THIS SOFTWARE.