From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id MAA07945 for caml-redistribution; Fri, 8 Oct 1999 12:02:06 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id IAA24533 for ; Fri, 8 Oct 1999 08:57:10 +0200 (MET DST) Received: from indigo.recherche.enac.fr (indigo.recherche.enac.fr [195.220.158.66]) by nez-perce.inria.fr (8.8.7/8.8.7) with ESMTP id IAA00312 for ; Fri, 8 Oct 1999 08:57:07 +0200 (MET DST) Received: from sepia.recherche.enac.fr (brisset@sepia.recherche.enac.fr [195.220.158.82]) by indigo.recherche.enac.fr (8.8.6 (PHNE_14041)/8.6.11) with ESMTP id IAA25433 for ; Fri, 8 Oct 1999 08:57:08 +0200 (METDST) Received: (from brisset@localhost) by sepia.recherche.enac.fr (8.9.3/8.6.11) id IAA23936; Fri, 8 Oct 1999 08:57:07 +0200 Date: Fri, 8 Oct 1999 08:57:07 +0200 Message-Id: <199910080657.IAA23936@sepia.recherche.enac.fr> From: Pascal Brisset To: caml-list@inria.fr Subject: Re: speed versus C Mime-Version: 1.0 (generated by tm-edit 7.106) Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Sender: weis 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