Date: Fri, 8 Oct 1999 08:57:07 +0200
Message-Id: <199910080657.IAA23936@sepia.recherche.enac.fr>
From: Pascal Brisset <brisset@recherche.enac.fr>
To: caml-list@inria.fr
Subject: Re: speed versus C
Une petit benchmark qui pourrait être à l'avantage de C: crible d'Eratosthène
--8<------------------------------------------
let n = int_of_string Sys.argv.(1) in
let crible = Array.create n true in
for i = 2 to n-1 do
if crible.(i)
then begin
for j = 2 to (n-1)/i do
crible.(i*j) <- false
done
end
done
--8<------------------------------------------
--8<------------------------------------------
main(int argc, char **argv)
{
int n = atoi(argv[1]);
int crible[n], i, j;
for(i=0; i < n; i++) { crible[i] = 1; }
for(i = 2; i < n; i++) {
if (crible[i]) {
for(j = 2; j <= (n-1)/i; j++) {
crible[i*j] = 0;
}
}
}
}
--8<------------------------------------------
Sur un Pentium 400Mhz sous Linux:
sepia[854]% gcc -O4 premiers.c
sepia[855]% time a.out 2000000
0.860u 0.030s 0:00.91 97.8% 0+0k 0+0io 91pf+0w
sepia[856]% ocamlopt premiers.ml
sepia[857]% time a.out 2000000
0.910u 0.040s 0:00.96 98.9% 0+0k 0+0io 133pf+0w
Seulement 5% de différence sur des opérations basiques entières, pas de quoi
se priver.
Pour des benchmarks sophistiqués, méfions-nous; on a trop souvent tendance à
comparer une solution (en C) développée sur plusieurs années par des experts
à une solution (en Caml) écrite sur un coin de table « juste pour voir » ...
--Pascal Brisset
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:26 MET