[Shootout-list] Re: [Caml-list] [Benchmark] NBody

Christoph Bauer ich@christoph-bauer.net
Sun, 13 Feb 2005 17:40:52 +0100


--=-=-=

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

--=-=-=--