* Mneson announcement and help request
@ 2004-06-01 15:56 Marius Amado Alves
2004-06-02 2:26 ` Jeff C,
0 siblings, 1 reply; 23+ messages in thread
From: Marius Amado Alves @ 2004-06-01 15:56 UTC (permalink / raw)
To: comp.lang.ada
Mneson is a developing 100% Ada database system. Latest version 20040601.
http://www.liacc.up.pt/~maa/mneson
The core seems well, but there's a problem in an auxiliary module that I'm
having difficulty analysing due to an aparent gprof bug. So I appreciate the
help of anyone interested in making Ada the next generation database
technology :-)
An excerpt from "revision_history.txt" follows. Please contact me on any
issue. Thanks a lot.
*******************************
Annex 2. Problem with Get_Value
*******************************
Mneson.Structures.Get_Value shows a miserable absolute time performance
of circa 50 ms. See Mneson.Test.Run2 and others.
I try to analyse this problem with gprof, but it seems gprof is buggy:
the call graph includes functions that are never called!
So I suspect that gprof is confusing function names and leading me astray.
However gprof consistently puts AI302 (old version) internal functions
high up on the flat file.
Tree functions get called tens of millions of times.
So maybe this is a problem with AI302.
A possible course of action is therefore to sycn Mneson with
the new version of AI302 (now) or with Ada.Containers (in 2005).
*** Thanks a lot to anyone willing to help here. ***
I'm not experienced with gprof.
2004-06-01
--MAA
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-01 15:56 Mneson announcement and help request Marius Amado Alves
@ 2004-06-02 2:26 ` Jeff C,
2004-06-02 3:06 ` Marius Amado Alves
2004-06-02 3:21 ` Marius Amado Alves
0 siblings, 2 replies; 23+ messages in thread
From: Jeff C, @ 2004-06-02 2:26 UTC (permalink / raw)
"Marius Amado Alves" <amado.alves@netcabo.pt> wrote in message
news:mailman.28.1086105372.391.comp.lang.ada@ada-france.org...
> Mneson is a developing 100% Ada database system. Latest version 20040601.
>
> http://www.liacc.up.pt/~maa/mneson
>
> The core seems well, but there's a problem in an auxiliary module that I'm
> having difficulty analysing due to an aparent gprof bug. So I appreciate
the
> help of anyone interested in making Ada the next generation database
> technology :-)
>
I know conventional wisdom is that one should not Optimize without
profiling....But since don't even
understand your program structure I would need to take more time to
understand its flow before
understanding the profile data.
So...At the risk of making suggestions that may not apply to speed I'll make
one that applies to style.
In general, I hate to see code that uses exceptions for normal control flow
processing. It certainly appears to
me that your code that makes use of the various For_Each_XXX type procedures
uses an exception
raise to terminate the search when "done".
This is not really desireable from a style point of view and also can
generally be a performance hit.
On compilers that implement zero-cost-exceptions of some sort, the "cost" is
high (or higher) on each
exception occurance.
On compilers that do not implement it, the presence of an exception handler
causes some overhead.
While this is generally small, having this in a traversal search really can
add up over time. In your case, in places like Get_Element and Get_Instance
a "normal" call involves a double exception throw.
In these cases it looks like you wrote your own traverse type procedures and
you want to terminate
the traverse "early" . .. For any container I ever created a Traverse for I
typically provide a pattern like
generic
with Procedure Process_Element(The_Element : in out Element_Type;
Terminate_Traverse :
in out Boolean);
procedure Traverse(Container : in Container_Type);
Where the generic body of Traverse checks the Terminate_Traverse out
parameter of Process_Element each
time to see if it should prematurely stop traverse.
Clients need to write Process_Element so it explicitly sets
Terminate_Traverse to true if they want to
stop. Traverse sets it false before "looping" and checks it after each call
to Process_Element.
In any case, it is not a perfect solution but it avoids the kludges of
multiple exceptions for non-error
based processing.
Again, this may or may not help your performance issue....but it would help
the overall program style IMHO.
Others may not agree with me. Perhaps there is a feeling that using
exceptions for this type of processing
is acceptable and that I am being too ivory tower.......your call.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 2:26 ` Jeff C,
@ 2004-06-02 3:06 ` Marius Amado Alves
2004-06-02 11:19 ` Georg Bauhaus
2004-06-02 3:21 ` Marius Amado Alves
1 sibling, 1 reply; 23+ messages in thread
From: Marius Amado Alves @ 2004-06-02 3:06 UTC (permalink / raw)
To: comp.lang.ada
> In general, I hate to see code that uses exceptions for normal control flow
> processing. It certainly appears to
> me that your code that makes use of the various For_Each_XXX type procedures
> uses an exception
> raise to terminate the search when "done".
Yes, that is a controversial style. Some like it, some don't. Note the
planned Ada standard containers are in this style. If it is found to be
a performance hitter in Mneson I'll say change it. But my experiments so
far have shown no speed loss from there. At least with GNAT. I'm more
inclined to earn speed with inlining. But to do that properly reliable
profiling is also required.
> On compilers that implement zero-cost-exceptions of some sort, the "cost" is
> high (or higher) on each
> exception occurance.
>
> On compilers that do not implement it, the presence of an exception handler
> causes some overhead.
So that's how they do it :-)
Yes, we'll have to analyse the algorithms in view of this.
I'll be delighted to answer any questions on Mneson design, here or
privately. I'll also try to improve the documentation soon, including
design items.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 3:06 ` Marius Amado Alves
@ 2004-06-02 11:19 ` Georg Bauhaus
2004-06-02 11:41 ` Marius Amado Alves
2004-06-02 11:41 ` Georg Bauhaus
0 siblings, 2 replies; 23+ messages in thread
From: Georg Bauhaus @ 2004-06-02 11:19 UTC (permalink / raw)
Marius Amado Alves <amado.alves@netcabo.pt> wrote:
:> In general, I hate to see code that uses exceptions for normal control flow
:> processing. It certainly appears to
:> me that your code that makes use of the various For_Each_XXX type procedures
:> uses an exception
:> raise to terminate the search when "done".
:
: Yes, that is a controversial style. Some like it, some don't. Note the
: planned Ada standard containers are in this style.
How about this, which doesn't need exceptions:
with AI302.Containers.Ordered_Sets;
package Maa is
type T is range -5 .. +5;
package Sets_of_T is new AI302.Containers.Ordered_Sets(T);
generic
with procedure Process(Pointee: Sets_of_T.Cursor);
procedure Traverse
(container: Sets_of_T.Set; Stop: Sets_of_T.Cursor);
end Maa;
package body Maa is
procedure Traverse
(container: Sets_of_T.Set; Stop: Sets_of_T.Cursor)
is
use Sets_of_T;
current: Cursor := first(container);
begin
while current /= Stop loop
process(current);
end loop;
end Traverse;
end Maa;
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 11:19 ` Georg Bauhaus
@ 2004-06-02 11:41 ` Marius Amado Alves
[not found] ` <c9l0vo$pq3$1@sparta.btinternet.com>
2004-06-02 11:41 ` Georg Bauhaus
1 sibling, 1 reply; 23+ messages in thread
From: Marius Amado Alves @ 2004-06-02 11:41 UTC (permalink / raw)
To: comp.lang.ada
Yes, this is a nice idiom. I tried to push something similar to the
Ada.Containers. More general. See the ARG discussion. Look for "Slice".
In time Mneson could grow it's one containers, featuring this. However
until hard evidence that exceptions are evil I don't see a strong reason
to change.
Georg Bauhaus wrote:
> Marius Amado Alves <amado.alves@netcabo.pt> wrote:
> :> In general, I hate to see code that uses exceptions for normal control flow
> :> processing. It certainly appears to
> :> me that your code that makes use of the various For_Each_XXX type procedures
> :> uses an exception
> :> raise to terminate the search when "done".
> :
> : Yes, that is a controversial style. Some like it, some don't. Note the
> : planned Ada standard containers are in this style.
>
> How about this, which doesn't need exceptions:
>
> with AI302.Containers.Ordered_Sets;
>
> package Maa is
>
> type T is range -5 .. +5;
>
> package Sets_of_T is new AI302.Containers.Ordered_Sets(T);
>
> generic
> with procedure Process(Pointee: Sets_of_T.Cursor);
> procedure Traverse
> (container: Sets_of_T.Set; Stop: Sets_of_T.Cursor);
>
>
> end Maa;
>
> package body Maa is
>
> procedure Traverse
> (container: Sets_of_T.Set; Stop: Sets_of_T.Cursor)
> is
> use Sets_of_T;
>
> current: Cursor := first(container);
> begin
> while current /= Stop loop
> process(current);
> end loop;
> end Traverse;
>
> end Maa;
>
> _______________________________________________
> comp.lang.ada mailing list
> comp.lang.ada@ada-france.org
> http://www.ada-france.org/mailman/listinfo/comp.lang.ada
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 11:19 ` Georg Bauhaus
2004-06-02 11:41 ` Marius Amado Alves
@ 2004-06-02 11:41 ` Georg Bauhaus
2004-06-02 13:14 ` Marius Amado Alves
2004-06-03 4:09 ` Jeffrey Carter
1 sibling, 2 replies; 23+ messages in thread
From: Georg Bauhaus @ 2004-06-02 11:41 UTC (permalink / raw)
Georg Bauhaus <sb463ba@l1-hrz.uni-duisburg.de> wrote:
: Marius Amado Alves <amado.alves@netcabo.pt> wrote:
: :> In general, I hate to see code that uses exceptions for normal control flow
: :> processing. It certainly appears to
: :> me that your code that makes use of the various For_Each_XXX type procedures
: :> uses an exception
: :> raise to terminate the search when "done".
: :
: : Yes, that is a controversial style. Some like it, some don't. Note the
: : planned Ada standard containers are in this style.
:
: How about this, which doesn't need exceptions:
[...]
OK in my example you need to know where to stop before traversal.
However, there is a third variation, only slightly different from
the one Jeffrey Carter mentioned, and it still doesn't need
exceptions with AI302.
generic
with procedure Process(Pointee: Sets_of_T.Cursor);
with function Stop(Pointee: Sets_of_T.Cursor) return Boolean;
-- terminate Process-ing when Stop says so
procedure Traverse (container: Sets_of_T.Set);
The loop is changed to
while not Stop(current) loop -- the change
process(current);
next(current); -- moving the cursor was missing before :-(
end loop;
-- Georg
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 11:41 ` Georg Bauhaus
@ 2004-06-02 13:14 ` Marius Amado Alves
2004-06-03 4:09 ` Jeffrey Carter
1 sibling, 0 replies; 23+ messages in thread
From: Marius Amado Alves @ 2004-06-02 13:14 UTC (permalink / raw)
To: comp.lang.ada
> generic
> with procedure Process(Pointee: Sets_of_T.Cursor);
> with function Stop(Pointee: Sets_of_T.Cursor) return Boolean;
> procedure Traverse (container: Sets_of_T.Set);
Nice.
Incidently, I've found out that local instantiations are (intriguingly)
slow. I've found this out chasing the slowness problem in Mneson
20040601, solved in 20040602--in part or in full (not researched) by
eliminating instantiations. I have not played with inline pragmas nor
compiler optimization options.
BTW, regarding Mneson development, my priorities are optimizing Base and
Calculus, and improving documentation. Not refactoring into an
exceptionless idiom. Unless that shows significant speed gains. Feel
free to do that, but if you really want to help, mind the overall
priorities. We could have a fully validated system by 2005, to go with
the new Ada. BTW, note that some tricks are admitedly temporary, in
expectation of Ada 2005, notable the use of 'Unrestricted_Access for
callbacks.
Thanks.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 11:41 ` Georg Bauhaus
2004-06-02 13:14 ` Marius Amado Alves
@ 2004-06-03 4:09 ` Jeffrey Carter
2004-06-03 11:24 ` Georg Bauhaus
1 sibling, 1 reply; 23+ messages in thread
From: Jeffrey Carter @ 2004-06-03 4:09 UTC (permalink / raw)
Georg Bauhaus wrote:
> [...]
> OK in my example you need to know where to stop before traversal.
> However, there is a third variation, only slightly different from
> the one Jeffrey Carter mentioned, and it still doesn't need
> exceptions with AI302.
I haven't posted on this topic. If you're referring to the posting by
"Jeff C" (jcreem@yahoo.com), that's not me.
--
Jeff Carter
"You couldn't catch clap in a brothel, silly English K...niggets."
Monty Python & the Holy Grail
19
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-03 4:09 ` Jeffrey Carter
@ 2004-06-03 11:24 ` Georg Bauhaus
0 siblings, 0 replies; 23+ messages in thread
From: Georg Bauhaus @ 2004-06-03 11:24 UTC (permalink / raw)
Jeffrey Carter <spam@spam.com> wrote:
: I haven't posted on this topic. If you're referring to the posting by
: "Jeff C" (jcreem@yahoo.com), that's not me.
I'm sorry.
(I should have been more careful, maybe I associated something with
PramARC,
generic -- Iterate
with procedure Action (Item : in out Element; Continue : out Boolean);
procedure Iterate (List : in out Skip_List);--)
-- Georg
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 2:26 ` Jeff C,
2004-06-02 3:06 ` Marius Amado Alves
@ 2004-06-02 3:21 ` Marius Amado Alves
2004-06-22 20:49 ` Jacob Sparre Andersen
1 sibling, 1 reply; 23+ messages in thread
From: Marius Amado Alves @ 2004-06-02 3:21 UTC (permalink / raw)
To: comp.lang.ada
> I know conventional wisdom is that one should not Optimize without
> profiling....But since don't even
> understand your program structure I would need to take more time to
> understand its flow before
> understanding the profile data...
*** Thanks a lot for taking the time to examine Mneson. ***
As I just said I'll try to make a design document.
I'd really love to have a reliable profiling tool--or team partner ;-)
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: Mneson announcement and help request
2004-06-02 3:21 ` Marius Amado Alves
@ 2004-06-22 20:49 ` Jacob Sparre Andersen
2004-06-23 9:36 ` Marius Amado Alves
0 siblings, 1 reply; 23+ messages in thread
From: Jacob Sparre Andersen @ 2004-06-22 20:49 UTC (permalink / raw)
Marius Amado Alves wrote:
> I'd really love to have a reliable profiling tool--or team partner
> ;-)
Have you tried `gprof`? Reliable may be a strong word about it, but
it has definitely helped me find some horrible (and not very
intuitive) inefficiencies in some of my code.
Jacob
--
"Science is like sex: sometimes something useful comes out,
but that is not the reason we are doing it"
-- Richard Feynman
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2004-06-23 9:36 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-06-01 15:56 Mneson announcement and help request Marius Amado Alves
2004-06-02 2:26 ` Jeff C,
2004-06-02 3:06 ` Marius Amado Alves
2004-06-02 11:19 ` Georg Bauhaus
2004-06-02 11:41 ` Marius Amado Alves
[not found] ` <c9l0vo$pq3$1@sparta.btinternet.com>
2004-06-02 17:47 ` Marius Amado Alves
2004-06-02 19:46 ` Martin Dowie
2004-06-02 22:10 ` Randy Brukardt
2004-06-03 5:58 ` Martin Dowie
2004-06-04 3:21 ` Randy Brukardt
2004-06-04 5:55 ` Martin Dowie
2004-06-04 7:30 ` Jean-Pierre Rosen
2004-06-04 14:11 ` Larry Kilgallen
2004-06-03 4:12 ` Jeffrey Carter
2004-06-03 5:48 ` Martin Dowie
2004-06-03 9:02 ` Martin Krischik
2004-06-02 11:41 ` Georg Bauhaus
2004-06-02 13:14 ` Marius Amado Alves
2004-06-03 4:09 ` Jeffrey Carter
2004-06-03 11:24 ` Georg Bauhaus
2004-06-02 3:21 ` Marius Amado Alves
2004-06-22 20:49 ` Jacob Sparre Andersen
2004-06-23 9:36 ` Marius Amado Alves
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox