ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
6
выхода из функций нужны для построения стека вызовов, приведше-
го к гонкам.
Эксперимент с созданным анализатором.
Для определения
накладных расходов созданного анализатора сравним потребление
памяти и процессорного времени при выполнении одной и той же
исходной тестовой программы:
– запуск программы без анализатора;
– запуск программы с динамическим анализатором с ограничени-
ем глубины истории обращений к памяти;
– запуск программы с динамическим анализатором, но без огра-
ничения глубины истории обращений к памяти.
Тестовая программа запускает 20 потоков выполнения, в каждом
потоке выполнения выделяется 20 Мб памяти. Далее по 1000 случай-
ным адресам, которые принадлежат областям памяти, выделенным в
каждом потоке, происходит запись или чтение. Каждые 500 итераций
происходит выделение дополнительных 20 Мб памяти или уменьше-
ние выделенной памяти на 20 Мб. На рис. 5 показано использование
памяти при работе тестовых программ. Видно, что тестовая програм-
ма без ограничения глубины истории практически линейно увеличи-
вает потребляемую память. В то же время программа с ограничением
глубины истории имеет практически постоянное потребление памяти
и превышает в среднем на 20 Мб потребление памяти программы,
запущенной без анализатора.
Рис. 5. Потребление памяти анализируемой программой
Рассмотрим использование процессорного времени тестовыми
программами (рис. 6). Эксперимент проводился на компьютере с че-
тырьмя ядрами. Поскольку тестовая программа является многопо-
точной, то можно ожидать, что во время выполнения будут востребо-
ваны все доступные ядра. На рис. 6 видно, что программа без
использования анализатора занимает все ядра и загружает процессор
1,2,3,4,5 7,8