My end goal is to implement futures so that extremely fine-grained parallelism can be expressed. Load balancing with work stealing will be done efficiently with the message-passing protocol I designed for my PhD thesis. This used to work in Gambit when it had a M68000 code generator (back in the 90’s!). Basically, for fine-grained parallelism, use divide-and-conquer algorithms and the fork/join model. In Gambit Scheme the fork is (let ((x (future …))) …) and the join is (touch x) or (force x) or implicit if the system is built with --enable-auto-forcing. Read my thesis for details!
Talking about code generators… if anyone is interested in working on native code generators for Gambit let me know!
Marc
On Sep 17, 2017, at 6:19 AM, Adam adam.mlmb@gmail.com wrote:
Hi Marc,
This is a general question on how to use SMP (and single-processor) Gambit:
If you're running some algorithm or other code that requires fine-granularity work stealing or otherwise parallel execution and/or data structure access, how are you supposed to implement that, in a way that should have good performance and be effective? -
Are mutex lock/unlock operations with zero-timeouts, and/or the use of condition variables, and/or the use of thread message passing with zero timeout, intended to satisfy these use cases, or do you propose other primitives or methods?
Also, do you plan to implement any additional parallelism primitives now with SMP Gambit?
Thanks!