<div dir="ltr"><div dir="ltr">Hi Raghav,<div><br></div><div>Thanks for your great questions!</div><div><br></div><div>1. Is it possible to yield the execution of xstream-0, which is executing the long-running ABT_thread?</div><div>I might misunderstand "yield" here, but</div><div>- An execution stream is running on Pthread, so if the OS thinks that thread should yield (=context switch), xstream-0 will automatically yield to another Pthread/process based on the OS scheduling policy.</div><div>- Argobots ULTs (=ABT_thread) do not automatically yield, so if you want to run another ULT on xstream-0 before completing the long-running ABT_thread, you need to explicitly call an Argobots scheduling function (e.g., "ABT_self_yield()"). A ULT yields if needed when you use synchronization functions (e.g., ABT_mutex_lock() against a mutex that has already been locked by another ULT).</div><div><br></div><div>2. If the above is true, is it also possible to transfer the partial execution of that ABT_thread to xstream-1?</div><div>Yes, it is possible. There are many ways to achieve this, but examples are as follows.</div><div>* Random work stealing:</div><div>For example, ULT-0 on xstream-0 yields before finishing its execution and is pushed to a random work-stealing pool. Later, an idle xstream-1 might pop ULT-0 from that pool and run it (thought xstream-0 might pop that ULT-0). If ULT-0 is popped by xstream-1, the remaining execution will be performed on xstream-1.</div><div>* More deterministic migration-like scheduling.</div><div>For example, we can change an associated pool of ULT-0 on xstream-0 (e.g., by using "ABT_set_associated_pool()") to a pool that is exclusively popped by xstream-1 (precisely speaking, a scheduler of xstream-1) before calling "ABT_self_yield()". ULT-0 pushed to that pool will be popped by only xstream-1 unlike the random work stealing case, so it should be executed by xstream-1 later.</div><div><br></div><div>Thanks,</div><div>Shintaro</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Feb 6, 2022 at 11:46 PM Raghav Gupta via discuss <<a href="mailto:discuss@lists.argobots.org">discuss@lists.argobots.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Hi All,</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">I have a scenario where two <i>Xstreams</i>, <i>xstream-0</i> and <i>xstream-1</i>, are bound to <i>core-0</i> and <i>core-1</i>. And, I have an <i>ABT_thread</i>, which is a long-running thread executing on <i>xstream-0</i>.</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">I want to know if we could do the following with Argobots APIs</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt"><br></span></p><ol style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><li><span style="background-color:transparent">Is it possible to yield the execution of <i>xstream-0</i>, which is executing the long-running <i>ABT_thread</i>?</span></li><li style="background:transparent;margin-top:0pt;margin-bottom:0pt;list-style-type:decimal"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">If the above is true, is it also possible to transfer the partial execution of that <i>ABT_thread</i> to <i>xstream-1</i>?</span></li></ol><div><font color="#0e101a"><br></font></div><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Best,</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Raghav</span></p></div>
_______________________________________________<br>
discuss mailing list<br>
<a href="mailto:discuss@lists.argobots.org" target="_blank">discuss@lists.argobots.org</a><br>
<a href="https://lists.argobots.org/mailman/listinfo/discuss" rel="noreferrer" target="_blank">https://lists.argobots.org/mailman/listinfo/discuss</a><br>
</blockquote></div></div>