[Mono-list] Mono vs Mono+LLVM

Jon Harrop jon at ffconsultancy.com
Mon Feb 1 21:19:01 EST 2010

I ran the same list-based n-queens solver written in F# on .NET, Mono 2.4/2.6, 
and Mono 2.7 with the LLVM backend and got the following results:

.NET:      2.157s
Mono 2.4:  8.933s
Mono 2.6: 10.195s
Mono 2.7: 44.367s

Note that the code generated by Mono using LLVM is running many times slower 
than the code generated using Mono's own code gen in this case.

Just for fun:

OCaml:     0.763s (standalone compiled)
OCaml:    16.649s (interpreted)
HLVM:      8.606s (JIT compiled)
HLVM:      7.972s (standalone compiled)

Here's the F# source code for this benchmark:

  let safe (x1, y1) (x2, y2) =
    x1 <> x2 && y1 <> y2 && x2 - x1 <> y2 - y1 && x1 - y2 <> x2 - y1
  let ps n =
    [ for i in 1 .. n do
        for j in 1 .. n do
          yield i, j ]
  let rec search f n qs ps accu =
    match ps with
    | [] -> if List.length qs = n then f qs accu else accu
    | q::ps ->
        search f n (q::qs) (List.filter (safe q) ps)
          (search f n qs ps accu)
    let n = 10
    let t = System.Diagnostics.Stopwatch.StartNew()
    printfn "%d" (search (fun _ i -> i+1) n [] (ps n) 0)
    printfn "Took %gs" t.Elapsed.TotalSeconds

Dr Jon Harrop, Flying Frog Consultancy Ltd.

More information about the Mono-list mailing list