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