Hi Jed,<div><br></div><div>Thanks for the reply. Not too long ago one of you guys (Matt I think) had mentioned the Roofline model and I was hoping to emulate something like it for my application. If I understand the presentation slides (and the paper implementing it) correctly, the upper bound FLOPS/s is calculated by multiplying the stream BW by the ratio of DRAM flop to byte (aka arithmetic intensity). The workload (i.e., flops) can be counted via PetscLogFlops() and in the paper, the sparse matvec total bytes transferred for fmadd was manually counted. Since my program involves more than just matvec I am curious if there's a way to obtain the bytes for all operations and functions invoked. </div><div><br></div><div>Or if I really should go with what you had suggested, could you elaborate a little more on it, or point me to some papers/links/slides that talk about it? </div><div><br></div><div>Thanks,</div><div>Justin<br><br>On Monday, May 4, 2015, Jed Brown <<a>jed@jedbrown.org</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Justin Chang <<a>jychang48@gmail.com</a>> writes:<br>
<br>
> Hello everyone,<br>
><br>
> If I wanted to obtain the bytes/second for my PETSc program, is there a<br>
> generic way of doing this? My initial thought would be to first run the<br>
> program with valgrind to obtain the total memory usage, and then run it<br>
> without valgrind to get the wall clock time. These two metrics then give<br>
> you the bytes/second.<br>
<br>
Not really, because usually we're interested in useful bandwidth<br>
sustained from some level of cache.  You can use hardware performance<br>
counters to measure the number of cache lines transferred, but this is<br>
usually an overestimate of the amount of useful data.  You really need a<br>
performance model for your application and a cache model for the machine<br>
to say what bandwidth is useful.<br>
<br>
> Or can PETSc manually count the load/stores the way it's done for<br>
> flops?<br>
<br>
No, this information is not available in source code and would be nearly<br>
meaningless even if it was.<br>
<br>
> I was looking at the PetscMemXXX() functions but wasn't sure if this<br>
> is what I was looking for.<br>
><br>
> Thanks,<br>
> Justin<br>
</blockquote></div>