On Tuesday, 9 June 2015 at 16:18:06 UTC, Manu wrote:
On 10 June 2015 at 01:26, Ilya Yaroshenko via Digitalmars-d
<digitalmars-d@puremagic.com> wrote:
I believe that Phobos must support some common methods of
linear algebra
and general mathematics. I have no desire to join D with
Fortran libraries
:)
D definitely needs BLAS API support for matrix multiplication.
Best BLAS
libraries are written in assembler like openBLAS. Otherwise D
will have last
position in corresponding math benchmarks.
A complication for linear algebra (or other mathsy things in
general)
is the inability to detect and implement compound operations.
We don't declare mathematical operators to be algebraic
operations,
which I think is a lost opportunity.
If we defined the properties along with their properties
(commutativity, transitivity, invertibility, etc), then the
compiler
could potentially do an algebraic simplification on expressions
before
performing codegen and optimisation.
There are a lot of situations where the optimiser can't simplify
expressions because it runs into an arbitrary function call,
and I've
never seen an optimiser that understands exp/log/roots, etc, to
the
point where it can reduce those expressions properly. To
compete with
maths benchmarks, we need some means to simplify expressions
properly.
Simplified expressions would help because
1. On matrix (hight) level optimisation can be done very well by
programer (algorithms with matrixes in terms of count of matrix
multiplications are small).
2. Low level optimisation requires specific CPU/Cache
optimisation. Modern implementations are optimised for all cache
levels. See work by KAZUSHIGE GOTO
http://www.cs.utexas.edu/users/pingali/CS378/2008sp/papers/gotoPaper.pdf