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

Edward Z. Yang ezyang at MIT.EDU
Fri Nov 23 18:47:29 CET 2012


Hello Janek,

What happens if you do the benchmark without unsafePerformIO involved?

Edward

Excerpts from Janek S.'s message of Fri Nov 23 10:44:15 -0500 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