From: Jon Harrop <jon@ffconsultancy.com>
To: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Re: multicore wish
Date: Thu, 24 Dec 2009 17:06:51 +0000 [thread overview]
Message-ID: <200912241706.51917.jon@ffconsultancy.com> (raw)
In-Reply-To: <87r5qk5x1j.fsf@frosties.localdomain>
On Thursday 24 December 2009 13:19:52 Goswin von Brederlow wrote:
> Jon Harrop <jon@ffconsultancy.com> writes:
> > No, in OCaml I fork every child. That is the only transparent way to give
> > the child a coherent view of the heap but it is extremely slow (~1ms):
>
> So if you add a (sleep 60) to the ocaml code then ocaml gets even
> more worse than F#? You are comparing an implementation that is
> specifically optimized to use things F# is good at and ocaml is
> bad. To give a fair comparison you need to optimize the implementation
> to the language.
Post a better OCaml solution if you can.
> >> Each process then has a work queue which is works through. So they will
> >> always use the local data. Only when a queue runs dry they steal from
> >> another process and ruin locality.
> >
> > You are correctly describing the efficient solution based upon
> > work-stealing queues that F# uses but OCaml cannot express it.
>
> You mean that you didn't implement that way.
No, I mean OCaml cannot express it.
> I can easily express that with closures and pre-forked worker threads.
OCaml's threads do not run in parallel so that will not work.
> >> So I don't see where your argument fits. You are not creating childs
> >> on the fly. Only at the start and they run till all the work is done.
> >> At least in this example.
> >
> > No, every recursive invocation of the parallel quicksort spawns another
> > child on-the-fly. That's precisely why it parallelizes so efficiently
> > when you have wait-free work-stealing task deques and a shared heap. In
> > general, you rewrite algorithms into this recursive divide and conquer
> > form and parallelize when possible. You can parallelize a *lot* of
> > problems efficiently that way.
>
> That seems awfully ineficient. Then you have a million children
> running on maybe 4 cores and each job queue holds no job.
>
> I think we mean different things by children. By children I mean what
> the kernel sees as children. Newly forked threads. I think you mean
> jobs that get put into the queues. There is no reason to fork a new
> system thread every time the parallel quicksort splits an array in
> two.
The children are lightweight tasks, not threads or processes.
> >> Why would you fork in invoke?
> >
> > Fork is currently the only transparent way to implement "invoke" but it
> > is extremely slow and unreliable.
>
> No, it is the insane way. Use closures.
Please demonstrate.
> > parallel programs that leverage multicores and run a *lot* faster than
> > anything that can be written in OCaml. You can even make this accessible
> > to OCaml programmers as a DSL with automatic interop to make high
> > performance parallel programming as easy as possible from OCaml.
>
> Or just implement it properly in ocaml. The problem part is the
> GC. The rest is easy.
No kidding.
--
Dr Jon Harrop, Flying Frog Consultancy Ltd.
http://www.ffconsultancy.com/?e
next prev parent reply other threads:[~2009-12-24 15:52 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-19 19:38 OCaml is broken Jeff Shaw
2009-12-20 4:43 ` [Caml-list] " Jon Harrop
2009-12-20 12:21 ` [***SPAM*** Score/Req: 10.1/8.0] " Erik Rigtorp
2009-12-20 13:22 ` Martin Jambon
2009-12-20 13:47 ` Yaron Minsky
2009-12-20 16:01 ` Gerd Stolpmann
2009-12-21 22:50 ` [***SPAM*** Score/Req: 10.1/8.0] Re: [***SPAM*** Score/Req: 10.1/8.0] " Erik Rigtorp
2009-12-22 12:04 ` Erik Rigtorp
2009-12-22 12:27 ` Mihamina Rakotomandimby
2009-12-22 13:27 ` Gerd Stolpmann
2009-12-23 11:25 ` Erik Rigtorp
2009-12-29 12:07 ` [***SPAM*** Score/Req: 10.1/8.0] Re: [***SPAM*** Score/Req: 10.1/8.0] " Richard Jones
2009-12-20 14:27 ` Dario Teixeira
2009-12-20 21:14 ` Jon Harrop
2009-12-21 1:08 ` Gerd Stolpmann
2009-12-21 4:30 ` Jon Harrop
2009-12-21 3:58 ` Yaron Minsky
2009-12-21 5:32 ` Markus Mottl
2009-12-21 13:29 ` Jon Harrop
2009-12-26 17:08 ` orbitz
2009-12-20 19:38 ` [***SPAM*** Score/Req: 10.1/8.0] " Jon Harrop
2009-12-21 12:26 ` Mihamina Rakotomandimby
2009-12-21 14:19 ` general question, was " Keyan
2009-12-21 14:40 ` [Caml-list] " rixed
2009-12-21 14:42 ` Gerd Stolpmann
2009-12-21 15:25 ` Eray Ozkural
2009-12-21 14:50 ` Philip
2009-12-21 15:01 ` Keyan
2009-12-21 15:13 ` Stefano Zacchiroli
2009-12-21 15:27 ` Dario Teixeira
2009-12-21 15:46 ` Jacques Carette
2009-12-21 18:50 ` Jon Harrop
2009-12-21 18:48 ` Jon Harrop
2010-01-03 10:49 ` Sylvain Le Gall
2010-01-03 20:06 ` [Caml-list] " Jon Harrop
2009-12-21 13:07 ` [***SPAM*** Score/Req: 10.1/8.0] Re: [Caml-list] " Damien Doligez
2009-12-21 13:31 ` multicore wish [Was: Re: [Caml-list] Re: OCaml is broken] Goswin von Brederlow
2009-12-21 14:19 ` multicore wish Mihamina Rakotomandimby
2009-12-21 16:15 ` [Caml-list] " Fischbacher T.
2009-12-21 17:42 ` Dario Teixeira
2009-12-21 18:43 ` Jon Harrop
2009-12-21 19:53 ` multicore wish [Was: Re: [Caml-list] Re: OCaml is broken] Jon Harrop
2009-12-22 13:09 ` multicore wish Goswin von Brederlow
2009-12-22 19:12 ` [Caml-list] " Jon Harrop
2009-12-22 18:02 ` Edgar Friendly
2009-12-22 19:20 ` Jon Harrop
2009-12-24 12:58 ` Goswin von Brederlow
2009-12-24 16:51 ` Jon Harrop
2009-12-24 13:19 ` Goswin von Brederlow
2009-12-24 17:06 ` Jon Harrop [this message]
2009-12-27 12:45 ` Goswin von Brederlow
2009-12-27 16:37 ` Jon Harrop
2009-12-28 12:28 ` Gerd Stolpmann
2009-12-28 15:07 ` Anil Madhavapeddy
2009-12-28 18:05 ` Xavier Leroy
2009-12-29 16:44 ` Gerd Stolpmann
2009-12-20 11:56 ` [***SPAM*** Score/Req: 10.1/8.0] [Caml-list] Re: OCaml is broken Erik Rigtorp
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=200912241706.51917.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