Optimization fun

Kiith-Sa via Digitalmars-d digitalmars-d at puremagic.com
Fri Nov 7 18:29:25 PST 2014


On Saturday, 8 November 2014 at 01:53:33 UTC, H. S. Teoh via 
Digitalmars-d wrote:
> On Fri, Nov 07, 2014 at 05:31:44PM -0800, Walter Bright via 
> Digitalmars-d wrote:
>> On 11/7/2014 4:41 PM, H. S. Teoh via Digitalmars-d wrote:
> [...]
>> >But speaking of which, I found dmd -profile's output in 
>> >trace.log a
>> >little difficult to understand because of the lack of
>> >self-documenting headers in the first section. gprof, for 
>> >example,
>> >produces nicely-labelled output that describes what the data 
>> >means.
>> >Would you accept a PR along these lines?
>> 
>> I don't really know what you have in mind, so I'll have to say 
>> "it
>> depends".  Keep in mind that subsequent runs of the profiler 
>> parse the
>> previous output file and add it to the results.
>
> Just add a simple header that describes what each column means.
>
>
>> >Also, in the second section, I'm getting some negative 
>> >numbers for
>> >the call times, which seem to indicate integer overflow? This
>> >basically destroys the usefulness of dmd -profile for my test 
>> >cases,
>> >since most of the interesting cases for me are those with long
>> >running times, which for sure will run into integer overflow 
>> >at the
>> >sample rate that dmd -profile is using, causing the second 
>> >section to
>> >be essentially randomly sorted.
>> 
>> Yeah, a negative number is likely an overflow. Reduce the test 
>> case!
>
> Unfortunately, I can't. The behaviour I'm trying to profile is 
> the
> long-term running case, because there's a whole bunch of setup 
> at the
> beginning that initially takes a while, but eventually it's the
> long-running part that dominates the runtime behaviour. 
> Reducing the
> test case will only increase the initial noise, which I'm not 
> interested
> in, and reduce the running time of the main loop of interest. 
> Besides,
> what I'm trying to optimize for is the large, complex case; the 
> simple
> cases already run fast enough that the performance 
> characteristics are
> not that interesting to me. It's the long-term part that's 
> interesting
> because that's when the GC starts kicking in and pressure on 
> system RAM
> starts to increase.
>
> I'm surprised that dmd's profiler can't even handle something 
> that only
> runs for 7-8 seconds or so! gprof certainly has no such 
> limitation.
>
> Is it relatively simple to make dmd -profile use larger integer 
> widths
> for profiling? If not, I'm afraid I'm just gonna have to stick 
> with
> gdc/gprof instead.
>
>
> T

Except for very specific cases, neither gprof or DMD's profiler 
are good for profiling. If you're on Linux, you have perf, which 
works well with D and is way ahead of anything the DMD profiler 
will be able to do *after* man-years of further development.

See (shameless advertisement):

http://defenestrate.eu/_static/profiling-slides/index.html#22

(especially perf record/perf report)


More information about the Digitalmars-d mailing list