Regent: A Language for Implicit Dataflow Parallelism
regent-lang.org
regent-lang.org
Do you have a set of benchmarks that others can reimplement to compare the approaches?
I've added Dataflow Parallelism to my own multithreading runtime[1] but I didn't had dataflow focused benchmarks yet, well I could add Cholesky Decomposition but it's quite involved.
I expect the people from TaskFlow[2] and Habanero[3] (via Data-Driven Futures) would be quite interested as well in a common set of dataflow parallelism benchmarks.
By the way if you didn't read the DaCe paper[4] you absolutely should, seems like the age of Dataflow parallelism and properly optimizing for data is coming.
[1]: https://github.com/mratsim/weave#dataflow-parallelism
[2]: https://github.com/taskflow/taskflow
[3]: https://github.com/habanero-rice/hclib
[4]: https://github.com/spcl/dace, https://arxiv.org/abs/1902.10345
[1]: http://theory.stanford.edu/~aiken/publications/papers/sc06.p...
TL;DR is TF executor parallelism is too pessimistic to fully exploit the parallelization opportunities in the problem space. Regent is built on top of Legion which is a cutting edge dataflow library, and is designed to provide the guarantees to achieve that speedup.
It's the same reason.
Your dataflow semantics need to be part of the language semantics, otherwise they're bound to be loosely defined and even more loosely enforced.
First, threads have been implemented as libraries many times. Second, if checks need to happen theg can happen at debug run time if they can't happen at compile time. I don't know what specifically has to be integrated into a language here that makes throwing away the enormous amount already built in other languages.
> That's an assertion, but not anything to back it up.
Yes it's an opinion on style, not a falsifiable claim.
> First, threads have been implemented as libraries many times.
The title isn't intended to be taken quite so literally. The author explains why they think these don't work correctly.
> Second, if checks need to happen theg can happen at debug run time if they can't happen at compile time.
But languages don't have mechanisms to implement these kind of checks.
> I don't know what specifically has to be integrated into a language here that makes throwing away the enormous amount already built in other languages.
You're mistaken. It's not 'integrated into', it's 'taken out'.
Libraries let you add things, but to design a model for parallelism you generally want to take things away. You want to take away the ability to do things outside the model's rules.