|
From: Matt F. <fa...@ea...> - 2011-05-16 15:16:21
|
At the end of a run (--tool=memcheck) Valgrind prints heap allocation info such as: "total heap usage: 486 allocs, 473 frees, 82,166 bytes allocated" Massif allows one to gather data about total instantaneous heap usage at particular sampling times during program execution. However, I have another (common?) use-case that I'm not sure is addressed. In particular, the "82,166 bytes allocated" refers to the cumulative sum of _all_ heap allocations, including temporaries. Accidentally allocating temporaries on the heap can be a large performance issue. With some languages (e.g., C++) it can also be fairly difficult to track down in a large program (e.g., a missing "&"). Is there some way to get a callgrind-like output for total heap allocations performed by each function? It could be broken down into "self" and "total" (e.g., those internal to the procedure, and those that persist after the procedure exits). Such data would be very useful in tracking down heap allocation bugs. As of yet I have not been able to find any such capability. Thank you for a great tool! - Matt Fago |
|
From: Julian S. <js...@ac...> - 2011-05-16 15:30:20
|
It's not directly what you're after, but have you tried the exp-dhat tool in 3.6.x ? (--tool=exp-dhat) Amongst things it can find allocation stacks responsible for large amounts of short term allocation, which sounds like what you're trying to find. See http://www.valgrind.org/docs/manual/dh-manual.html J On Monday, May 16, 2011, Matt Fago wrote: > At the end of a run (--tool=memcheck) Valgrind prints heap allocation info > such as: > > "total heap usage: 486 allocs, 473 frees, 82,166 bytes allocated" > > Massif allows one to gather data about total instantaneous heap usage at > particular sampling times during program execution. However, I have > another (common?) use-case that I'm not sure is addressed. > > In particular, the "82,166 bytes allocated" refers to the cumulative sum of > _all_ heap allocations, including temporaries. Accidentally allocating > temporaries on the heap can be a large performance issue. With some > languages (e.g., C++) it can also be fairly difficult to track down in a > large program (e.g., a missing "&"). > > Is there some way to get a callgrind-like output for total heap allocations > performed by each function? It could be broken down into "self" and > "total" (e.g., those internal to the procedure, and those that persist > after the procedure exits). Such data would be very useful in tracking > down heap allocation bugs. As of yet I have not been able to find any such > capability. > > Thank you for a great tool! > > - Matt Fago > > > --------------------------------------------------------------------------- > --- Achieve unprecedented app performance and reliability > What every C/C++ and Fortran developer should know. > Learn how Intel has extended the reach of its next-generation tools > to help boost performance applications - inlcuding clusters. > http://p.sf.net/sfu/intel-dev2devmay > _______________________________________________ > Valgrind-users mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-users |
|
From: Matt F. <fa...@ea...> - 2011-05-16 17:54:07
|
I think that will do for now. Thanks! - Matt On May 16, 2011, at 9:26 AM, Julian Seward <js...@ac...> wrote: > > It's not directly what you're after, but have you tried the exp-dhat > tool in 3.6.x ? (--tool=exp-dhat) > > Amongst things it can find allocation stacks responsible for large amounts > of short term allocation, which sounds like what you're trying to find. > > See > http://www.valgrind.org/docs/manual/dh-manual.html > > J > > On Monday, May 16, 2011, Matt Fago wrote: >> At the end of a run (--tool=memcheck) Valgrind prints heap allocation info >> such as: >> >> "total heap usage: 486 allocs, 473 frees, 82,166 bytes allocated" >> >> Massif allows one to gather data about total instantaneous heap usage at >> particular sampling times during program execution. However, I have >> another (common?) use-case that I'm not sure is addressed. >> >> In particular, the "82,166 bytes allocated" refers to the cumulative sum of >> _all_ heap allocations, including temporaries. Accidentally allocating >> temporaries on the heap can be a large performance issue. With some >> languages (e.g., C++) it can also be fairly difficult to track down in a >> large program (e.g., a missing "&"). >> >> Is there some way to get a callgrind-like output for total heap allocations >> performed by each function? It could be broken down into "self" and >> "total" (e.g., those internal to the procedure, and those that persist >> after the procedure exits). Such data would be very useful in tracking >> down heap allocation bugs. As of yet I have not been able to find any such >> capability. >> >> Thank you for a great tool! >> >> - Matt Fago >> >> >> --------------------------------------------------------------------------- >> --- Achieve unprecedented app performance and reliability >> What every C/C++ and Fortran developer should know. >> Learn how Intel has extended the reach of its next-generation tools >> to help boost performance applications - inlcuding clusters. >> http://p.sf.net/sfu/intel-dev2devmay >> _______________________________________________ >> Valgrind-users mailing list >> Val...@li... >> https://lists.sourceforge.net/lists/listinfo/valgrind-users > |