From: Gerd Stolpmann <info@gerd-stolpmann.de>
To: Hugo Ferreira <hmf@inescporto.pt>
Cc: Fabrice Le Fessant <Fabrice.Le_fessant@inria.fr>, caml-list@inria.fr
Subject: Re: [Caml-list] Efficient OCaml multicore -- roadmap?
Date: Fri, 25 Mar 2011 13:25:03 +0100 [thread overview]
Message-ID: <1301055903.8429.314.camel@thinkpad> (raw)
In-Reply-To: <4D8C73C8.6020801@inescporto.pt>
Am Freitag, den 25.03.2011, 10:51 +0000 schrieb Hugo Ferreira:
> Hello,
>
> First and foremost just let me say that I am not an expert on this
> issue but I have a vested interest in Ocaml's support for parallel
> execution, hence my comment.
>
> On 03/24/2011 11:13 PM, Fabrice Le Fessant wrote:
> > Hi,
> >
> > Actually, I had a discussion two weeks ago with Xavier and Damien
> > about this issue. There is some kind of agreement that the ocaml way of
> > supporting multicore would be to have several runtimes running in the
> > same process, in different threads. That way, the GC would still be
> > mono-threaded, so almost no speed loss for mono-threaded programs (i.e.
> > currently all OCaml programs ;-) ). There would be some kind of "fork"
> > function, that would create a new thread running a function in a new
> > heap, probably generated by a copy-on-need algorithm. The different
> > threads would not share heap memory, but would be allowed to share
> > structures outside of their heaps, probably for simple types like
> > strings and int/float arrays (or using the Ancient library).
> >
>
> I see the restriction that shared data be simple data types as a
> significant disadvantage.
Well, Fabrice was mentioning Ancient which is a code word for putting
complex values to non-GC-managed memory. It's only that the application
programmer is finally responsible for managing that memory (especially
when to deallocate).
> In my experience being able to access complex
> data structure is crucial. Whenever I see this constraint I keep asking:
> why not bite the bullet? Why not take the bull by the horns and do it as
> well as possible? If not, I believe its a waste of precious time.
>
> That being said, I have a question: why will the proposal below not work?
>
> Assuming all shared data structures are immutable is it possible to:
>
> 1) Use a GC that is thread aware.
> 2) Let each thread have its own thread-aware GC.
> 4) Mark the shared data by tagging it with the owner of the data and
> counting the number of threads using this data.
> 5) Each thread has it own local GC. This GC only manages the thread's
> local data that is not shared with any other.
> 6) If data is shared, the thread that shares immediately marks it as
> shared.
> 7) If a thread terminates before the shared data can be collected (that
> is when the shared counter is not 0), the ownership is reverted to any
> one of the sharing threads.
> 8) The last thread to hold a shared data structure is responsible for GC.
>
> Am I totally off the mark here?
It would be a bit more complicated. You have two possible pointers:
(1) From thread-specific memory to shared memory
(2) From shared memory to shared memory
Pointers from shared memory to thread-specific memory would be
forbidden, of course. The problem is now that you can manage (1) with
reference counting (where the counter would need some protection for
concurrent accesses), but for (2) you would need, at least in the
general view, a garbage collector that is able to deal with circular
pointers.
So, probably there is a solution to this, but it is very complex. You
would need to extend the header of Ocaml values with counters when they
are allocated in the shared space (or the counters are put elsewhere,
but this would make it more costly to access them). There needs to be a
special version of the garbage collector for the shared space.
This is probably all possible, but the effort is not low to get this
level of automatism. If we restrict ourselves to manually managed shared
space (i.e. the app has to decide when to delete something), we can
maybe get something soon.
Gerd
>
> Regards,
> Hugo F.
>
> P.S: Note that the above can be "enhanced" by for example identifying
> read-only data in order to facilitate GC.
>
>
> > Now, there are still two problems:
> > (1) We don't know yet how to implement that in a portable way. TLS
> > (Thread-local storage) is only available on a few architectures. And not
> > using TLS implies non-backward compatible changes to the FFI
> > (Foreign-Functions Interface), i.e. all stub libraries would have to be
> > rewritten.
> > (2) As Gerd pointed it, there are not so many programs that would
> > benefit from that. So it is not currently on the top of our priority
> > list, although I am planning to give it a try in the next months, at
> > least for the TLS version.
> >
> > Cheers,
>
>
--
------------------------------------------------------------
Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany
gerd@gerd-stolpmann.de http://www.gerd-stolpmann.de
Phone: +49-6151-153855 Fax: +49-6151-997714
------------------------------------------------------------
next prev parent reply other threads:[~2011-03-25 12:25 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <2054357367.219171.1300974318806.JavaMail.root@zmbs4.inria.fr>
2011-03-24 23:13 ` Fabrice Le Fessant
2011-03-25 0:23 ` [Caml-list] " Sylvain Le Gall
2011-03-25 9:55 ` [Caml-list] " Alain Frisch
2011-03-25 11:44 ` Gerd Stolpmann
[not found] ` <1396338209.232813.1301046980856.JavaMail.root@zmbs4.inria.fr>
2011-03-25 10:23 ` Fabrice Le Fessant
2011-03-25 12:07 ` Gerd Stolpmann
2011-04-16 12:12 ` Jon Harrop
2011-03-25 10:51 ` Hugo Ferreira
2011-03-25 12:25 ` Gerd Stolpmann [this message]
2011-03-25 12:58 ` Hugo Ferreira
[not found] ` <341494683.237537.1301057887481.JavaMail.root@zmbs4.inria.fr>
2011-03-25 13:10 ` Fabrice Le Fessant
2011-03-25 13:41 ` Dario Teixeira
2011-03-30 18:12 ` Jon Harrop
2011-03-25 15:44 ` Hugo Ferreira
2011-03-25 18:24 ` Martin Jambon
2011-03-25 19:19 ` Hugo Ferreira
2011-03-25 20:26 ` Gerd Stolpmann
2011-03-26 9:11 ` Hugo Ferreira
2011-03-26 10:31 ` Richard W.M. Jones
2011-03-30 16:56 ` Jon Harrop
2011-03-30 19:24 ` Richard W.M. Jones
2011-04-20 21:44 ` Jon Harrop
2011-04-19 9:57 ` Eray Ozkural
2011-04-19 10:05 ` Hugo Ferreira
2011-04-19 20:26 ` Gerd Stolpmann
2011-04-20 7:59 ` Hugo Ferreira
2011-04-20 12:30 ` Markus Mottl
2011-04-20 12:53 ` Hugo Ferreira
2011-04-20 13:22 ` Markus Mottl
2011-04-20 14:00 ` Edgar Friendly
2011-04-19 22:49 ` Jon Harrop
2011-03-30 17:02 ` Jon Harrop
2011-04-20 19:23 ` Jon Harrop
2011-04-20 20:05 ` Alexy Khrabrov
2011-04-20 23:00 ` Jon Harrop
[not found] ` <76544177.594058.1303341821437.JavaMail.root@zmbs4.inria.fr>
2011-04-21 7:48 ` Fabrice Le Fessant
2011-04-21 8:35 ` Hugo Ferreira
2011-04-23 17:32 ` Jon Harrop
2011-04-21 9:09 ` Alain Frisch
[not found] ` <799994864.610698.1303412613509.JavaMail.root@zmbs4.inria.fr>
2011-04-22 8:06 ` Fabrice Le Fessant
2011-04-22 9:11 ` Gerd Stolpmann
2011-04-23 10:17 ` Eray Ozkural
2011-04-23 13:47 ` Alexy Khrabrov
2011-04-23 17:39 ` Eray Ozkural
2011-04-23 20:18 ` Alexy Khrabrov
2011-04-23 21:18 ` Jon Harrop
2011-04-24 0:33 ` Eray Ozkural
2011-04-28 14:42 ` orbitz
2011-04-23 19:02 ` Jon Harrop
2011-04-22 9:44 ` Vincent Aravantinos
[not found] ` <20110421.210304.1267840107736400776.Christophe.Troestler+ocaml@umons.ac.be>
2011-04-21 19:53 ` Hezekiah M. Carty
2011-04-22 8:34 ` Alain Frisch
2011-04-21 10:09 ` Philippe Strauss
2011-04-23 17:44 ` Jon Harrop
2011-04-23 17:05 ` Jon Harrop
2011-04-20 20:30 ` Gerd Stolpmann
2011-04-20 23:33 ` Jon Harrop
2011-03-25 20:27 ` Philippe Strauss
2011-04-19 22:47 ` Jon Harrop
[not found] ` <869445701.579183.1303253283515.JavaMail.root@zmbs4.inria.fr>
2011-04-20 9:25 ` Fabrice Le Fessant
2011-03-25 18:45 ` Andrei Formiga
2011-03-30 17:00 ` Jon Harrop
2011-04-13 3:36 ` Lucas Dixon
2011-04-13 13:01 ` Gerd Stolpmann
2011-04-13 13:09 ` Lucas Dixon
2011-04-13 23:04 ` Goswin von Brederlow
2011-04-16 13:54 ` Jon Harrop
2011-03-24 13:44 Alexy Khrabrov
2011-03-24 14:57 ` Gerd Stolpmann
2011-03-24 15:03 ` Joel Reymont
2011-03-24 15:28 ` Guillaume Yziquel
2011-03-24 15:48 ` Gerd Stolpmann
2011-03-24 15:38 ` Gerd Stolpmann
2011-03-25 19:49 ` Richard W.M. Jones
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=1301055903.8429.314.camel@thinkpad \
--to=info@gerd-stolpmann.de \
--cc=Fabrice.Le_fessant@inria.fr \
--cc=caml-list@inria.fr \
--cc=hmf@inescporto.pt \
/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