From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=AWL,SPF_NEUTRAL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id 03ECEBC0B for ; Thu, 18 Jan 2007 03:17:50 +0100 (CET) Received: from wx-out-0506.google.com (wx-out-0506.google.com [66.249.82.230]) by concorde.inria.fr (8.13.6/8.13.6) with ESMTP id l0I2HmIb002084 for ; Thu, 18 Jan 2007 03:17:49 +0100 Received: by wx-out-0506.google.com with SMTP id i31so50986wxd for ; Wed, 17 Jan 2007 18:17:48 -0800 (PST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:user-agent:mime-version:to:cc:subject:references:in-reply-to:content-type:content-transfer-encoding; b=K6uZz5K6yGV2oabQ8kaGVHO+X3GdgZ24O8q1ctgyB+MDOyPIABpZcF0yielw1MlCR1NnOMJkxAF/4zwrXe9Gfd1T8EdM2QVdVB97SZPWB16Nak62/2o4I8Wp4h45ZTyCILJ/6K3XOZiO2FKSOHY7AYaEDjzPP0wIznkh/n/1XBQ= Received: by 10.70.9.4 with SMTP id 4mr499438wxi.1169086666846; Wed, 17 Jan 2007 18:17:46 -0800 (PST) Received: from ?192.168.0.18? ( [69.155.31.57]) by mx.google.com with ESMTP id i13sm339656wxd.2007.01.17.18.17.46; Wed, 17 Jan 2007 18:17:46 -0800 (PST) Message-ID: <45AED8C8.3080808@gmail.com> Date: Wed, 17 Jan 2007 20:17:44 -0600 From: Edgar Friendly User-Agent: Thunderbird 1.5.0.9 (X11/20061206) MIME-Version: 1.0 To: Nathaniel Gray Cc: Caml List Subject: Re: [Caml-list] Benchmarking different dispatch types References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-j-chkmail-Score: MSGID : 45AED8CD.000 on concorde : j-chkmail score : X : 0/20 1 0.000 -> 1 X-Miltered: at concorde with ID 45AED8CD.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; usr:01 usr:01 ocaml:01 ocamlfind:01 ocamlopt:01 -package:01 -inline:01 cmxa:01 cmxa:01 edgar:98 16%:98 12%:98 89%:98 19%:98 0.02:98 Nathaniel Gray wrote: > > Here's the output (on a PPC G4 1.25 GHz): > > ======== > Latencies for 40000 iterations of function, method, closure, obj. closure: > function: 0 WALL ( 0.00 usr + -0.00 sys = 0.00 CPU) @ > 305343511.45/s (n=40000) > (warning: too few iterations for a reliable count) > method: 0 WALL ( 0.00 usr + -0.00 sys = 0.00 CPU) @ > 27081922.82/s (n=40000) > (warning: too few iterations for a reliable count) > closure: 0 WALL ( 0.00 usr + 0.00 sys = 0.00 CPU) @ > 30280090.84/s (n=40000) > (warning: too few iterations for a reliable count) > obj. closure: 0 WALL ( 0.00 usr + 0.00 sys = 0.00 CPU) @ > 26058631.92/s (n=40000) > (warning: too few iterations for a reliable count) > Rate method obj. closure closure function > method 25974026/s -- -5% -16% -90% > obj. closure 27210884/s 5% -- -12% > -89% > closure 31007752/s 19% 14% -- -88% > function 254777070/s 881% 836% 722% -- > > Interesting, but are they meaningful? The warnings from Benchmark are > troubling, but I didn't have any immediate ideas on how to get rid of > them. Any suggestions? > > Thanks, > -n8 > > [1] http://ocaml-benchmark.sourceforge.net > well, running only 40,000 iterations is way too low because timing errors are going to get in the way of an accurate answer. On my computer, I bumped the iterations up to max_int, and still the function call was still taking less than one CPU second of time (which I guess is the requirement for the warning to disappear). Here's my numbers from an Athlon XP-M 2000+ (1.53GHz), compiled with ocaml 3.09.3, cmd. line: $ ocamlfind ocamlopt -package "benchmark" -inline 0 unix.cmxa benchmark.cmxa dispatch.ml Latencies for 1073741823 iterations of function, method, closure, obj. closure: function: 0 WALL (-0.02 usr + -0.00 sys = -0.02 CPU) (warning: too few iterations for a reliable count) method: 15 WALL (11.34 usr + 0.49 sys = 11.83 CPU) @ 90764313.02/s (n=1073741823) closure: 4 WALL ( 2.60 usr + -0.60 sys = 2.00 CPU) @ 536870911.50/s (n=1073741823) obj. closure: 8 WALL ( 4.31 usr + 0.03 sys = 4.34 CPU) @ 247405950.00/s (n=1073741823) Rate function method obj. closure closure function -5.36871e+10/s -- -59250% -21800% -10100% method 90764313/s -100% -- -63% -83% obj. closure 247405950/s -100% 173% -- -54% closure 536870911/s -101% 491% 117% -- Either function calls are just that stupidly efficient, or there's some optimization still going on. I'm guessing the second. E.