<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Feb 3, 2015 at 10:11 AM, Kharche, Sanjay <span dir="ltr"><<a href="mailto:S.R.Kharche@exeter.ac.uk" target="_blank">S.R.Kharche@exeter.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hi Karli<br>
<br>
The OpenMPI errors may be a consequence of the curropt memory that I cannot identify.<br>
<br>
I tried all combinations of memory allocation:<br>
<br>
(int *) calloc(size,sizeof(int)); // typecasting<br>
<br>
and<br>
<br>
calloc(size, sizeof(int))<br>
<br>
and also tried it by replacing with malloc. None of them work. In addition, I have now added some very simple non-petsc part to my code - a for loop with some additions and substractions. This loop does not use the arrarys that I am trying to allocate memory, neither do they use Petsc. Now, even the first calloc of the 3 that I would like to use does not work! I will appreciate knowing the reason for this.<br></blockquote><div><br></div><div>Go to an example. If this does not happen, there is a bug in your code. So</div><div><br></div><div>  cd src/snes/examples/tutorials</div><div>  make ex5</div><div>  ./ex5 -snes_monitor</div><div>  <Add a calloc to the code></div><div>  ./ex5 -snes_monitor</div><div><br></div><div>If that is fine, you have a bug. Usually valgrind can find them.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
thanks for your time.<br>
Sanjay<br>
<br>
<br>
________________________________________<br>
From: <a href="mailto:petsc-users-bounces@mcs.anl.gov">petsc-users-bounces@mcs.anl.gov</a> [<a href="mailto:petsc-users-bounces@mcs.anl.gov">petsc-users-bounces@mcs.anl.gov</a>] on behalf of Karl Rupp [<a href="mailto:rupp@iue.tuwien.ac.at">rupp@iue.tuwien.ac.at</a>]<br>
Sent: 03 February 2015 15:58<br>
To: Sanjay Kharche; <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
Subject: Re: [petsc-users] calloc with MPI and PetSc<br>
<br>
Hi Sanjay,<br>
<br>
is this the full output? The errors/warnings is due to OpenMPI, so they<br>
may not be harmful. You may try building and running with mpich instead<br>
to get rid of these. If these are the only errors reported by valgrind,<br>
can you also try to use malloc instead of calloc?<br>
<br>
Best regards,<br>
Karli<br>
<br>
<br>
<br>
On 02/03/2015 03:48 PM, Sanjay Kharche wrote:<br>
><br>
> Hi Karl<br>
><br>
> You are right - the code is not valgrind clean even on single processor. The Valgrind output below shows the line number of the TSSolve in my code.<br>
><br>
> valgrind ./sk2d<br>
> ==7907== Memcheck, a memory error detector<br>
> ==7907== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.<br>
> ==7907== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info<br>
> ==7907== Command: ./sk2d<br>
> ==7907==<br>
> ==7907== Invalid read of size 4<br>
> ==7907==    at 0x55985C6: opal_os_dirpath_create (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x553A2C7: orte_session_dir (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x554DAD1: orte_ess_base_app_setup (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x545B584: ??? (in /usr/lib/openmpi/lib/openmpi/mca_ess_singleton.so)<br>
> ==7907==    by 0x552C213: orte_init (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x54E4FBB: ??? (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x54FE30F: PMPI_Init_thread (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x4136FAA: PetscInitialize (pinit.c:781)<br>
> ==7907==    by 0x8049448: main (sk2d.c:109)<br>
> ==7907==  Address 0x580e9f4 is 68 bytes inside a block of size 71 alloc'd<br>
> ==7907==    at 0x4006D69: malloc (vg_replace_malloc.c:236)<br>
> ==7907==    by 0x5598542: opal_os_dirpath_create (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x553A2C7: orte_session_dir (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x554DAD1: orte_ess_base_app_setup (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x545B584: ??? (in /usr/lib/openmpi/lib/openmpi/mca_ess_singleton.so)<br>
> ==7907==    by 0x552C213: orte_init (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x54E4FBB: ??? (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x54FE30F: PMPI_Init_thread (in /usr/lib/openmpi/lib/libmpi.so.1.0.2)<br>
> ==7907==    by 0x4136FAA: PetscInitialize (pinit.c:781)<br>
> ==7907==    by 0x8049448: main (sk2d.c:109)<br>
> ________________________________________<br>
> From: Karl Rupp [<a href="mailto:rupp@iue.tuwien.ac.at">rupp@iue.tuwien.ac.at</a>]<br>
> Sent: 03 February 2015 14:42<br>
> To: Sanjay Kharche; <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><br>
> Subject: Re: [petsc-users] calloc with MPI and PetSc<br>
><br>
> Hi Sanjay,<br>
><br>
> this sounds a lot like a memory corruption somewhere in the code. Could<br>
> you please verify first that the code is valgrind-clean? Does the same<br>
> problem show up with one MPI rank?<br>
><br>
> Best regards,<br>
> Karli<br>
><br>
><br>
> On 02/03/2015 03:21 PM, Sanjay Kharche wrote:<br>
>><br>
>> Dear All<br>
>><br>
>> I have a code in C that uses Petsc and MPI. My code is an extension of ex15.c in the ts tutorials.<br>
>><br>
>> I am trying to allocate memory for 3 int arrays, for which I have already declared int pointers. These arrays are not intended for use by the petsc functions. I am allocating memory using calloc. The use of 1 calloc call is fine, however when I try to allocate memory for 2 or more arrays, the TSSolve(ts,u) gives an error. I found this by including and excluding the TSSolve call. I have tried making the array pointers PetscInt but with same result. The first few lines of the error message are also pasted after the relevant code snippet. Can you let me know how I can allocate memory for 3 arrays. These arrays are not relevant to any petsc functions.<br>
>><br>
>> thanks<br>
>> Sanjay<br>
>><br>
>> Relevant code in main():<br>
>><br>
>>     PetscInt    size = 0;                   /* Petsc/MPI                               */<br>
>>     PetscInt    rank = 0;<br>
>><br>
>>    int *usr_mybase; // mybase, myend, myblocksize are to be used in non-petsc part of code.<br>
>>    int *usr_myend;<br>
>>    int *usr_myblocksize;<br>
>>     int R_base, transit;<br>
>>     MPI_Status status;<br>
>>     MPI_Request request;<br>
>> /*********************************end of declarations in main************************/<br>
>>     PetscInitialize(&argc,&argv,(char*)0,help);<br>
>>     /* Initialize user application context                              */<br>
>>     user.da           = NULL;<br>
>>     user.boundary     = 1;  /* 0: Drichlet BC; 1: Neumann BC            */<br>
>>     user.viewJacobian = PETSC_FALSE;<br>
>><br>
>>     MPI_Comm_size(PETSC_COMM_WORLD, &size);<br>
>>     MPI_Comm_rank(PETSC_COMM_WORLD, &rank);<br>
>><br>
>>     printf("my size is %d, and rank is %d\n",size, rank);<br>
>><br>
>>      usr_mybase      = (int*) calloc (size,sizeof(int)); // 1st call to calloc is ok.<br>
>> //   usr_myend       = (int*) calloc (size,sizeof(int));  // when I uncomment this call to calloc, TSSolve fails. error below.<br>
>> //   usr_myblocksize = (int*) calloc (size,sizeof(int));<br>
>> .<br>
>> .<br>
>> .<br>
>>      TSSolve(ts,u); // has a problem when I use 2 callocs.<br>
>><br>
>><br>
>> The output and error message:<br>
>><br>
>> mpiexec -n 4 ./sk2d -draw_pause .1 -ts_monitor_draw_solution<br>
>> my size is 4, and rank is 2<br>
>> my size is 4, and rank is 0<br>
>> my size is 4, and rank is 3<br>
>> my size is 4, and rank is 1<br>
>> [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
>> [0]PETSC ERROR: Floating point exception<br>
>> [1]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
>> [1]PETSC ERROR: Floating point exception<br>
>> [1]PETSC ERROR: Vec entry at local location 320 is not-a-number or infinite at beginning of function: Parameter number 2<br>
>> [1]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>
>> [2]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
>> [2]PETSC ERROR: Floating point exception<br>
>> [2]PETSC ERROR: Vec entry at local location 10 is not-a-number or infinite at beginning of function: Parameter number 2<br>
>> [2]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>
>> [2]PETSC ERROR: Petsc Release Version 3.5.2, unknown<br>
>> [3]PETSC ERROR: [0]PETSC ERROR: Vec entry at local location 293 is not-a-number or infinite at beginning of function: Parameter number 2<br>
>><br>
><br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>