Использует ли Valgrind callgrind общее время или «время выполнения» для создания данных - PullRequest
2 голосов
/ 20 декабря 2011

У меня проблема с линейным масштабированием моего приложения в зависимости от количества потоков (например, 800 потоков вдвое увеличивает производительность 400 потоков в двухъядерном процессоре). И мое внутреннее чувство говорит мне, что нити спят или блокируются ... но я не вижу этого в callgrind.

То же самое делает callgrind для измерения времени функции или только времени, когда поток был активен для создания данных. Если не понятно, что я спрашиваю ... тема делает

i ++;

на 2 секунды, затем

sleep(1);//thread will not be scheduled to run for min 1 second...  

... будет i++ составлять приблизительно 100% или приблизительно 66% графика вызовов.

1 Ответ

1 голос
/ 07 февраля 2012

Valgrind собирает статистику пользовательского времени, а не статистику в реальном времени.Так что, если потоки прерывают друг друга, вы не увидите это в Valgrind.Все, что вы получите, - это фактическое время, потраченное на выполнение каждой функции.

...