comp.lang.ada
 help / color / mirror / Atom feed
From: dmitry@elros.cbb-automation.de (Dmitry A. Kazakov)
Subject: Re: Dimensionality Checking (Ada 20XX)
Date: Thu, 20 Dec 2001 13:44:36 GMT
Date: 2001-12-20T13:44:36+00:00	[thread overview]
Message-ID: <3c21e674.105214687@News.CIS.DFN.DE> (raw)
In-Reply-To: 36c6f8dd.0112171307.2a8bf6c4@posting.google.com

On 17 Dec 2001 13:07:07 -0800, britt@adapower.net (Britt Snodgrass)
wrote:

>dmitry@elros.cbb-automation.de (Dmitry A. Kazakov) wrote in message news:<3c1dd328.10829203@News.CIS.DFN.DE>...
>> On Sat, 15 Dec 2001 02:07:41 -0500, "Steven Deller"
>> <deller@smsail.com> wrote:
>> 
>> I used a similar approach. The difference was that I used only one
>> discriminant - a modular number holding all 7 powers. With
>> Interfaces.Unsigned_32 it holds powers -8..7. Then I used an
>> additional field for the offset [to cope with damned Celsius degree
>> (:-))]
>
>Can you provide an example of your modular type definition?

subtype UnitPower is Interfaces.Unsigned_32;
type Unit is new UnitPower;

function "**" (Left : Unit; Right : Integer) return Unit;
function "*"  (Left, Right : Unit) return Unit;
function "/"  (Left, Right : Unit) return Unit;
function Sqrt (X : Unit) return Unit;
pragma Inline ("**", "*", "/", Sqrt);
...

You can download it from here:
http://www.dmitry-kazakov.de/ada/units.htm

>> >The only difficulties I see are getting the RIGHT system of dimensions
>> >for such a package (but then again, not being "built in", it can be
>> >changed is so needed).
>> 
>> The approach is thinkable and it has a great advantage - an ability to
>> write "class-wide" subroutines for dimensioned types. But it still
>> faces several problems.
>> 
>> 1. Optimization issues. I saw no compiler able to remove run-time
>> checks and storage for the dicriminants for constrained subtypes. [I
>> wrote a small test program which calculated performance penalty. It is
>> 6..20 times when compared with regular float]. I agree with you that
>> such kind of optimizations could be even more useful than dimensioned
>> values itself: some sort of user-defined compile-time expressions,
>> removal of static discriminants as well as tags (the later one might
>> require revison of tagged types, because of redispatch).
>
>Could a large part of the performance penalty be attributed to your
>use of a single modular number discriminant for the dimensional
>powers?  I think this would require a lot of bit unpacking/repacking. 

No unpacking. It is made so that a unit operation is first applied to
the positions 0,2,4,6 (with overflow checks in positions 1,3,5,7).
Then same is made for positions 1,3,5,7. After that the results are
merged.

>Separate discriminants might be faster.
>
>I would probably remove the unit checks in final production code by
>redefining the unit types to be reqular floating types, recompiling,
>and retesting.

Then you loose the major advantage of the approach against ones based
on generics or other kinds of preprocessing - an ability to have
unconstrained (by unit) dimensioned values and thus subroutines that
work for all units. 

