3 ms·
I understand that one semester is short and I think you did already a great job. I don't really understand what Fumurt brings compared to existing approaches.
by junke 11y ago
I understand that one semester is short and I think you did already a great job.
I don't really understand what Fumurt brings compared to existing approaches. It seems that you are blocking all threads at one rendez-vous point and that seems too radical, though. Also, "underthreads" could result in a unbalanced system where one thread does most of the work while others are waiting. Automatic ways to distribute code among tasks exist in synchronous language (I don't think synchronous languages necessarily sacrifice performance).
It seems you did a lot of work on the parser and compiler. You also use synchronized variable which seems a little odd: you say that "[...] the programmer doesn’t
have to worry about the order in which a synchronized variable is written to by
the different threads.". Do different threads really want to write the same variable during one timestep?
You mention Esterel and synchronous languages.
I am not sure Esterel (or Quartz[1]) is the most widely used implementation. I would bet on Scade, a child of Lustre, but I am not sure.
As you say they support a way to distribute code among execution units and Signal[2] in particular is designed to make it easy and efficiently compilable.
In Signal, you define processes and map them to different execution units through a "RunOn" directives. The Signal compiler then statically compute the order by which I/O and computations are executed on each concurrent thread (posix threads and fifos or MPI). There is also a lot to say about logical clocks which allow to transmit only the necessary information to synchronize distributed code.
The result is very little scheduling code: only signal/wake instructions surrounding sequential code with nested "if" blocks for clocks (activation condition).
So while you did a lot of work for this language, I fail to see where your approach is beneficial compared to older ones. I mean, existing languages surely could be improved, but what could convince a user to switch to this one? (a hard question, sorry).
[1] https://es.cs.uni-kl.de/publications/datarsg/Schn09.pdf https://es.cs.uni-kl.de/publications/datarsg/Schn09.pdf
[2] https://en.wikipedia.org/wiki/SIGNAL_(programming_language) https://en.wikipedia.org/wiki/SIGNAL_(programming_language)
- tormeh 11y ago>"underthreads" could result in a unbalanced system where one thread does most of the work while others are waiting Underthreads is a mechanism I propose to speed up the slowest top thread in cases where this can be done. Like, you benchmark the program and see that one thread is holding it up. This thread has a workload that's easy to multithread, so you use underthreads to (hopefully) speed this thread up and fix the bottleneck. >Do different threads really want to write the same variable during one timestep? No, they are not allowed to. Every shared variable has an owner thread which is the only thread that can write to it. Hence there's no need to worry. >what could convince a user to switch to this one? Hopefully nothing. It's useless as it is. It's meant more as a contribution to public thought about hard real-time languages. If someone decides to use my code for anything then that's cool, but that's not important. Every search for Scade ends up pointing to Esterel Technologies, which confused me, I guess. Didn't really know about it. Signal sounds interesting!