comp.lang.ada
 help / color / mirror / Atom feed
From: "Russ P." <18k11tm001@sneakemail.com>
Subject: Re: efficient vector/matrix operations in Ada
Date: Mon, 06 Aug 2001 20:04:28 -0700
Date: 2001-08-06T20:04:28-07:00	[thread overview]
Message-ID: <3B6F5ABC.3C40E189@sneakemail.com> (raw)
In-Reply-To: ggIb7.36969$Kd7.22848996@news1.rdc1.sfba.home.com

tmoran@acm.org wrote:
> 
> >tacky, ambiguous expressions like
> >   PlusEquals(A,B);
> but is
>     Inc(A, B);
> so bad or non-obvious?  Fortran programmers, no slouch at fast matrix
> operations, seem to have figured out a satisfactory approach.  If you
> are really pressed for speed, you are going to be calling an optimized
> library anyway.

I'm not looking for high-level optimization, I'm just looking for
something that is reasonably efficient.

> 
> >    A = A + B; // inefficient
> >
> >is much less efficient than
> >
> >    A += B; // efficient
> >
> >The former requires the dynamic construction of a temporary matrix to
> >hold the sum (A + B), which must then be passed by value and copied into
> >A.
>   Is A = A+B, an O(n**2) operation, going to be limiting the speed of
> your matrix arithmetic, which probably involves some O(n**3) operations
> if it does anything substantial?
>   Just because one way of doing it is slow doesn't mean there isn't a
> fast way.  For instance why does a temporary need to be dynamic?
> Register oriented CPUs don't dynamically create a new register
> every time they need one.  One could easily imagine a machine with
> vector instructions that can do A+B->C very fast, but has no special
> instruction for A+B->A.  In the case of a temporary matrix, of
> course, "dynamic construction" could mean something as simple as
> "move the stack pointer".  Or your aithmetic operations could create
> expressions, moving just pointers and op-codes, and the assignment
> operator could analyze the expression and decide the fastest way
> to actually calculate the result.  Think outside of the box. ;)

No, you really need the dynamically instantiated temporary matrix, I
believe. I've been through this little lesson years ago. Don't forget
that you also need to be able to handle expressions such as "A = B + C +
D;". You can play complicated games with static arrays of "work"
matrices, but you are asking for trouble and the resulting code is
likely to not be re-entrant.

-- 
Russ P.
http://RussP.org



  reply	other threads:[~2001-08-07  3:04 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-08-07  1:13 efficient vector/matrix operations in Ada Russ
2001-08-07  2:18 ` Dale Stanbrough
2001-08-07  2:21 ` tmoran
2001-08-07  3:04   ` Russ P. [this message]
2001-08-10 16:54     ` B.Gaffney
2001-08-13  7:50       ` Dmitry Kazakov
2001-08-13 19:45       ` Russ
2001-08-13 20:23         ` Larry Hazel
2001-08-13 21:26           ` Ted Dennison
2001-08-14  4:46           ` Russ
2001-08-14  5:28             ` David Starner
2001-08-14  8:17             ` Alexander Boucke
2001-08-14  8:56             ` Lutz Donnerhacke
2001-08-14 10:54             ` Jacob Sparre Andersen
2001-08-13 21:30         ` Ted Dennison
2001-08-14  4:56           ` Russ
2001-08-14  7:32             ` efficient vector/matrix operations in Fortran, was Re: ... " tmoran
2001-08-14 14:05             ` efficient vector/matrix operations " Ted Dennison
  -- strict thread matches above, loose matches on Subject: below --
2001-08-07 11:36 Gautier Write-only-address
2001-08-14 12:37 Gautier Write-only-address
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox