From: Jon Harrop <jon@ffconsultancy.com>
To: caml-list@yquem.inria.fr
Subject: Ray tracer language comparison
Date: Tue, 4 Oct 2005 00:18:24 +0100 [thread overview]
Message-ID: <200510040018.24932.jon@ffconsultancy.com> (raw)
I've updated my language comparison with four implementations in Scheme and
one in Lisp:
http://www.ffconsultancy.com/free/ray_tracer/languages.html
In short, Stalin's run-time performance is excellent (36% faster than
ocamlopt) but its compile times are poor (2,000x slower than ocamlopt!) and
SBCL-compiled Lisp is 6x slower than ocamlopt. Both Scheme and Lisp are >2x
as verbose as OCaml.
Juho Snellman posted an interesting Lisp variant that used a macro to factor
out unboxing, greatly reducing the stress on the GC and improving Lisp's
performance to that of OCaml. Applying the same optimisation to the OCaml
implementations makes them much faster again but I have yet to factor this
out into a camlp4 macro.
This raises two interesting questions:
1. Can a camlp4 macro be written to factor out this unboxing transformation:
let v = center -| orig in
let b = dot v dir in
let disc = b *. b -. dot v v +. radius *. radius in
where "+|" denotes vector addition and "*|" denotes scalar*vector
multiplication. Transformed to:
let vx = center.x -. orig.x in
let vy = center.y -. orig.y in
let vz = center.z -. orig.z in
let b = vx *. dir.x +. vy *. dir.y +. vz *. dir.z in
let vv = vx *. vx +. vy *. vy +. vz *. vz in
let disc = b *. b -. vv +. radius *. radius in
So the intermediate vectors are not allocated and collected.
2. Manually inlining the code gives a huge performance improvement but using
-inline does not appear to give this improvement. I assume ocamlopt can
inline this but will not remove the boxing and subsequent unboxing. Is that
right?
--
Dr Jon D Harrop, Flying Frog Consultancy Ltd.
Objective CAML for Scientists
http://www.ffconsultancy.com/products/ocaml_for_scientists
next reply other threads:[~2005-10-03 23:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-03 23:18 Jon Harrop [this message]
2005-10-04 13:49 ` [Caml-list] " Thomas Fischbacher
2005-10-09 5:26 ` Thomas Fischbacher
2005-10-09 11:24 ` Yaron Minsky
2005-10-09 13:59 ` Thomas Fischbacher
2005-10-09 17:37 ` Florian Weimer
2005-10-09 18:07 ` Thomas Fischbacher
2005-10-09 14:53 ` Vincenzo Ciancia
2005-10-09 10:19 ` [Caml-list] " Gerd Stolpmann
2005-10-09 11:26 ` sejourne_kevin
2005-10-09 14:58 ` [Caml-list] " Jon Harrop
2005-10-09 17:25 ` Thomas Fischbacher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200510040018.24932.jon@ffconsultancy.com \
--to=jon@ffconsultancy.com \
--cc=caml-list@yquem.inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).