From: Jon Harrop <postmaster@jdh30.plus.com>
To: caml-list@inria.fr
Subject: Re: [Caml-list] Does Caml have slow arithmetics ?
Date: Wed, 7 Jul 2004 22:26:36 +0100 [thread overview]
Message-ID: <200407072226.36912.postmaster@jdh30.plus.com> (raw)
In-Reply-To: <20040707145803.GB27498@yquem.inria.fr>
On Wednesday 07 July 2004 15:58, Xavier Leroy wrote:
> ... In your "f" function, you asked for the
> construction of a pair, and you get that pair construction in
> ocamlopt's output. If you didn't want the pair to be constructed, why
> did you write "f" this way?
Funny you should say that. I've only recently been trying my hand at such
low-level optimisations in OCaml and, to my surprise, I'm terrible at it (no
comments, please!).
Specifically, I recalled a post that ocamlopt doesn't do CSE. On the basis of
this I thought that I could optimise my original code:
let pivot = (first + last)/2 in
let sum1=helper (scale+1) (2*entry) first pivot in
let sum2=helper (scale+1) (2*entry+1) pivot last in
Array.unsafe_set data2 entry (sum1 -. sum2);
sum1 +. sum2
by performing some CSE manually, for example:
let pivot = (first + last)/2 in
let (sum1, sum2) =
let scale=scale+1 and entry=2*entry in
(helper scale entry first pivot, helper scale (entry+1) pivot last)
in
Array.unsafe_set data2 entry (sum1 -. sum2);
sum1 +. sum2
I also tried applying part of the arguments to Array.set to avoid the creation
of a pair:
let pivot = (first + last)/2 in
let set=Array.unsafe_set data2 entry in
let scale=scale+1 and entry=2*entry in
let sum1=helper scale entry first pivot in
let sum2=helper scale (entry+1) pivot last in
set (sum1 -. sum2);
sum1 +. sum2
Contrary to my expectations, these revised versions are 30 and 70% slower than
the original, respectively. In the first case, this is presumably because
ocamlopt is building the pair which I asked for but don't want. In the second
case, "set" appears to be very expensive to create and/or apply (forgive my
avoiding the word "closure" - I'm still not confident that I know its precise
meaning).
So, in order to optimise OCaml code in this much detail, I guess I need some
quantifications of the relative costs of such "primitive" operations. Has
anyone documented this and can anyone give me some hints?
From Evgeny Chukreev's post I'm guessing that constructing any data
structures, even pairs, can be very costly because it invokes the GC which
(always?) does a minor collection. Can partially applied functions be more
efficient if they are applied many times?
(For anyone who's interested, bounds checking only slows this array-intensive
code down by 9%)
Cheers,
Jon.
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2004-07-07 21:28 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-07 6:45 Diego Olivier Fernandez Pons
2004-07-07 8:14 ` Richard Jones
2004-07-07 9:13 ` Basile Starynkevitch [local]
2004-07-07 12:32 ` Diego Olivier Fernandez Pons
2004-07-07 13:00 ` Basile Starynkevitch [local]
2004-07-07 15:09 ` Olivier Pérès
2004-07-07 17:06 ` David Brown
2004-07-07 17:43 ` Olivier Pérès
2004-07-08 3:40 ` David Brown
2004-07-08 11:06 ` Olivier Pérès
2004-07-07 13:06 ` Richard Jones
2004-07-07 13:22 ` David Haguenauer
2004-07-07 15:48 ` Brian Hurt
2004-07-07 13:57 ` Evgeny Chukreev
2004-07-07 14:58 ` Xavier Leroy
2004-07-07 15:48 ` Evgeny Chukreev
2004-07-07 19:16 ` skaller
2004-07-08 3:44 ` David Brown
2004-07-08 5:50 ` skaller
2004-07-08 9:51 ` Andreas Rossberg
2004-07-08 12:03 ` Marcin 'Qrczak' Kowalczyk
2004-07-08 14:04 ` David Brown
2004-07-08 14:36 ` Luc Maranget
2004-07-08 15:11 ` Alex Baretta
2004-07-08 15:49 ` Luc Maranget
2004-07-09 14:06 ` Alex Baretta
2004-07-09 16:20 ` Markus Mottl
[not found] ` <Luc.Maranget@inria.fr>
2004-07-09 17:54 ` Norman Ramsey
2004-07-12 8:08 ` Luc Maranget
2004-07-08 15:51 ` Markus Mottl
2004-07-08 18:27 ` skaller
2004-07-08 21:14 ` [Caml-list] tail recursion and register poor Intel architecture Brandon J. Van Every
2004-07-08 21:35 ` Brian Hurt
2004-07-08 23:01 ` Brandon J. Van Every
2004-07-09 4:36 ` Brian Hurt
2004-07-09 6:53 ` Florian Hars
2004-07-09 14:44 ` Brandon J. Van Every
2004-07-09 6:55 ` skaller
2004-07-09 14:45 ` Brandon J. Van Every
2004-07-09 16:09 ` skaller
2004-07-10 9:19 ` [Caml-list] embedded OCaml Brandon J. Van Every
2004-07-11 23:11 ` Alex Baretta
2004-07-12 7:39 ` Brandon J. Van Every
2004-07-12 14:04 ` Alex Baretta
2004-07-12 18:48 ` Brandon J. Van Every
2004-07-12 23:22 ` Richard Jones
2004-07-13 6:39 ` Alex Baretta
2004-07-13 8:47 ` Brandon J. Van Every
2004-07-13 8:58 ` Benjamin Geer
2004-07-13 9:47 ` Brandon J. Van Every
2004-07-13 9:18 ` Damien Doligez
2004-07-13 9:56 ` [Caml-list] OCaml as business model Brandon J. Van Every
2004-07-13 9:59 ` Richard Jones
2004-07-13 10:50 ` Brandon J. Van Every
2004-07-13 11:20 ` Damien Doligez
2004-07-13 12:01 ` Brandon J. Van Every
2004-07-14 8:05 ` [Caml-list] embedded OCaml I R T
2004-07-12 10:25 ` Christophe TROESTLER
2004-07-13 7:06 ` Alex Baretta
2004-07-08 17:12 ` Tail calls (Was Re: [Caml-list] Does Caml have slow arithmetics ?) brogoff
2004-07-08 17:23 ` Richard Jones
2004-07-12 17:07 ` Xavier Leroy
2004-07-12 21:13 ` skaller
2004-07-13 7:20 ` Xavier Leroy
2004-07-08 15:00 ` [Caml-list] Does Caml have slow arithmetics ? Brian Hurt
2004-07-08 13:30 ` Alex Baretta
2004-07-07 21:26 ` Jon Harrop [this message]
2004-07-08 5:05 ` Jacques GARRIGUE
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=200407072226.36912.postmaster@jdh30.plus.com \
--to=postmaster@jdh30.plus.com \
--cc=caml-list@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