Hi Jed, I finally figured out why. I think there is a bug in the PETSc. I write a very simple program that can reproduce the same results. Please check the attachment. Type " make all -f makefilet " to run this code. Could you know how to fix this issue?
Thanks, On Thu, Mar 20, 2014 at 11:29 AM, Fande Kong <[email protected]> wrote: > Thanks, Jed, > > I tried valgrind, but it could not catch any noises. I used these > options: mpirun -n 8 valgrind --tool=memcheck -q --num-callers=20 > --log-file=valgrind.log.%p ./nonlinearElasticity3d -malloc off . > > I think I forget freeing something or petsc does. > > > > > On Wed, Mar 19, 2014 at 4:58 PM, Jed Brown <[email protected]> wrote: > >> Fande Kong <[email protected]> writes: >> >> > I run my code with options: -malloc_debug -malloc_dump, then the >> following >> > messages are produced, but nothing happened in my code. I want to know >> what >> > kind of objects I forgot freeing. Any suggestions? >> >> Huh, those should show more stack. Before trying to think hard, can you >> run with valgrind? >> >> > [0]Total space allocated 6864 bytes >> > [ 0]256 bytes PetscSplitReductionCreate() line 91 in >> > /home/fdkong/math/petsc-3.4.1/src/vec/vec/utils/comb.c >> > [ 0]256 bytes PetscSplitReductionCreate() line 88 in >> > /home/fdkong/math/petsc-3.4.1/src/vec/vec/utils/comb.c >> > [ 0]512 bytes PetscSplitReductionCreate() line 87 in >> > /home/fdkong/math/petsc-3.4.1/src/vec/vec/utils/comb.c >> > [ 0]512 bytes PetscSplitReductionCreate() line 86 in >> > /home/fdkong/math/petsc-3.4.1/src/vec/vec/utils/comb.c >> > [ 0]80 bytes PetscSplitReductionCreate() line 81 in >> > /home/fdkong/math/petsc-3.4.1/src/vec/vec/utils/comb.c >> > [ 0]16 bytes PetscThreadCommReductionCreate() line 448 in >> > >> /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcommred.c >> > [ 0]512 bytes PetscThreadCommReductionCreate() line 440 in >> > >> /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcommred.c >> > [ 0]256 bytes PetscThreadCommReductionCreate() line 436 in >> > >> /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcommred.c >> > [ 0]1280 bytes PetscThreadCommReductionCreate() line 435 in >> > >> /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcommred.c >> > [ 0]32 bytes PetscThreadCommReductionCreate() line 432 in >> > >> /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcommred.c >> > [ 0]128 bytes PetscThreadCommWorldInitialize() line 1242 in >> > /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcomm.c >> > [ 0]2560 bytes PetscThreadCommWorldInitialize() line 1241 in >> > /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcomm.c >> > [ 0]32 bytes PetscThreadCommWorldInitialize() line 1233 in >> > /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcomm.c >> > [ 0]16 bytes PetscThreadCommSetAffinities() line 424 in >> > /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcomm.c >> > [ 0]48 bytes PetscThreadCommCreate() line 150 in >> > /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcomm.c >> > [ 0]336 bytes PetscThreadCommCreate() line 146 in >> > /home/fdkong/math/petsc-3.4.1/src/sys/threadcomm/interface/threadcomm.c >> > [ 0]32 bytes PetscCommDuplicate() line 151 in >> > /home/fdkong/math/petsc-3.4.1/src/sys/objects/tagm.c >> > >> > >> > Fande, >> > >
/*
* commproblem.cpp
*
* Created on: Mar 20, 2014
* Author: fdkong
*/
#include <petscsnes.h>
#include <petscdm.h>
#include <petsc-private/snesimpl.h>
static char help[] = "Need helps.\n\n";
#undef __FUNCT__
#define __FUNCT__ "main"
int main(int argc,char **argv)
{
Vec vec;
MPI_Request request;
MPI_Status status;
PetscMPIInt tag =123;
MPI_Comm comm;
PetscMPIInt rank, size;
PetscInt recv =10;
PetscInt send = 0;
DM dm;
PetscErrorCode ierr;
PetscInitialize(&argc,&argv,(char *)0,help);
comm = PETSC_COMM_WORLD;
ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr);
ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr);
// create an object
ierr = VecCreate(comm, &vec);CHKERRQ(ierr);
// take a comm from that object
comm = ((PetscObject) vec)->comm;
// if we set comm back to PETSC_COMM_WORLD, the code should work fine
//comm = PETSC_COMM_WORLD;
// receive messages from rank 0
if( rank!=0)
{
ierr = MPI_Irecv(&recv, 1, MPIU_INT, 0,tag, comm, &request);CHKERRQ(ierr);
}
if(!rank)
{
//send messages to all others
for(PetscMPIInt i =1; i<size;i++)
{
ierr = MPI_Isend(&send, 1, MPIU_INT, i, tag, comm, &request);CHKERRQ(ierr);
}
}
// rank 0 doest not need to wait, it could continue to do other things.
if(rank !=0)
{
ierr = MPI_Waitall(1,&request, &status);CHKERRQ(ierr);
}
ierr = VecDestroy(&vec);CHKERRQ(ierr);
ierr = PetscFinalize();CHKERRQ(ierr);
}
makefilet
Description: Binary data
