From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by yquem.inria.fr (Postfix) with ESMTP id 6C870BC8B for ; Sun, 13 Feb 2005 16:15:20 +0100 (CET) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id j1DFFJPj021800 for ; Sun, 13 Feb 2005 16:15:20 +0100 Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA03954 for ; Sun, 13 Feb 2005 16:15:18 +0100 (MET) Received: from mail-in-04.arcor-online.net (mail-in-04.arcor-online.net [151.189.21.44]) by concorde.inria.fr (8.13.0/8.13.0) with ESMTP id j1DFFHjh021791 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Sun, 13 Feb 2005 16:15:18 +0100 Received: from mail.arcor.de (dialin-212-144-211-006.arcor-ip.net [212.144.211.6]) by mail-in-04.arcor-online.net (Postfix) with ESMTP id D4BB4FDF66; Sun, 13 Feb 2005 16:15:13 +0100 (CET) Received: by denkmaschine.unterwegs.local (Postfix, from userid 500) id 70AF21CD4CDB; Mon, 14 Feb 2005 16:15:36 +0100 (CET) X-From-Line: nobody Sun Feb 13 17:40:54 2005 To: OCaml List Cc: shootout-list@lists.alioth.debian.org Subject: Re: [Caml-list] [Benchmark] NBody References: <20050207.195724.87945401.Christophe.Troestler@umh.ac.be> <20050208104312.GA10035@yquem.inria.fr> From: Christoph Bauer Date: Sun, 13 Feb 2005 17:40:52 +0100 In-Reply-To: <20050208104312.GA10035@yquem.inria.fr> (Xavier Leroy's message of "Tue, 8 Feb 2005 11:43:12 +0100") User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) Content-Type: multipart/mixed; boundary="=-=-=" Message-ID: MIME-Version: 1.0 X-Miltered: at concorde with ID 420F6F07.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Miltered: at concorde with ID 420F6F05.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Spam: no; 0.00; caml-list:01 mlton:01 flags:01 gcc:01 mlton:01 sml:01 ocamlopt:01 -inline:01 -unsafe:01 gcc:01 ocaml:01 ich:98 compile:01 benchmark:02 -ccopt:03 X-Attachments: type="application/octet-stream" name="nbody.sml" X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on yquem.inria.fr X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=disabled version=3.0.2 X-Spam-Level: --=-=-= Hi, > > The C translation is attached for your amusement. and here is a mlton version. The test runs on a Pentium-M. compile flags: gcc -march=pentium-m -O2 -o nbody-gcc nbody.c mlton -cc-opt -ffast-math -output nbody-mlton nbody.sml ocamlopt -ccopt -ffast-math -inline 3 -unsafe -o nbody-ocaml nbody.ml nbody gcc ocaml mlton 1000 0.000 0.000 0.000 10000 0.014 0.019 0.024 100000 0.070 0.301 0.239 200000 0.231 0.621 0.478 500000 0.552 1.556 1.189 1000000 1.123 3.112 2.377 2000000 2.246 6.229 4.704 3000000 3.367 9.286 8.865 4000000 4.457 12.501 9.687 Christoph Bauer --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=nbody.sml Content-Transfer-Encoding: base64 dmFsIHBpID0gMy4xNDE1OTI2NTM1ODk3OTMKdmFsIHNvbGFyX21hc3MgPSA0LjAgKiBwaSAqIHBp CnZhbCBkYXlzX3Blcl95ZWFyID0gMzY1LjI0Cgp0eXBlIHBsYW5ldCA9IHsKICB4IDogcmVhbCBy ZWYsCiAgeSA6IHJlYWwgcmVmLAogIHogOiByZWFsIHJlZiwKICB2eDogcmVhbCByZWYsICAKICB2 eTogcmVhbCByZWYsICAKICB2ejogcmVhbCByZWYsCiAgbWFzcyA6IHJlYWwKfQoKCmZ1biBmb3Ig KHN0YXJ0LCBzdG9wLCBmKSA9CiAgIGxldAogICAgICBmdW4gbG9vcCBpID0KICAgICAgICAgaWYg aSA+IHN0b3AKICAgICAgICAgICAgdGhlbiAoKQogICAgICAgICBlbHNlIChmIGk7IGxvb3AgKGkg KyAxKSkKICAgaW4KICAgICAgbG9vcCBzdGFydAogICBlbmQKCmZ1biBhZHZhbmNlIChib2RpZXMg OiBwbGFuZXQgYXJyYXkpIGR0ID0KICBsZXQgCiAgICAgdmFsIG4gPSBBcnJheS5sZW5ndGggYm9k aWVzIC0gMQogIGluIAogICBmb3IgKDAsIG4sIGZuIGkgPT4KICAgbGV0IAogICAgICB2YWwgYiA9 IEFycmF5LnN1YiAoYm9kaWVzLCBpKSAKICAgaW4KICAgICBmb3IgKGkrMSwgbiwgZm4gaiA9Pgog ICAgICAgICBsZXQgCiAgICAgICAgICAgdmFsIGInID0gQXJyYXkuc3ViIChib2RpZXMsIGopCiAg ICAgICAgICAgdmFsIGR4ID0gISgjeCBiKSAtICEoI3ggYicpICAKICAgICAgICAgICB2YWwgZHkg PSAhKCN5IGIpIC0gISgjeSBiJykKICAgICAgICAgICB2YWwgZHogPSAhKCN6IGIpIC0gISgjeiBi JykKICAgICAgICAgICB2YWwgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkg KyBkeiAqIGR6KSAKICAgICAgICAgICB2YWwgbWFnID0gZHQgLyAoZGlzdGFuY2UgKiBkaXN0YW5j ZSAqIGRpc3RhbmNlKSAKICAgICAgICAgaW4KICAgICAgICAgICAjdnggYiA6PSAhKCN2eCBiKSAt IGR4ICogKCNtYXNzIGInKSAqIG1hZzsKICAgICAgICAgICAjdnkgYiA6PSAhKCN2eSBiKSAtIGR5 ICogKCNtYXNzIGInKSAqIG1hZzsKICAgICAgICAgICAjdnogYiA6PSAhKCN2eiBiKSAtIGR6ICog KCNtYXNzIGInKSAqIG1hZzsKCSAgIAogICAgICAgICAgICN2eCBiJyA6PSAhKCN2eCBiJykgKyBk eCAqICgjbWFzcyBiKSAqIG1hZzsKICAgICAgICAgICAjdnkgYicgOj0gISgjdnkgYicpICsgZHkg KiAoI21hc3MgYikgKiBtYWc7CiAgICAgICAgICAgI3Z6IGInIDo9ICEoI3Z6IGInKSArIGR6ICog KCNtYXNzIGIpICogbWFnCiAgICAgICAgZW5kKQogIGVuZCk7CgogIGZvciggMCwgbiwgZm4gaSA9 PgogICAgbGV0IAogICAgICAgdmFsIGIgPSBBcnJheS5zdWIgKGJvZGllcywgaSkgCiAgICBpbgoJ I3ggYiA6PSAhKCN4IGIpICsgZHQgKiAhKCN2eCBiKTsKCSN5IGIgOj0gISgjeSBiKSArIGR0ICog ISgjdnkgYik7CgkjeiBiIDo9ICEoI3ogYikgKyBkdCAqICEoI3Z6IGIpCiAgICBlbmQpCmVuZAoK ZnVuIGVuZXJneSAoYm9kaWVzIDogcGxhbmV0IGFycmF5KSA9CiAgbGV0IAogICAgIHZhbCBlID0g cmVmIDAuMCAKICBpbgogICAgZm9yKDAsIEFycmF5Lmxlbmd0aCBib2RpZXMgLSAxLCBmbiBpID0+ CiAgICBsZXQgCiAgICAgICAgdmFsIGIgPSBBcnJheS5zdWIgKGJvZGllcywgaSkgCiAgICBpbgog ICAgICAgZSA6PSAhZSArIDAuNSAqICgjbWFzcyBiKSAqIAoJCSAoISgjdnggYikgKiAhKCN2eCBi KSArICEoI3Z5IGIpIAoJCSAgKiAhKCN2eSBiKSArICEoI3Z6IGIpICogISgjdnogYikpOwogICAg ICAgZm9yIChpKzEsIEFycmF5Lmxlbmd0aCBib2RpZXMgLSAxLCBmbiBqID0+IAogICAgICAgICBs ZXQgCiAgICAgICAgICAgIHZhbCBiJyA9IEFycmF5LnN1YiAoYm9kaWVzLCBqKQogICAgICAgICAg ICB2YWwgZHggPSAhKCN4IGIpIC0gISgjeCBiJykgCiAgICAgICAgICAgIHZhbCBkeSA9ICEoI3kg YikgLSAhKCN5IGInKSAgCiAgICAgICAgICAgIHZhbCBkeiA9ICEoI3ogYikgLSAhKCN6IGInKQog ICAgICAgICAgICB2YWwgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkgKyBk eiAqIGR6KSAKICAgICAgICAgaW4KICAgICAgICAgICAgIGUgOj0gIWUgLSAoKCNtYXNzIGIpICog KCNtYXNzIGInKSkgLyBkaXN0YW5jZQogICAgICAgICBlbmQpCiAgIGVuZCk7CiAgICFlCiAgZW5k CgoKCmZ1biBvZmZzZXRfbW9tZW50dW0gKGJvZGllcyA6IHBsYW5ldCBhcnJheSkgPQogIGxldCAK ICAgICAgdmFsIHB4ID0gcmVmIDAuMAogICAgICB2YWwgcHkgPSByZWYgMC4wIAogICAgICB2YWwg cHogPSByZWYgMC4wCiAgIGluCiAgICAgZm9yICgwLCBBcnJheS5sZW5ndGggYm9kaWVzIC0gMSwg CgkgIGZuIGkgPT4KCSAgICAgKHB4IDo9ICFweCArICEoI3Z4IChBcnJheS5zdWIgKGJvZGllcywg aSkpKSAqICgjbWFzcyAoQXJyYXkuc3ViIChib2RpZXMsIGkpKSk7CgkgICAgICBweSA6PSAhcHkg KyAhKCN2eSAoQXJyYXkuc3ViIChib2RpZXMsIGkpKSkgKiAoI21hc3MgKEFycmF5LnN1YiAoYm9k aWVzLCBpKSkpOwoJICAgICAgcHogOj0gIXB6ICsgISgjdnogKEFycmF5LnN1YiAoYm9kaWVzLCBp KSkpICogKCNtYXNzIChBcnJheS5zdWIgKGJvZGllcywgaSkpKSkpOwogICAgICN2eCAoQXJyYXku c3ViIChib2RpZXMsIDApKSA6PSB+ICghcHggLyBzb2xhcl9tYXNzKTsKICAgICAjdnkgKEFycmF5 LnN1YiAoYm9kaWVzLCAwKSkgOj0gfiAoIXB5IC8gc29sYXJfbWFzcyk7CiAgICAgI3Z6IChBcnJh eS5zdWIgKGJvZGllcywgMCkpIDo9IH4gKCFweiAvIHNvbGFyX21hc3MpCiAgZW5kCgp2YWwganVw aXRlciA9IHsKICB4ID0gcmVmIDQuODQxNDMxNDQyNDY0NzIwOTAsCiAgeSA9IHJlZiB+MS4xNjAz MjAwNDQwMjc0MjgzOSwKICB6ID0gcmVmIH4xLjAzNjIyMDQ0NDcxMTIzMTA5ZX4xLAogIHZ4ID0g cmVmICgxLjY2MDA3NjY0Mjc0NDAzNjk0ZX4zICogZGF5c19wZXJfeWVhciksCiAgdnkgPSByZWYg KDcuNjk5MDExMTg0MTk3NDA0MjVlfjMgKiBkYXlzX3Blcl95ZWFyKSwKICB2eiA9IHJlZiAofjYu OTA0NjAwMTY5NzIwNjMwMjNlfjUgKiBkYXlzX3Blcl95ZWFyKSwKICBtYXNzID0gOS41NDc5MTkz ODQyNDMyNjYwOWV+NCAqIHNvbGFyX21hc3MKfQoKdmFsIHNhdHVybiA9IHsKICB4ID0gcmVmIDgu MzQzMzY2NzE4MjQ0NTc5ODcsCiAgeSA9IHJlZiA0LjEyNDc5ODU2NDEyNDMwNDc5ZTAwLAogIHog PSByZWYgfjQuMDM1MjM0MTcxMTQzMjEzODFlfjAxLAogIHZ4ID0gcmVmICh+Mi43Njc0MjUxMDcy Njg2MjQxMWV+MDMgKiBkYXlzX3Blcl95ZWFyKSwKICB2eSA9IHJlZiAoNC45OTg1MjgwMTIzNDkx NzIzOGV+MDMgKiBkYXlzX3Blcl95ZWFyKSwKICB2eiA9IHJlZiAoMi4zMDQxNzI5NzU3Mzc2Mzky OWV+MDUgKiBkYXlzX3Blcl95ZWFyKSwKICBtYXNzID0gMi44NTg4NTk4MDY2NjEzMDgxMmV+MDQg KiBzb2xhcl9tYXNzCn0KCnZhbCB1cmFudXMgPSB7CiAgeCA9IHJlZiAxLjI4OTQzNjk1NjIxMzkx MzEwZTAxLAogIHkgPSByZWYgfjEuNTExMTE1MTQwMTY5ODYzMTJlMDEsCiAgeiA9IHJlZiB+Mi4y MzMwNzU3ODg5MjY1NTczNGV+MDEsCiAgdnggPSByZWYgKDIuOTY0NjAxMzc1NjQ3NjE2MThlfjAz ICogZGF5c19wZXJfeWVhciksCiAgdnkgPSByZWYgKDIuMzc4NDcxNzM5NTk0ODA5NTBlfjAzICog ZGF5c19wZXJfeWVhciksCiAgdnogPSByZWYgKH4yLjk2NTg5NTY4NTQwMjM3NTU2ZX4wNSAqIGRh eXNfcGVyX3llYXIpLAogIG1hc3MgPSA0LjM2NjI0NDA0MzM1MTU2Mjk4ZX4wNSAqIHNvbGFyX21h c3MKfQoKdmFsIG5lcHR1bmUgPSB7CiAgeCA9IHJlZiAxLjUzNzk2OTcxMTQ4NTA5MTY1ZTAxLAog IHkgPSByZWYgfjIuNTkxOTMxNDYwOTk4Nzk2NDFlMDEsCiAgeiA9IHJlZiAxLjc5MjU4NzcyOTUw MzcxMTgxZX4wMSwKICB2eCA9IHJlZiAoMi42ODA2Nzc3MjQ5MDM4OTMyMmV+MDMgKiBkYXlzX3Bl cl95ZWFyKSwKICB2eSA9IHJlZiAoMS42MjgyNDE3MDAzODI0MjI5NWV+MDMgKiBkYXlzX3Blcl95 ZWFyKSwKICB2eiA9IHJlZiAofjkuNTE1OTIyNTQ1MTk3MTU4NzBlfjA1ICogZGF5c19wZXJfeWVh ciksCiAgbWFzcyA9IDUuMTUxMzg5MDIwNDY2MTE0NTFlfjA1ICogc29sYXJfbWFzcwp9Cgp2YWwg c3VuID0gewogIHggPSByZWYgMC4wLCAgeSA9IHJlZiAwLjAsICB6ID0gcmVmIDAuMCwgIHZ4ID0g cmVmIDAuMCwgIHZ5ID0gcmVmIDAuMCwgdnogPSByZWYgMC4wLAogIG1hc3M9IHNvbGFyX21hc3MK fQoKCgpmdW4gcHJpbnRyIHIgPSAKICBsZXQgCiAgICB2YWwgcyA9IFJlYWwuZm10IChTdHJpbmdD dnQuRklYIChTT01FIDkpKSByCiAgaW4gKHByaW50IHM7IHByaW50ICJcbiIpIGVuZAoKdmFsIGJv ZGllcyA9IEFycmF5LmZyb21MaXN0IFsgc3VuLCBqdXBpdGVyLCBzYXR1cm4sIHVyYW51cywgbmVw dHVuZSBdCgoKZnVuIG1haW4gYXJncyA9CiAgICBsZXQgCgl2YWwgbiA9IAoJICAgIGNhc2UgSW50 LmZyb21TdHJpbmcgKExpc3QuaGQgYXJncykgb2YKCQlTT01FIGkgPT4gaQoJICAgICAgfCBOT05F ID0+IDAKCQkJCiAgICBpbgoJb2Zmc2V0X21vbWVudHVtIGJvZGllczsKCXByaW50ciAoZW5lcmd5 IGJvZGllcyk7Cglmb3IgKDEsIG4sIGZuIF8gPT4gYWR2YW5jZSBib2RpZXMgMC4wMSk7Cglwcmlu dHIgKGVuZXJneSBib2RpZXMpCiAgICBlbmQKCnZhbCBfID0gbWFpbiAoQ29tbWFuZExpbmUuYXJn dW1lbnRzICgpKQo= --=-=-= -- let () = let rec f a w i j = Printf.printf "%.20f\r" a; let a1 = a *. i /. j in if w then f a1 false (i +. 2.0) j else f a1 true i (j +. 2.0) in f 2.0 false 2.0 1.0 --=-=-=--