Regards,
Dmitry Kazakov



  reply	other threads:[~2001-12-20 13:44 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-07  0:09 Dimensionality Checking (Ada 20XX) Snodgrass, Britt (NM75)
2001-12-07 16:15 ` Ian
2001-12-09 17:58   ` Nick Roberts
2001-12-09 22:58     ` Nick Roberts
2001-12-10  0:17     ` Mark Lundquist
2001-12-10  1:51       ` James Rogers
2001-12-10  3:33         ` Nick Roberts
2001-12-10 19:09           ` Nick Roberts
2001-12-11  8:20             ` Thomas Koenig
2001-12-11 15:37               ` Nick Roberts
2001-12-11 20:18                 ` Thomas Koenig
2001-12-12  0:58                   ` Mark Lundquist
2001-12-12  8:19                     ` Wilhelm Spickermann
2001-12-12 14:21                     ` Stephen Leake
2001-12-12 19:10                       ` Nick Roberts
2001-12-13 19:04                         ` Stephen Leake
2001-12-13 22:56                           ` Nick Roberts
2001-12-14  0:11                             ` Nick Roberts
2001-12-14 22:14                       ` Mark Lundquist
2001-12-15  1:30                         ` Nick Roberts
2001-12-10 20:22         ` Thomas Koenig
2001-12-10 17:21       ` Wes Groleau
2001-12-10 19:51         ` Mark Lundquist
2001-12-10 19:56           ` Wes Groleau
2001-12-10 20:37             ` Mark Lundquist
2001-12-10 18:56       ` Nick Roberts
2001-12-11 15:05         ` Wes Groleau
2001-12-11 16:39         ` Stephen Leake
2001-12-11 19:05           ` Nick Roberts
2001-12-11 22:50             ` Mark Johnson
2001-12-12  1:59               ` Nick Roberts
2001-12-11 23:01             ` Stephen Leake
2001-12-12  2:21               ` Nick Roberts
2001-12-12 14:16                 ` Stephen Leake
2001-12-13 19:52                   ` Nick Roberts
2001-12-13 22:22                     ` Nick Roberts
2001-12-14  6:40                       ` Robert C. Leif, Ph.D.
2001-12-14 17:30                       ` Stephen Leake
2001-12-14 17:38                     ` Stephen Leake
2001-12-11 22:45           ` Mark Lundquist
2001-12-12  1:42             ` Nick Roberts
2001-12-12 15:17               ` Mark Lundquist
2001-12-12 14:03             ` Stephen Leake
2001-12-12  9:35           ` Dmitry A. Kazakov
2001-12-12 14:26             ` Stephen Leake
2001-12-13 17:02               ` daniele andreatta
2001-12-13 19:06                 ` Stephen Leake
2001-12-14 10:16                 ` Dmitry A. Kazakov
2001-12-14 22:01                   ` Nick Roberts
2001-12-17 11:10                     ` Dmitry A. Kazakov
2001-12-17 12:16                       ` Thomas Koenig
2001-12-17 14:30                         ` Dmitry A. Kazakov
2001-12-27 17:18                         ` Steven Deller
2001-12-15  7:07                   ` Steven Deller
2001-12-17 12:31                     ` Dmitry A. Kazakov
2001-12-17 13:46                       ` Thomas Koenig
2001-12-17 15:00                         ` Dmitry A. Kazakov
2001-12-17 16:38                         ` Thomas Koenig
2001-12-17 21:07                       ` Britt Snodgrass
2001-12-20 13:44                         ` Dmitry A. Kazakov [this message]
2001-12-13 19:33         ` Mark Lundquist
2001-12-13 22:15           ` Nick Roberts
2001-12-14 20:20             ` Mark Lundquist
2001-12-10 23:31       ` Mark Lundquist
2001-12-10 13:57     ` Ian
2001-12-10 17:24       ` Wes Groleau
2001-12-10 20:38       ` Britt Snodgrass
  -- strict thread matches above, loose matches on Subject: below --
2001-12-11 13:11 Mike Brenner
2001-12-11 17:03 ` Mark Lundquist
2001-12-02 16:01 Another Idea for Ada 20XX James Rogers
2001-12-03 14:56 ` Mark Lundquist
2001-12-03 15:12   ` Lutz Donnerhacke
2001-12-03 21:13     ` Dimensionality Checking (Ada 20XX) Nick Roberts
2001-12-04 14:00       ` Dmitry A. Kazakov
2001-12-06 19:52         ` Britt Snodgrass
2001-12-06 20:55           ` Mark Lundquist
2001-12-06 22:38           ` Wes Groleau
2001-12-06 23:12             ` Mark Lundquist
2001-12-07 14:36               ` Wes Groleau
2001-12-07  9:37           ` Dmitry A. Kazakov
2001-12-07 22:51           ` Mark Lundquist
replies disabled

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