LINUX.ORG.RU

где смотреть ошибки найденные valgrind

 


0

1

имеется совершенно минимальное приложение:

$ cat main.c 
#include <mpi.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]){

    MPI_Init(&argc,&argv);

    MPI_Finalize();

    return 0;
}

Что за 507 ошибок нашел valgrind? Как отфильтровать ошибки, которые я допускаю в коде? --quiet или какие-то есть приемы?

$ mpicc main.c -lm -std=c99 -g -O0 -o main && valgrind --tool=memcheck  mpirun -np 4 ./main
==409== Memcheck, a memory error detector
==409== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==409== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==409== Command: mpirun -np 4 ./main
==409== 
==409== Invalid read of size 8
...
==409== ERROR SUMMARY: 507 errors from 2 contexts (suppressed: 4 from 4)

$ mpicc main.c -lm -std=c99 -g -O0 -o main && valgrind --tool=memcheck  mpirun -np 4 ./main
==20249== Memcheck, a memory error detector
==20249== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==20249== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==20249== Command: mpirun -np 4 ./main
==20249== 
==20249== 
==20249== HEAP SUMMARY:
==20249==     in use at exit: 131,120 bytes in 2 blocks
==20249==   total heap usage: 1,864 allocs, 1,862 frees, 324,304 bytes allocated
==20249== 
==20249== LEAK SUMMARY:
==20249==    definitely lost: 0 bytes in 0 blocks
==20249==    indirectly lost: 0 bytes in 0 blocks
==20249==      possibly lost: 0 bytes in 0 blocks
==20249==    still reachable: 131,120 bytes in 2 blocks
==20249==         suppressed: 0 bytes in 0 blocks
==20249== Rerun with --leak-check=full to see details of leaked memory
==20249== 
==20249== For counts of detected and suppressed errors, rerun with: -v
==20249== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Что я должен сделать со своей системой чтобы воспроизвести твою проблему?

anonymous ()

А вы точно правильно использовали MPI + valgrind?
За 2 минуты в гугле запускать, следовало бы так: mpirun -np <num processes> valgrind --leak-check=full <path to file>/filename <args>

rk17 ()
Ответ на: комментарий от rk17

да, да, в док. по mpi сначала mpirun, затем valgrid ... --- это я уже заэксперементировался ...

получается проблема в моей системе

$ valgrind --tool=memcheck  --leak-check=full ./main
...
==869== ERROR SUMMARY: 700 errors from 57 contexts (suppressed: 4 from 4)

developer-cpp ()
Ответ на: комментарий от NeXTSTEP

как исправлять?

$ valgrind --tool=memcheck  ./main
==1717== Memcheck, a memory error detector
==1717== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1717== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1717== Command: ./main
==1717== 
==1717== Invalid read of size 8
==1717==    at 0x60CB80D: _wordcopy_fwd_dest_aligned (wordcopy.c:205)
==1717==    by 0x60C54AE: __GI_memmove (memmove.c:76)
==1717==    by 0x60CCABB: argz_insert (argz-insert.c:55)
==1717==    by 0x55CB5E5: ??? (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x55CB7FF: ??? (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x55CAFC8: ??? (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x55CBF57: lt_dlforeachfile (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x55D2FCE: mca_base_component_find (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x55D3AC1: mca_base_components_open (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x55EEC44: opal_paffinity_base_open (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x55C4AD2: opal_init (in /usr/lib/openmpi/lib/libopen-pal.so.0.0.0)
==1717==    by 0x5371B3E: orte_init (in /usr/lib/openmpi/lib/libopen-rte.so.0.0.0)

проблема с openmpi?

developer-cpp ()
Ответ на: комментарий от developer-cpp

Проще всего, если есть возможность - запустить valgrind с gdb. Это позволит «раскрутить» стек и проследить за жизнью невалидного указателя. Предположу, что исходя из имени функции (*_aligned) передается невыравненное значение.

artemsen ()

Как отфильтровать ошибки, которые я допускаю в коде? --quiet или какие-то есть приемы?

quiet нету, но есть suppressions, которые описывают исключения для проверки (по типу ошибок, путям к либам и т.д.).

artemsen ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.