Каково влияние Callgrind на производительность кода?

Я использую Callgrind для того, чтобы увидеть, сколько раз вызывались определенные функции. Однако меня также интересует время исполнения.

Я знаю, что программы работают на Callgrind намного дольше, так как для этого требуется информация. Однако меня удивляет то, как меняется время. В моем случае я использую две разные версии метода быстрого марширования (FMM и упрощенный FMM) для двумерных и трехмерных сеток. Результаты следующие:

введите описание изображения здесь

В 2D соотношение FMM / SFMM вообще не сохраняется, но, по крайней мере, оно всегда> 1 (для FMM всегда требуется больше времени, чем для SFMM). Тем не менее, в 3D эффект Callgrind полностью противоположен, времена полностью изменены: SFMM занимает меньше времени, чем Callgrind, но дольше при обычном выполнении.

Компиляция, которую я использую (-Ofast, -fno-finite-math-only), всегда одна и та же, и одни и те же двоичные файлы запускаются в callgrind и в обычном режиме ./bin-name

Функции измерения времени — это функции из std :: chrono.

Поэтому возникает вопрос: поскольку я использую один и тот же двоичный файл во всех случаях, как возможно, что один и тот же двоичный файл ведет себя так по-разному? Надежны ли в этом случае другие данные, которые я получаю (вызовы функций,% затрат времени и т. Д.)? Подобные Callgrind результаты ожидались при запуске двоичных файлов с помощью обычной команды выполнения.

РЕДАКТИРОВАТЬ: в реализации основное изменение заключается в том, что в FMM я использую кучу Boost Fibonacci, а в SFMM я использую небольшую модификацию с очередью Boost Priority.

Спасибо!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]