Вскоре мне будет поручено создать надлежащий профиль памяти для кода, написанного на C / C ++ и использующего CUDA для использования преимуществ обработки графическим процессором.
Сначала я хотел бы создать макросыи перегрузки операторов, которые позволили бы мне отслеживать вызовы malloc, free, delete и новые вызовы в моем исходном коде.Я мог бы просто включить другой заголовок и использовать макросы __FILE__ and __LINE__
для печати вызовов памяти в файл журнала.Этот тип стратегии можно найти здесь: http://www.almostinfinite.com/memtrack.html
Каков наилучший способ отследить это использование в связанной в сторонней библиотеке?Я предполагаю, что смогу отслеживать использование памяти до и после вызовов функции, верно?В моем сценарии макроса / перегрузки я могу просто отслеживать размер запросов, чтобы выяснить, сколько памяти запрашивается.Как бы я мог сказать, сколько использует сторонняя библиотека?Я также понимаю, что «бесплатное» отслеживание на самом деле не дает вам никакого представления о том, сколько кода используется в конкретный момент времени, поскольку оно не обязательно возвращается в ОС.Я ценю любое обсуждение этого вопроса.
Я действительно не хочу использовать какие-либо инструменты профилирования памяти, такие как Totalview или valgrind, , потому что они обычно делают много других вещей (проверка границ и т. Д.)кажется, что программное обеспечение работает очень медленно.Другая причина этого заключается в том, что я хочу, чтобы это было несколько поточно-ориентированным - программное обеспечение использует MPI, который, как я считаю, порождает процессы.Я собираюсь попытаться профилировать это в режиме реального времени, чтобы я мог выгружать файлы журналов или что-то, что может быть прочитано другим процессом, чтобы визуализировать использование памяти во время работы программного обеспечения.Это также в первую очередь будет выполняться в среде Linux.
Спасибо