Thread overview
Profiling the DMD Compiler Itself
May 09, 2023
Walter Bright
May 09, 2023
max haughton
May 09, 2023
Walter Bright
May 08, 2023
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!
May 09, 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.
May 08, 2023
On 5/8/2023 9:49 PM, max haughton wrote:
> Instrumentation-based profiling is almost always a worse option than sampling — even if the overhead was zero the data is much less useful.

-profile does suffer from added instrumentation affecting the results (sort of like quantum mechanics!) but it still produces highly actionable information.