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
next prev parent 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