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

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to