Profiling the DMD Compiler Itself
max haughton
maxhaton at gmail.com
Tue May 9 04:49:58 UTC 2023
On Tuesday, 9 May 2023 at 03:28:15 UTC, Walter Bright wrote:
> If the dmd builder builds dmd with the ENABLE_PROFILE=1, the
> resulting compiler will profile itself compiling a program. The
> results of the profile will be emitted to the file trace.log,
> which is described here:
>
> https://www.digitalmars.com/ctg/trace.html
>
> Yes, dmd inherited the profiler from the Digital Mars C++
> profiler.
>
> It works by inserting code into the prolog and epilog of each
> function, calculating the time it takes the function to
> execute. It turns out that this takes a disastrously long time
> to run, so it is only useful for profiling with fairly short
> programs. Trying to profile dmd itself will likely have to wait
> until the sun becomes a red giant before it finishes.
>
> But anyhow, profiling compiles of smaller programs can work out
> nicely, and with the report in trace.log one can see where the
> problems are.
>
> Happy profiling!
perf (available on basically any Linux system) is a much better
profiler.
Instrumentation-based profiling is almost always a worse option
than sampling — even if the overhead was zero the data is much
less useful.
-profile=gc is very useful, despite -profile being not
particularly insightful
N.B. Compiling programs with base pointers always being emitted
helps sampling profilers along quite a lot, DWARF implementations
are not all made equal.
More information about the Digitalmars-d
mailing list