4 ms·
> In fact, if you have two CPUs handy, maybe you could write some code to have each CPU do half of the elements, and suddenly map is twice as fast. I remember
by jkaptur 2y ago
> In fact, if you have two CPUs handy, maybe you could write some code to have each CPU do half of the elements, and suddenly map is twice as fast.
I remember this came up a lot in late-aughts functional programming discussions. But is there any language where this actually works? Where map is just parallel because of course it is?
- _se 2y agohttps://docs.rs/rayon/latest/rayon/iter/index.html https://docs.rs/rayon/latest/rayon/iter/index.html
- sterlind 2y agoF# defines a parallel map with the same type signature as sequential map, but you have to ask for Array.Parallel.map rather than Array.map or whatever, because of the possibility of side effects. Only in a pure language like Haskell could you safely parallelize automatically. I'm not sure why Haskell doesn't - maybe overhead?
- recursivecaveat 2y agoI think it's pretty much impossible to tell statically whether you're going to be drowning in overhead spinning up a thread for every pixel on the screen, or leaving tons of parallelism on the table. Maybe with PGO it can be made to work. Even if it could be automatic, parallelism can be so important, and usually requires explicit design to enable, you probably don't want to delegate it.
- bluesnowmonkey 2y agoElixir does this with Task.async_stream. https://hexdocs.pm/elixir/Task.html#async_stream/3 https://hexdocs.pm/elixir/Task.html#async_stream/3