Browse thread
[Caml-list] O'Caml vs C++: a little benchmark
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | malc <malc@p...> |
| Subject: | Re: [Caml-list] O'Caml vs C++: a little benchmark |
On Sun, 18 Aug 2002, Oleg wrote:
> Hi
>
> I wrote a few simple benchmarks [1] assessing binaries generated by "ocamlopt
> -unsafe -noassert" vs binaries generated by "g++-3.2 -O2 -fomit-frame-pointer
> -pedantic" on P3 Xeon, and the results were quite surprising to me.
>
> Firstly, I expected iteration over O'Caml lists and integer arrays to be as
> fast as iteration over std::list and std::vector<int>, respectively. Instead,
> the benchmark gave me a speed difference of about 10x and 100x in favor of
> C++ for lists and arrays, respectively.
>
> Secondly, a little benchmark comparing mutable binary trees of 64 bit floats
> also showed g++-3.2 to be about an order of magnitude faster.
>
> What was even more surprising was that O'Caml turned out to be about 10 times
> faster than C++ for reversing lines in a file. I did not use explicit buffers
> of any kind in either version, and in C++ program, I used "getline", reading
> into std::string which should provide about the same level of abstraction and
> overflow protection as O'Caml string.
>
> I'm curious as to where these huge differences for these small programs come
> from.
You made an unlucky choice of summing floats. So what you measure(at least
in list, array cases) is speed of float boxing.
open Printf;;
let n = int_of_string (Sys.argv.(1));;
let r = int_of_string (Sys.argv.(2));;
type _s = { mutable s : float }
let result =
let s = { s = 0.0 } in
let list = Array.to_list (Array.init n (fun i -> i)) in
let rec f = function [] -> () | x :: xs -> s.s <- s.s +. float x; f xs in
for i = 0 to pred r do
f list
done;
s.s
Is what you would probably came to, after reading:
http://caml.inria.fr/ocaml/numerical.html
I'll try to analyze memory, tree etc, if time permits.
P.S.
lists
1.142
0.510
1.298
(Athlon 1.4G(running at 1G), compiled with -inline 20)
--
mailto:malc@pulsesoft.com
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners