Mir GLAS is a C library and passes Natlib's test suite! And questions :-)

Ilya Yaroshenko via Digitalmars-d digitalmars-d at puremagic.com
Thu Oct 27 23:31:19 PDT 2016


On Friday, 28 October 2016 at 03:44:05 UTC, Andrei Alexandrescu 
wrote:
> On 10/27/16 3:59 AM, Ilya Yaroshenko wrote:
>> Mir GLAS (Generic Linear Algebra Subprograms) has its own 
>> repository [1]
>> now.
>>
>> Big news:
>>
>> 1. Mir GLAS does not require D / C++ runtime and can be used 
>> in any
>> programming language as common C library! See read README [1] 
>> for more
>> details.
>
> Cool work!
>
> One thing I'd want to understand is how to use Mir GLAS from 
> within D itself. If it's a straight C interface, there seems to 
> be a fair amount of friction (we have a D program communicating 
> with a D library through the uncomfortable confines of a C 
> interface). Is that the case? Should there be a way to short 
> circuit the C API and use a more expressive D interface? 
> (Looking e.g. at Eigen, it's meant to allow people using it 
> from C++ to take advantage of a C++-specific smooth interface.)

GLAS has 2 APIs: GLAS(ndslise) and BLAS(fortran).
Both APIs has C/C++ and D headers. D headers contains aliases 
with unified names like in core.stdc.tgmath. So, extern(C) 
interface for GLAS is comfortable and looks like:

     gemm(alpha, a, b, beta, c); // calls glas_?gemm

The latest ndslice PR to stable branch solves a problem in case 
of const and immutable a and b. 
https://github.com/dlang/phobos/pull/4873

GLAS does not have syntax like Eigen, i mean

     c = a * b;

This syntax can be a part of another package for scripting like 
syntax.
See also Q&A 
https://github.com/libmir/mir-glas#why-glas-does-not-have-lazy-evaluation-and-aliasing-like-eigen

>> 6. GLAS is no longer distributed as a generic library. Level 2 
>> and Level
>> 3 generic API will be removed from Mir. There are few reasons 
>> why it is
>> much better as precompiled library, and no reasons why it 
>> should be
>> generic. In the same time, generic multidimensional Level 1 
>> routines
>> will be improved.
>
> I guess I'd like to understand the dynamics better here.

The main reason is compilation time (1 secs+) and template bloat 
(50 KB +). OpenBLAS size is more than 20 MB. GLAS is smaller, but 
it is not something lightweight like `sort`.
Assume you are buildings a large D projects one-by-one file in 
parallel. It can be builded during minutes and its size can be 
 >100 MB, only because GLAS.

So, having an extern(C) layers is good practice to keep interface 
clear and compile time small.

>> Questions:
>>
>> 1. Would you like GLAS be packed with Phobos?
>
> You have all support from Walter and myself for integrating 
> GLAS with Phobos. Before that I'd want to make sure we slice 
> and dice things properly.

Awesome! I am happy to read this)

>> 2. Is it possible to make GLAS a replaceable part of Phobos? 
>> For example
>> a user may want to use the latest GLAS without waiting a new 
>> compiler
>> release.
>
> That would be an interesting precedent. We should talk about it 
> next week. (My knee-jerk reaction is if we're worth our salt we 
> should release Phobos often enough to obviate the need for 
> this. But the notion of hot-swapping subcomponents is cool too.)

Some concepts can be found on a slides from my today's talk
https://docs.google.com/presentation/d/1w1cQ8vDluglRIt8Qdnm-sY7kqxoKZxbPEWW6tR3lPpo/edit?usp=sharing

> Thanks,
>
> Andrei

Best regards,
Ilya



More information about the Digitalmars-d mailing list