digitalmars.D - Partial function profiling feature
- bearophile (47/47) Oct 12 2010 While optimizing D code I have found the built-in dmd profiler very usef...
While optimizing D code I have found the built-in dmd profiler very useful. It
gives experimental data about where the code may need improvements, you need
much less guessing.
In some situations I find that a function that takes lot of the running time is
shaped like this, it contains two different big loops:
void foo(int n) {
// pre-stuff
foreach (i; 0 .. n) {
...
}
// middle-stuff
foreach (i; 0 .. n) {
...
}
// post-stuff
}
In this situation often it's only one of the two loops that uses most of the
running time of the foo() function. I may guess, but I'd like the profiler to
give me more data. So sometimes I split the foo() into something like:
void foo1(int n) {
foreach (i; 0 .. n) {
...
}
}
void foo2(int n) {
foreach (i; 0 .. n) {
...
}
}
void foo(int n) {
// pre-stuff
foo1(n);
// middle-stuff
foo2(n);
// post-stuff
}
This allows me to profile how much time the two parts of foo() take. In this
situation in D code I'd like like a profiling "breakpoint":
void foo(int n) {
// pre-stuff
foreach (i; 0 .. n) {
...
}
profile_point(); // ***
// middle-stuff
foreach (i; 0 .. n) {
...
}
// post-stuff
}
So the profiling gives me the foo timings split in two (or more) parts. Is this
a possible feature?
Bye,
bearophile
Oct 12 2010








bearophile <bearophileHUGS lycos.com>