I've been a long time user of valgrind, but am having serious problems with
recent versions. I don't know if it is the switch from ia32 to x86_64, the
switch from lam 7 to openmpi, or the switch from valgrind 2 to valgrind 3,
but here is my problem:
I have a small sample program that has definite, obvious errors in it.
When I build and compile it on my ia32 system, with lam 7, valgrind 2.2
correctly reports the errors, when compiled with MPI or without MPI.
When I build the program WITHOUT MPI at all, on my x86_64 system with Intel
Fortran and GCC, valgrind 3.4 also correctly reports errors.
However, if I build the program with openmpi (or hp-mpi) on my x86_64
system, valgrind 3.4 reports no errors at all. This is a serious problem
for me, as in the past few weeks I've run into a few problems that crash
with openmpi/x86_64, but I can't debug them with valgrind. When I move the
code to the old IA32 system and use valgrind there, and find and fix the
errors, the resulting code runs fine on the openmpi/x86_64 system. This
says to me that the errors detected on the IA32 system are in fact causing
problems on the x86_64 system (usually resulting in an error in free() or
malloc() because the memory structures are corrupt). But valgrind isn't
seeing them at all....
I'm also getting TONS of "uninitialized value" errors with HP-MPI that I
never got before (and some of which I have carefully tracked down, and they
are bogus, the values are clearly initialized), but that is another issue....
Any suggestions or info would be greatly appreciated.
(note: for compiling/testing on ia32 machine, change integer*8 to integer*4
and "long long" to "long", since pointers are 4 bytes long)
Here are my sample programs/makefile:
******************* makefile ****************************
all: tst_mpi tst_nompi
tst_nompi: tst_nompi.o mtst_nompi.o
ifort -g -o tst_nompi tst_nompi.o mtst_nompi.o
tst_nompi.o: tst.F
ifort -g -c tst.F -o tst_nompi.o
mtst_nompi.o: mtst.c
cc -g -c mtst.c -o mtst_nompi.o
tst_mpi: tst_mpi.o mtst_mpi.o
mpif77 -g -DUSEMPI -o tst_mpi tst_mpi.o mtst_mpi.o
tst_mpi.o: tst.F
mpif77 -g -DUSEMPI -c tst.F -o tst_mpi.o
mtst_mpi.o: mtst.c
mpicc -g -c mtst.c -o mtst_mpi.o
********************* tst.F ***************************************
program test
common /mem/ mp
integer ia(1)
pointer (mp,ia)
integer*8 lmalloc
external lmalloc
c
#ifdef USEMPI
include 'mpif.h'
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world,iam,ierr)
call mpi_comm_size(mpi_comm_world,numproc,ierr)
#endif
c
nwords = 100000000
mp=lmalloc(nwords)
call subtest(ia,nwords)
#ifdef USEMPI
call mpi_finalize(ierr)
#endif
end
c
subroutine subtest(iw,nwords)
integer iw(*)
c
iw(10)=10
c write to word BEFORE BEGINNING of allocated memory
iw(0)=10
iw(nwords)=10
c write to word AFTER END of allocated memory
iw(nwords+1)=10
c
return
end
********************** mtst.c *******************************
#include <stdlib.h>
long long lmalloc_(int *nwords)
{
printf("Sanity check: 8 = %d\n",sizeof(long long));
return (long long) (void *) calloc(*nwords,sizeof(int));
}
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users