Как создать профиль памяти для каждой функции многопоточной программы на C ++? - PullRequest
0 голосов
/ 20 марта 2020

Проблема:

У меня есть многопоточная программа C ++, которая обрабатывает довольно много данных (несколько ГБ). В какой-то момент моей программе не хватает основной памяти, чего я хочу избежать. Теоретически этого не должно происходить, так как объем данных, которые анализирует эта программа, все еще намного меньше, чем моя основная память.

Предполагаемая проблема root:

Я предполагаю, что в какой-то момент я передаю все эти данные по значению какой-то функции или какой-то глупой ошибке. Это увеличивает объем используемой памяти, и у меня заканчивается основная память.

Как найти код, вызывающий проблему?

Я хотел бы профилировать использование памяти моей программой для каждой отдельной функции. Таким образом, результат должен быть примерно таким (где функции f и g являются функциями):

f    used 10% of total memory used
g    used  1% of total memory used

Как указано в в этом посте , я посмотрел на массив Вальгринд . Выглядит как удивительный инструмент, но valgrind --tool=massif ./myProgram занимает вечность (даже если я существенно уменьшу объем данных).

Вопрос:

Какой инструмент я могу использовать, чтобы найти «ошибку» в моем исходном коде? Я ищу что-то, что не может длиться вечно, но все же дает мне понимание, в котором я нуждаюсь. Я также готов сделать это программным путем, изменив исходный код.

Конвертер:

Компилятор: Clang 9

ОС: RHEL

C ++: std = 17

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...