<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Phil - I thoroughly agree, we should push on this and figure out the cause.<div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>Quincey</div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Apr 25, 2019, at 8:41 AM, Carns, Philip H. <<a href="mailto:carns@mcs.anl.gov" class="">carns@mcs.anl.gov</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class="">Hi Houjun,</div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class=""><br class="">Just to confirm, your library (i.e., the code that contains the ABT_eventual_set() call) was not compiled with OpenMP enabled, right?  But it was then linked against an application that was compiled with OpenMP support?<br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class=""><br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class="">Even if OpenMP is taking all of the cores, the behavior that Houjun observed is surprising to me.  The ABT_eventual_set() caller is running when he starts his timer.  Is there something in the ABT_eventual_set() call path that makes it particularly susceptible to preemption so that an unrelated OpenMP thread could slow it down at that point? <span class="Apple-converted-space"> </span><br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class=""><br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class="">I could definitely imagine an OpenMP thread delaying how long it takes for a waiter to wake up, but that probably wouldn't be as noticeable since the waiter is doing asynchronous background work anyway in this use case.  A slowdown in the critical path of the signaller is a little more disruptive.<br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class=""><br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class="">At any rate, it would be good to understand the cause in detail, maybe with a small standalone reproducer.  If we use Argobots internally within auxiliary libraries, then there's no telling what sorts of runtime systems they will get linked against in the wild.  Maybe there are some practical strategies that would help mitigate some of the most likely conflicts?<br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class=""><br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class="">thanks,</div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class="">-Phil<br class=""></div><div style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;" class=""><br class=""></div><div id="appendonsend" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""></div><hr tabindex="-1" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; display: inline-block; width: 744.0187377929688px;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class=""></span><div id="divRplyFwdMsg" dir="ltr" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><font face="Calibri, sans-serif" style="font-size: 11pt;" class=""><b class="">From:</b><span class="Apple-converted-space"> </span>Balaji, Pavan via discuss <<a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a>><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Wednesday, April 24, 2019 8:39 PM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>Quincey Koziol<br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span>Balaji, Pavan; Houjun Tang via discuss<br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [argobots-discuss] Argobots ABT_eventual_set too slow</font><div class=""> </div></div><div class="BodyFragment" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><font size="2" class=""><span style="font-size: 11pt;" class=""><div class="PlainText">Quincey,<br class=""><br class="">My guess is that you are running into the same problem as general pthreads + OpenMP interoperability issues.  That is, OpenMP is likely creating as many pthreads as the number of cores, leaving nothing for Argobots.  You can also try to reduce the number of cores available to OpenMP.  But that seems like a suboptimal solution.  We ideally want all layers to create as many lightweight threads as possible, irrespective of the number of cores available.<br class=""><br class="">  -- Pavan<br class=""><br class="">> On Apr 24, 2019, at 6:31 PM, Quincey Koziol <<a href="mailto:koziol@lbl.gov" class="">koziol@lbl.gov</a>> wrote:<br class="">><span class="Apple-converted-space"> </span><br class="">> Hi Pavan,<br class="">>        That might not be a very good option for general use, at facilities.  Any ideas about how Argobots & OpenMP are conflicting here?<br class="">><span class="Apple-converted-space"> </span><br class="">>                Quincey<br class="">><span class="Apple-converted-space"> </span><br class="">><span class="Apple-converted-space"> </span><br class="">>> On Apr 24, 2019, at 1:51 PM, Balaji, Pavan via discuss <<a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a>> wrote:<br class="">>><span class="Apple-converted-space"> </span><br class="">>> Houjun,<br class="">>><span class="Apple-converted-space"> </span><br class="">>> You could try BOLT, which allows you to have OpenMP internally use Argobots too.  So they won't conflict with each other.<br class="">>><span class="Apple-converted-space"> </span><br class="">>> -- Pavan<br class="">>><span class="Apple-converted-space"> </span><br class="">>>> On Apr 24, 2019, at 1:49 PM, Houjun Tang via discuss <<a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a>> wrote:<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Hi,<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> I think I found the what is causing the performance slowdown. My previous experiments were using the default application configuration, with OpenMP enabled. I've just tried to compile the application without OpenMP, and the performance gets much better, the ABT_eventual_set takes less than 0.00002 seconds in all operations. So it looks like running Argobots with OpenMP may sometimes cause a slowdown. Any idea on how to resolve this?<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thanks,<br class="">>>> Houjun Tang<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> On Tue, Apr 23, 2019 at 4:43 PM Houjun Tang <<a href="mailto:htang4@lbl.gov" class="">htang4@lbl.gov</a>> wrote:<br class="">>>> Hi Phil,<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thanks for the suggestion. I'm using the basic scheduler, and have changed to ABT_SCHED_BASIC as you mentioned, but the issue remains.<span class="Apple-converted-space"> </span><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> I've talked to Shintaro earlier this afternoon, and sent him my codes to run the experiments, hopefully we can figure out what was going on.<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thanks,<br class="">>>> Houjun Tang<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> On Tue, Apr 23, 2019 at 8:16 AM Carns, Philip H. <<a href="mailto:carns@mcs.anl.gov" class="">carns@mcs.anl.gov</a>> wrote:<br class="">>>> Hi Houjun,<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Which scheduler are you using with Argobots?<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> If you can reproduce this easily it might be worth toggling between ABT_SCHED_BASIC and ABT_SCHED_BASIC_WAIT (whichever one you are not using) to narrow down a possible issue there.  I don't expect a problem there, but something unusual must be going on.  In my experience eventual_set() is an inexpensive call.<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> thanks,<br class="">>>> -Phil<br class="">>>> From: Iwasaki, Shintaro via discuss <<a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a>><br class="">>>> Sent: Monday, April 22, 2019 9:45 AM<br class="">>>> To: Houjun Tang<br class="">>>> Cc: Iwasaki, Shintaro; <a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a><br class="">>>> Subject: Re: [argobots-discuss] Argobots ABT_eventual_set too slow<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Hi, Houjun,<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thank you for your detailed explanation! There are two possible issues:<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> 1. Because tasklet (= task) is nonpreemptive, the current Argobots-aware HDF5 code might fail to overlap communications. For example, ABT_eventual_set uses busy-wait based synchronization (<a href="https://github.com/pmodels/argobots/blob/master/src/eventual.c#L260" class="">https://github.com/pmodels/argobots/blob/master/src/eventual.c#L260</a>) if tasklet is used. If ULT (= thread) is used, it does user-level context-switch based synchronization (<a href="https://github.com/pmodels/argobots/blob/master/src/eventual.c#L257" class="">https://github.com/pmodels/argobots/blob/master/src/eventual.c#L257</a>). However, ultimately it depends on how the code is written. This problem should be addressed by changing the HDF5 implementation (e.g., by using ULTs properly), if this is the case.<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> 2. Currently the Argobots eventual uses a simple linked list, which performs poorly if so many threads and tasks are waiting. This performance should be improved by more advanced management of waiting threads in the Argobots runtime.<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> From your explanation, I can hardly get which problem is more significant; intuitively, this operation itself does not seem to consume 0.1 seconds or so (though it depends on how many tasks are in the linked list).<br class="">>>> I am happy to examine your code if it is okay, but I would really appreciate it if you would give me a simplified code that reproduces your performance issue.<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thank You,<br class="">>>> Shintaro Iwasaki<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> On Fri, Apr 19, 2019 at 5:57 PM Houjun Tang <<a href="mailto:htang4@lbl.gov" class="">htang4@lbl.gov</a>> wrote:<br class="">>>> Hi Shintaro,<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thanks for the quick reply, here is a brief summary of what I have been working on.<br class="">>>> I'm adding the asynchronous I/O feature to the HDF5 library using Argobots as the background thread execution engine. So whenever there is an HDF5 I/O call, the main thread will create an Argobots task (with ABT_task_create) and have it executed by Argobots in the background. Only one Argobots pool is used, so consecutive tasks are executed sequentially. The application code linked to the async HDF5 library is creating and writing a lot of HDF5 attributes, as seen in the figure I sent previously, the time taken by ABT_eventual_set varies greatly, from 2 us to 0.45 s with an average ~0.07s.<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Any additional information would you like to know? Do you want the code?<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Regards,<br class="">>>> Houjun Tang<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> On Fri, Apr 19, 2019 at 2:11 PM Iwasaki, Shintaro via discuss <<a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a>> wrote:<br class="">>>> Hello Houjun,<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thank you for reporting a performance issue with data!<br class="">>>> Unfortunately, I haven't experienced this issue. I checked the code, but it is hard to judge if the implementation of ABT_eventual_set is bad or not. As far as I checked the implementation of ABT_eventual_set, this function does not looks very optimized (I mean, it uses a naive spinlock), but doe not seem very slow (I mean, it does not allocate memory every time).<br class="">>>><span class="Apple-converted-space"> </span><a href="https://github.com/pmodels/argobots/blob/master/src/eventual.c#L229" class="">https://github.com/pmodels/argobots/blob/master/src/eventual.c#L229</a><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> In any case, this single operation should be finished within 1us or less (under no contention). I guess it might be caused by a scheduling issue or an affinity issue, but since the performance of this function has not been fully examined, the current implementation might have some performance bugs. I could diagnose this problem more if you would give me more details.<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thank You,<br class="">>>> Shintaro Iwasaki<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> On Fri, Apr 19, 2019 at 2:56 PM Houjun Tang via discuss <<a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a>> wrote:<br class="">>>> Hi,<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> I'm using Argobots as the engine for executing asynchronous I/O operations in the background of an HDF5 application, but found it to be slow in some operations. With profiling, the slowdown comes mostly from ABT_eventual_set. Below is a boxplot of the ABT_eventual_set time (measured by calling gettimeofday before and after it) from 385 operations, running with one process and one Argobots thread. The *_fn are different functions executed by Argobots. In most cases it's below 0.1s, but there are several cases that are taking more than 0.25 seconds. As these HDF5 operations take less than 0.1 seconds, the overhead of ABT_eventual_set becomes dominant.<span class="Apple-converted-space"> </span><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Any idea what could have caused this?<span class="Apple-converted-space"> </span><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> Thanks,<br class="">>>> Houjun Tang<br class="">>>><span class="Apple-converted-space"> </span><br class="">>>><span class="Apple-converted-space"> </span><br class="">>>> _______________________________________________<br class="">>>> discuss mailing list<br class="">>>> <a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a><br class="">>>><span class="Apple-converted-space"> </span><a href="https://lists.argobots.org/mailman/listinfo/discuss" class="">https://lists.argobots.org/mailman/listinfo/discuss</a><br class="">>>> _______________________________________________<br class="">>>> discuss mailing list<br class="">>>> <a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a><br class="">>>><span class="Apple-converted-space"> </span><a href="https://lists.argobots.org/mailman/listinfo/discuss" class="">https://lists.argobots.org/mailman/listinfo/discuss</a><br class="">>>> _______________________________________________<br class="">>>> discuss mailing list<br class="">>>> <a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a><br class="">>>><span class="Apple-converted-space"> </span><a href="https://lists.argobots.org/mailman/listinfo/discuss" class="">https://lists.argobots.org/mailman/listinfo/discuss</a><br class="">>><span class="Apple-converted-space"> </span><br class="">>> _______________________________________________<br class="">>> discuss mailing list<br class="">>> <a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a><br class="">>><span class="Apple-converted-space"> </span><a href="https://lists.argobots.org/mailman/listinfo/discuss" class="">https://lists.argobots.org/mailman/listinfo/discuss</a><br class="">><span class="Apple-converted-space"> </span><br class=""><br class="">_______________________________________________<br class="">discuss mailing list<br class=""><a href="mailto:discuss@lists.argobots.org" class="">discuss@lists.argobots.org</a><br class=""><a href="https://lists.argobots.org/mailman/listinfo/discuss" class="">https://lists.argobots.org/mailman/listinfo/discuss</a></div></span></font></div></div></blockquote></div><br class=""></div></body></html>