English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] O'Caml vs C++: a little benchmark
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-08-19 (13:13)
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

Is what you would probably came to, after reading:
I'll try to analyze memory, tree etc, if time permits.


(Athlon 1.4G(running at 1G), compiled with -inline 20)


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