comp.lang.ada
 help / color / mirror / Atom feed
From: Mark Johnson <mark_h_johnson@raytheon.com>
Subject: Re: Speeding up Ada procedure?
Date: Thu, 27 Feb 2003 09:45:38 -0600
Date: 2003-02-27T09:45:38-06:00	[thread overview]
Message-ID: <3E5E32A2.DA8DDA1C@raytheon.com> (raw)
In-Reply-To: 1d13e1b4.0302261526.40058154@posting.google.com

Papandopulo wrote:
> 
> I have certain procedures dealing with
> large arrays which are potential performance
> bottlenecks. While they didn't cause
> performance problems yet I intuitively
> feel they will.
> 
Hmm. Have you tried measuring the performance of the routines in
question? I have found that my "intuition" (and others) fails to find
the real problem area more often than not. An example of some code I had
to fix was a Jovial to Ada translator. The developer knew that symbol
lookup needed to be fast so did a pragma (Inline) to speed it up. When I
fed a large file (say 3000 lines) with a lot of symbols, the program ran
really slow (over two CPU days - never finished). A profile did not find
the problem until I removed that pragma (Inline) and then 99.999...% of
the CPU time was in that symbol lookup routine.
 The lookup method was a linear search of an unsorted list!
We changed it to a hash table & the CPU time for that one file went to
less than 5 minutes.

Remember - measure before optimizing. Then fix the "right thing".

> Is it a way to remove runtime array
> bounds and other checks for particular
> procedure ?
> 
As several others have mentioned pragma (Suppress). However I don't
recommend it; like inline it may hide the real problem.

> While Ada checks are excellent on
> control-type part of program where is
> a lot of logic and not much time spent
> it can become deadly if massive arrays
> of data are being processed.
> 
I would not be so sure of that. Again you need to do the measurements.
If the arrays are as massive as you say they are - the compiler can do
the check of an index against the limit once or twice (say to the min /
max values of a loop) which is negligible overhead for a 1000 element
array. See what your compiler does or measure it before taking that
optimization step.

> If the procedure just takes an array and
> produces an array I can be sure it's not
> faulty by testing it with different size
> arrays and than turning off runtime checks.
> 
You would be better served by using Spark or some other proving system
before you make that decision.
  --Mark



  parent reply	other threads:[~2003-02-27 15:45 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-02-26 23:26 Speeding up Ada procedure? Papandopulo
2003-02-27  0:30 ` Hyman Rosen
2003-02-27  0:39 ` tmoran
2003-02-27  3:22 ` Steve
2003-02-27  8:38 ` Gautier
2003-02-27  8:48   ` Duncan Sands
2003-02-27  8:54 ` Jean-Pierre Rosen
2003-02-27 15:45 ` Mark Johnson [this message]
2003-02-27 22:57   ` John R. Strohm
2003-02-28 14:33     ` Mark Johnson
2003-02-27 18:43 ` Alfred Hilscher
2003-02-27 22:55 ` John R. Strohm
replies disabled

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