Profiling calls to small functions
albert-j via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Jan 21 04:33:57 PST 2017
Let's say I want to create an array of random numbers and do some
operations on them:
void main() {
import std.random;
//Generate array of random numbers
int arrSize = 100000000;
double[] arr = new double[](arrSize);
foreach (i; 0..arrSize)
arr[i] = uniform01();
//Call funcA on array elements
foreach (i; 1..arr.length-1)
funcA(arr,i);
}
void funcA(double[] arr, size_t i) {
arr[i+1] = arr[i-1]+arr[i];
funcB(arr,i);
}
void funcB(double[] arr, size_t i) {
arr[i-1]= arr[i] + arr[i+1];
arr[i] = arr[i-1] + arr[i+1];
arr[i+1]= arr[i-1] + arr[i];
}
Now I dmd -profile it and look at the performance of funcA with
d-profile-viewer. Inside funcA, only 20% of time is spend in
funcB, but the rest 80% is self-time of funcA. How is it
possible, when funcB has three times the calculations of funcA?
It appears that the call to funcB itself is very expensive.
More information about the Digitalmars-d-learn
mailing list