caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jon Harrop <jon@jdh30.plus.com>
To: caml users <caml-list@inria.fr>
Subject: Re: [Caml-list] Gripes with array
Date: Sat, 11 Sep 2004 15:36:10 +0100	[thread overview]
Message-ID: <200409111536.10902.jon@jdh30.plus.com> (raw)
In-Reply-To: <BD38E8B6-032F-11D9-8FD7-00039310CAE8@inria.fr>

On Friday 10 September 2004 14:45, Damien Doligez wrote:
> Not without implementing such horrors as Christophe described.  I don't
> much
> like the idea of introducing lots of bugs while slowing down the whole
> GC,
> even for programs that don't use arrays.

Yes indeed. I like Christophe's last idea though:

On Friday 10 September 2004 06:56, Christophe Raffalli wrote:
> You could also lie in the tag about the size of array (if the way the
> runtime finds free block of memory does not use it). It will cost an
> increment of integer at each step in the initialisation process which
> should not be much since the beginning of array may stay in the cache if
> the initialisation function is simple and this will be neggligeable if not.

What is the trickiest/most-error-prone part of doing this and could this be 
used to implement amortised extensible arrays within the compiler? I would 
like to see such a thing in the compiler (not that I distrust Markus ;-).

On Friday 10 September 2004 14:45, Damien Doligez wrote:
> An intermediate solution would 
> be to make a "Array.unsafe_make" primitive, which would use memset
> instead
> of initialising the array properly.  If you enter this as a feature wish
> in the BTS, I'll look into it.

No, I don't think the performance improvement would justify your time or the 
loss of safety. Could you add a memset to String.create though? :-)

> That would confirm my intuition that the calls to f dominates the
> initialisation time.

In the case of Array.init, yes. From my array_init, inlining and 
type-specialisation decrease the time taken by ~43% and, hence, these would 
be the most productive optimisations.

An array_init2 function which specialises the array type but uses an external 
"f" function betters the time taken by Array.init by ~36% (perhaps not 
significantly different):

let array_init2 l f =
  if l = 0 then [||] else
  let x : int = f 0 in
  let res = Array.make l x in
  for i = 1 to pred l do
    Array.unsafe_set res i (f i)
  done;
  res

I'm not sure what the impact of the type-specialisation on inlining is though. 
I'd imagine that doing such partial specialisations in ocamlopt is 
arbitrarily dodgy because you don't get any feedback on the benfits of your 
results. Perhaps this is a challenge for Basile's JIT? :-)

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


  parent reply	other threads:[~2004-09-11 14:40 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-09  2:10 Jon Harrop
2004-09-09  5:08 ` Ville-Pertti Keinonen
2004-09-09  7:17 ` Jean-Christophe Filliatre
2004-09-09  8:23   ` Richard Jones
2004-09-09  9:08     ` Olivier Andrieu
2004-09-09 12:08       ` Basile Starynkevitch [local]
2004-09-09 12:31         ` Damien Doligez
2004-09-09 10:42     ` Gerd Stolpmann
2004-09-09  9:37 ` Damien Doligez
2004-09-09 10:34   ` Jean-Christophe Filliatre
2004-09-09 12:15     ` Igor Pechtchanski
2004-09-09 13:01   ` Brian Hurt
2004-09-09 20:08     ` [Caml-list] 32-bit is sticking around Brandon J. Van Every
2004-09-09 21:04       ` Jon Harrop
2004-09-11 15:30         ` Lars Nilsson
2004-09-11 16:24           ` [off topic] " David MENTRE
2004-09-11 17:52             ` Lars Nilsson
     [not found]           ` <200409111656.11952.jon@jdh30.plus.com>
2004-09-11 17:47             ` Lars Nilsson
2004-09-09 16:58   ` [Caml-list] Gripes with array Jon Harrop
2004-09-10  5:56     ` Array.init (was [Caml-list] Gripes with array) Christophe Raffalli
2004-09-10  8:53       ` Richard Jones
2004-09-10 14:50         ` Damien Doligez
2004-09-13  7:02       ` Christophe Raffalli
2004-09-10 13:45     ` [Caml-list] Gripes with array Damien Doligez
2004-09-11  1:43       ` skaller
2004-09-11  3:16         ` skaller
2004-09-11 14:36       ` Jon Harrop [this message]
2004-09-11 20:53         ` Damien Doligez
2004-09-12 15:33           ` Jon Harrop
2004-09-12 16:07             ` Basile Starynkevitch [local]
2004-09-10 23:48 ` brogoff

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=200409111536.10902.jon@jdh30.plus.com \
    --to=jon@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;
as well as URLs for NNTP newsgroup(s).