[Haskell-cafe] Problem with benchmarking FFI calls with Criterion

Janek S. fremenzone at poczta.onet.pl
Fri Nov 23 16:44:15 CET 2012


I am using Criterion library to benchmark C code called via FFI bindings and I've ran into a 
problem that looks like a bug. 

The first benchmark that uses FFI runs correctly, but subsequent benchmarks run much longer. I 
created demo code (about 50 lines, available at github: https://gist.github.com/4135698 ) in 
which C function copies a vector of doubles. I benchmark that function a couple of times. First 
run results in avarage time of about 17us, subsequent runs take about 45us. In my real code 
additional time was about 15us and it seemed to be a constant factor, not relative to "correct" 
run time. The surprising thing is that if my C function only allocates memory and does no 
copying:

double* c_copy( double* inArr, int arrLen ) {
  double* outArr = malloc( arrLen * sizeof( double ) );

  return outArr;
}

then all is well - all runs take similar amount of time. I also noticed that sometimes in my demo 
code all runs take about 45us, but this does not seem to happen in my real code - first run is 
always shorter.

Does anyone have an idea what is going on?

Janek



More information about the Haskell-Cafe mailing list