another hypre memory corruption problem
petsc@crank:/sandbox/petsc/petsc.test/src/ksp/ksp/examples/tutorials$ /sandbox/petsc/petsc.test/bin/petscmpiexec -valgrind -n 3 ./ex10 -pc_type hypre -pc_hypre_type parasails -f0 ${DATAFILESPATH}/matrices/medium ==12918== Use of uninitialised value of size 8 ==12918== at 0x5C2CDD1: DiagScaleCreate (DiagScale.c:129) ==12918== by 0x5BB8733: ParaSailsSetupPattern (ParaSails.c:1678) ==12918== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12918== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12918== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12918== by 0x559714A: PCSetUp (precon.c:984) ==12918== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12918== by 0x40525E: main (ex10.c:312) ==12918== Uninitialised value was created by a heap allocation ==12918== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==12918== by 0x5BB6D32: MemAlloc (Mem.c:108) ==12918== by 0x5C2CD69: DiagScaleCreate (DiagScale.c:120) ==12918== by 0x5BB8733: ParaSailsSetupPattern (ParaSails.c:1678) ==12918== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12918== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12918== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12918== by 0x559714A: PCSetUp (precon.c:984) ==12918== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12918== by 0x40525E: main (ex10.c:312) ==12918== ==12924== Conditional jump or move depends on uninitialised value(s) ==12924== at 0x5BBB160: PrunedRowsCreate (PrunedRows.c:71) ==12924== by 0x5BB8791: ParaSailsSetupPattern (ParaSails.c:1683) ==12924== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12924== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12924== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12924== by 0x559714A: PCSetUp (precon.c:984) ==12924== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12924== by 0x40525E: main (ex10.c:312) ==12924== Uninitialised value was created by a heap allocation ==12924== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==12924== by 0x5C2CACD: DiagScaleCreate (DiagScale.c:190) ==12924== by 0x5BB8733: ParaSailsSetupPattern (ParaSails.c:1678) ==12924== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12924== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12924== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12924== by 0x559714A: PCSetUp (precon.c:984) ==12924== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12924== by 0x40525E: main (ex10.c:312) ==12924== ==12924== Conditional jump or move depends on uninitialised value(s) ==12924== at 0x5BBB219: PrunedRowsCreate (PrunedRows.c:84) ==12924== by 0x5BB8791: ParaSailsSetupPattern (ParaSails.c:1683) ==12924== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12924== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12924== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12924== by 0x559714A: PCSetUp (precon.c:984) ==12924== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12924== by 0x40525E: main (ex10.c:312) ==12924== Uninitialised value was created by a heap allocation ==12924== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==12924== by 0x5C2CACD: DiagScaleCreate (DiagScale.c:190) ==12924== by 0x5BB8733: ParaSailsSetupPattern (ParaSails.c:1678) ==12924== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12924== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12924== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12924== by 0x559714A: PCSetUp (precon.c:984) ==12924== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12924== by 0x40525E: main (ex10.c:312) ==12924== ==12917== Conditional jump or move depends on uninitialised value(s) ==12917== at 0x5BBB160: PrunedRowsCreate (PrunedRows.c:71) ==12917== by 0x5BB8791: ParaSailsSetupPattern (ParaSails.c:1683) ==12917== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12917== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12917== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12917== by 0x559714A: PCSetUp (precon.c:984) ==12917== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12917== by 0x40525E: main (ex10.c:312) ==12917== Uninitialised value was created by a heap allocation ==12917== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==12917== by 0x5C2CACD: DiagScaleCreate (DiagScale.c:190) ==12917== by 0x5BB8733: ParaSailsSetupPattern (ParaSails.c:1678) ==12917== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12917== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12917== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12917== by 0x559714A: PCSetUp (precon.c:984) ==12917== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12917== by 0x40525E: main (ex10.c:312) ==12917== ==12917== Conditional jump or move depends on uninitialised value(s) ==12917== at 0x5BBB219: PrunedRowsCreate (PrunedRows.c:84) ==12917== by 0x5BB8791: ParaSailsSetupPattern (ParaSails.c:1683) ==12917== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12917== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12917== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12917== by 0x559714A: PCSetUp (precon.c:984) ==12917== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12917== by 0x40525E: main (ex10.c:312) ==12917== Uninitialised value was created by a heap allocation ==12917== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==12917== by 0x5C2CACD: DiagScaleCreate (DiagScale.c:190) ==12917== by 0x5BB8733: ParaSailsSetupPattern (ParaSails.c:1678) ==12917== by 0x5BB4D9E: hypre_ParaSailsSetup (hypre_ParaSails.c:227) ==12917== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12917== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12917== by 0x559714A: PCSetUp (precon.c:984) ==12917== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12917== by 0x40525E: main (ex10.c:312) ==12917== ==12917== Use of uninitialised value of size 8 ==12917== at 0x5C2CDD1: DiagScaleCreate (DiagScale.c:129) ==12917== by 0x5BBA287: ParaSailsSetupValues (ParaSails.c:1844) ==12917== by 0x5BB4E1C: hypre_ParaSailsSetup (hypre_ParaSails.c:234) ==12917== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12917== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12917== by 0x559714A: PCSetUp (precon.c:984) ==12917== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12917== by 0x40525E: main (ex10.c:312) ==12917== Uninitialised value was created by a heap allocation ==12917== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==12917== by 0x5BB6D32: MemAlloc (Mem.c:108) ==12917== by 0x5C2CD69: DiagScaleCreate (DiagScale.c:120) ==12917== by 0x5BBA287: ParaSailsSetupValues (ParaSails.c:1844) ==12917== by 0x5BB4E1C: hypre_ParaSailsSetup (hypre_ParaSails.c:234) ==12917== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12917== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12917== by 0x559714A: PCSetUp (precon.c:984) ==12917== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12917== by 0x40525E: main (ex10.c:312) ==12917== ==12917== Invalid read of size 8 ==12917== at 0x5C2CDD1: DiagScaleCreate (DiagScale.c:129) ==12917== by 0x5BBA287: ParaSailsSetupValues (ParaSails.c:1844) ==12917== by 0x5BB4E1C: hypre_ParaSailsSetup (hypre_ParaSails.c:234) ==12917== by 0x5AD9357: HYPRE_ParaSailsSetup (HYPRE_parcsr_ParaSails.c:372) ==12917== by 0x56A3ECC: PCSetUp_HYPRE (hypre.c:208) ==12917== by 0x559714A: PCSetUp (precon.c:984) ==12917== by 0x56AEEC7: KSPSetUp (itfunc.c:332) ==12917== by 0x40525E: main (ex10.c:312) ==12917== Address 0x213b27498 is not stack'd, malloc'd or (recently) free'd ==12917== [0]PETSC ERROR: ------------------------------------------------------------------------ [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger [0]PETSC ERROR: or see http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind [0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS X to find memory corruption errors [0]PETSC ERROR: configure using --with-debugging=yes, recompile, link, and run [0]PETSC ERROR: to get more information on the crash. [0]PETSC ERROR: --------------------- Error Message ------------------------------------------ Looking at the code there appears to be a problem. The routine first does a probe which gives a source and a count, you then allocate the space, but then you do a hypre_MPI_Recv(recvbuf, count, HYPRE_MPI_INT, hypre_MPI_ANY_SOURCE, ... but use hypre_MPI_ANY_SOURCE instead of source as the source. Thus you might get a different message (with a different length) then the probe found. I think you need to pass source instead of hypre_MPI_ANY_SOURCE here. Note that other places in the same directory where you use Probe you always use the source to receive on. When I make this change in my copy of hypre the problem goes away. Barry static void ExchangeDiagEntriesServer(MPI_Comm comm, Matrix *mat, HYPRE_Real *local_diags, HYPRE_Int num_requests, Mem *mem, hypre_MPI_Request *requests) { hypre_MPI_Status status; HYPRE_Int *recvbuf; HYPRE_Real *sendbuf; HYPRE_Int i, j, source, count; /* recvbuf contains requested indices */ /* sendbuf contains corresponding diagonal entries */ for (i=0; i<num_requests; i++) { hypre_MPI_Probe(hypre_MPI_ANY_SOURCE, DIAG_INDS_TAG, comm, &status); source = status.hypre_MPI_SOURCE; hypre_MPI_Get_count(&status, HYPRE_MPI_INT, &count); recvbuf = (HYPRE_Int *) MemAlloc(mem, count*sizeof(HYPRE_Int)); sendbuf = (HYPRE_Real *) MemAlloc(mem, count*sizeof(HYPRE_Real)); hypre_MPI_Recv(recvbuf, count, HYPRE_MPI_INT, hypre_MPI_ANY_SOURCE, DIAG_INDS_TAG, comm, &status); source = status.hypre_MPI_SOURCE; /* Construct reply message of diagonal entries in sendbuf */ for (j=0; j<count; j++) sendbuf[j] = local_diags[recvbuf[j] - mat->beg_row]; /* Use ready-mode send, since receives already posted */ hypre_MPI_Irsend(sendbuf, count, hypre_MPI_DOUBLE, source, DIAG_VALS_TAG, comm, &requests[i]); } }
participants (1)
-
Barry Smith