[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