By: Veedrac (ignore.delete@this.this.com), March 23, 2021 3:49 am
Room: Moderated Discussions
Heikki Kultala (heikki.kultal.a.delete@this.gmail.com) on March 22, 2021 6:52 pm wrote:
>
> The implementation is always free to execute the microthreads sequentially (common case if all our
> hardware microthreads are already in use, for example started by outer level function); programmer
> can write his code/compiler can compile the code like he/it has infinite amount of microthreads
> available. As the bundles execute atomically, different microthreads can still do things like incrementing
> the same counter in memory, but as they are allowed to execute sequentially, they are not allowed
> to wait data from one another microthread because that might cause a deadlock.
Personally I expect this to be very limiting because it means you must spawn microthreads at the top level in an order that completely the respects dependencies of all the sub-threads. This is a lot to pay when ROBs already show us that hardware is amazing at handling register wakeups.
You can avoid deadlocks by requiring inter-thread dependencies to be a DAG. Whether this is compiler or hardware enforced is up to implementation.
>
> The implementation is always free to execute the microthreads sequentially (common case if all our
> hardware microthreads are already in use, for example started by outer level function); programmer
> can write his code/compiler can compile the code like he/it has infinite amount of microthreads
> available. As the bundles execute atomically, different microthreads can still do things like incrementing
> the same counter in memory, but as they are allowed to execute sequentially, they are not allowed
> to wait data from one another microthread because that might cause a deadlock.
Personally I expect this to be very limiting because it means you must spawn microthreads at the top level in an order that completely the respects dependencies of all the sub-threads. This is a lot to pay when ROBs already show us that hardware is amazing at handling register wakeups.
You can avoid deadlocks by requiring inter-thread dependencies to be a DAG. Whether this is compiler or hardware enforced is up to implementation.