<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Sep 28, 2016 at 7:02 PM, Richard Mills <span dir="ltr"><<a href="mailto:richardtmills@gmail.com" target="_blank">richardtmills@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div>Hi Barry,<br><br></div>Thanks for starting a thread about this on petsc-dev; I was planning to do so but still hadn't gotten to it.<br><br></div>We can certainly get the performance data we need from various performance analysis tools, and for some kinds of data, those are the best way to try to get it.  The reasons I'd like to add some PETSc logging support for collecting hardware data are primarily<br><br></div>1) Many of the tools are rather "heavy weight" or otherwise cumbersome to use.  I've always loved how lightweight the PETSc logging framework is, and have always preferred to use that for performance tuning work until I get down to a level that requires the use of independent tools.  I also like working with the text reports that I get from PETSc.  Some performance tools do a decent job generating text reports, but many require me to fire up an annoying GUI to do even trivial tasks.  This is especially annoying when the data I want to work with are on some supercomputer to which I have a slow Internet connection.<br><br></div>2) External performance analysis tools know nothing of things like PETSc logging stages or events.  If I am using a tool like VTune to analyze something like a flow and reactive transport problem in PFLOTRAN, VTune doesn't know that I want to consider calls to SNESSolve() and children in the flow stage separately from those made in the transport stage.  Many tools provide ways to identify things like this, but it generally requires instrumenting the code by hand using a proprietary API.  Furthermore, most of these APIs don't have a sort of push/pop mechanism like we have for PETSc stages.  I really don't want to have to instrument my code for each tool that I might want to use, especially since I've already gone to the trouble of defining various stages/events with PETSc -- I'd like to just use those!<br></div></div></div></blockquote><div><br></div><div>I have a 3rd. There are some thing that perf tools are just shit at counting, and they need to be counted by hand. There are excellent</div><div>blog posts by McCalpin on these caveats, which arise due to the complexity of modern processors, Justin had all of these problems</div><div>in his paper about the performance of convex programming solvers for enforcing maximum principles.</div><div><br></div><div>I am not against using VTune and its ilk. I just think we should still be counting flops and bytes transferred from memory by hand because</div><div>you cannot trust the counting.</div><div><br></div><div>  Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div></div>Both of the above are important motivations, but I think (2) is my primary driver.  I'd be happier with many of the tools if they were aware of PETSc stages and events.<span class="HOEnZb"><font color="#888888"><br><br></font></span></div><span class="HOEnZb"><font color="#888888">--Richard<br></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 28, 2016 at 2:33 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
   Moving to petsc-dev so everyone can see this discussion.<br>
<br>
    To get more detailed "performance" information on runs we have two (not necessarily orthogonal) choices.<br>
<br>
  1) use an integrated system that is independent of PETSc. These sometimes require compiling with additional options and then running a post-processor after the run. These systems then display the results in some kind of GUI. Intel has such a thing, as does Apple. Do they allow logging/display of things we care about such as cache misses, ....? Depends on each system, and some of the systems are improving over time.<br>
<br>
  2) add additional logging of values into the PETSc logging and then have PetscLogView() process the raw logged values into useful information.<br>
<br>
<br>
   Both approaches have advantages and disadvantages but we do take on a large development and maintenance burden if we try to incorporate more logging directly into PETSc. So what does incorporating into PETSc buy us that is worth the extra hassle? That is can we do something with the "in PETSc" approach we could not achieve otherwise? (I don't thing arguments about it being more portable and not requiring you to buy vtune etc from Intel are enough reason to do the work internally.)<br>
<br>
   In other words if I am interested in finding out why my MatMult() is slower then I think it should be is it such a terrible thing to have crank up vtune (or similar beast) to get details about the computational phase I am interested in?<br>
<br>
   Barry<br>
<br>
You should be able to guess that I am leaning towards 1) and want to know why that is a fatal mistake, if it is?<br>
<br>
<br>
<br>
> On Sep 24, 2016, at 12:00 PM, Richard Tran Mills <<a href="mailto:richard.t.mills@intel.com" target="_blank">richard.t.mills@intel.com</a>> wrote:<br>
><br>
> Hi Folks,<br>
><br>
> I'm breaking up replies to my long email message into smaller chunks to make it easier to keep track of the discussion.  Just address the perf counter issue here.<br>
><br>
> On 9/24/16 6:54 AM, Jed Brown wrote:<br>
>> 7) I still think we should add some support for collecting hardware<br>
>>> counter information in the PETSc logging framework.  I see that the<br>
>>> latest PAPI release adds some KNL support, though I don't know if it<br>
>>> supports the uncore counters.  Anyhow, I should start a thread on<br>
>>> petsc-dev about this...<br>
>> There was some PAPI support once upon a time (before my time), but I<br>
>> think Barry stripped it out because it's crappy software.  I haven't<br>
>> seriously looked at using the linux performance counter interface<br>
>> directly, but it would be less to install and not streaked with Dongarra<br>
>> poo.<br>
> An alternative that I came across is something written by some Intel folks, with the terribly generic name of "Intel Performance Counter Monitor".  The webpage for it is at<br>
><br>
> <a href="https://software.intel.com/en-us/articles/intel-performance-counter-monitor" rel="noreferrer" target="_blank">https://software.intel.com/en-<wbr>us/articles/intel-performance-<wbr>counter-monitor</a><br>
><br>
> It provides a simple C++ API (I wish there was a C one; we'd need to wrap things to keep from polluting the PETSc code with C++ stuff) that lets you capture essentially any of the PMU events.  This looks a lot nicer than PAPI in several ways, but has the downside of being Intel-specific.  I also don't see any KNL-specific counter support yet.<br>
><br>
> --Richard<br>
<br>
</blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>