Результаты Gprof: что такое «alloc_mmap»? - PullRequest
1 голос
/ 24 октября 2011

Мои результаты для короткого прогона моей программы следующие:

 67.93      3.24     3.24                             grid::rKfour(int, int)
  9.43      3.69     0.45                             alloc_mmap
  5.03      3.93     0.24    30001     0.01     0.01  grid::timeStep()
  3.04      4.08     0.15 42007105     0.00     0.00  linkers::linkers(linkers const&)
  2.94      4.22     0.14  6360900     0.00     0.00  particle::fulldistance(particle&)
  2.73      4.35     0.13                             blas_thread_server
...

Вывод ldd:

linux-vdso.so.1 =>  (0x00007fffe2bea000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007eff34595000)
    libboost_filesystem.so.1.46.1 => /usr/lib/libboost_filesystem.so.1.46.1 (0x00007eff34377000)
    libboost_system.so.1.46.1 => /usr/lib/libboost_system.so.1.46.1 (0x00007eff34172000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007eff33f16000)
    libglut.so.3 => /usr/lib/libglut.so.3 (0x00007eff33cd0000)
    libGLU.so.1 => /usr/lib/x86_64-linux-gnu/libGLU.so.1 (0x00007eff33a62000)
    libGLEW.so.1.5 => /usr/lib/libGLEW.so.1.5 (0x00007eff3380c000)
    libboost_thread.so.1.46.1 => /usr/lib/libboost_thread.so.1.46.1 (0x00007eff335f3000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007eff332eb000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007eff33067000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007eff32e51000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007eff32ab1000)
    /lib64/ld-linux-x86-64.so.2 (0x00007eff347c4000)
    libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007eff3288d000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007eff32555000)
    libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007eff32341000)
    libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007eff3213e000)
    libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007eff31f38000)
    libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007eff31d31000)
    libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007eff31b26000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007eff31922000)
    libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007eff31705000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007eff314fd000)
    libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007eff312f9000)
    libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007eff310f3000)

Кто-нибудь может определить "alloc_mmap"?

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

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

В выводе gprof значение, которое имеет значение, является вторымстолбец, кумулятивные секунды , потому что, если эта процедура может быть сделана без времени, то это величина, на которую сокращается ваше общее время.

Одна из проблем с gprof - это игнорированиезаблокированное время как ввод / вывод.Поскольку ваша программа использует alloc_mmap (прямо или косвенно), она отображает файл в память, поэтому она выполняет операции ввода-вывода, что зачастую является немалой стоимостью.gprof его не видит.

Есть еще проблем с gprof .Если вы используете Linux, вы можете попробовать профилировщик, например Zoom .Он сэмплирует по времени настенных часов, поэтому он не слеп для ввода / вывода.Он также дает вам процент использования времени по строкам / инструкциям, а не только по функциям, поэтому он будет точно определять строки в вашем коде, что, если бы вы могли улучшить / удалить их, обеспечило бы вам наибольшее ускорение.(Обычно это вызовы функций. «Self time» редко имеет значение, за исключением сложных математических или сложных циклов ЦП, и в любом случае это не имеет значения. Zoom обнаружит это.)

Метод, на который я полагаюсь это .

0 голосов
/ 24 октября 2011

Возможно, ваш распределитель памяти использует mmap для больших выделений.Сначала вы должны подтвердить это (точка останова gdb в alloc_mmap должна работать) и, возможно, увеличить порог с помощью mallopt .

...