[petsc-users] A problem with MPI Derived Data Type and 'calloc'

Zhenglun (Alan) Wei zhenglun.wei at gmail.com
Thu Apr 12 13:16:46 CDT 2012


On 4/12/2012 11:52 AM, Jed Brown wrote:
> On Thu, Apr 12, 2012 at 11:37, Zhenglun (Alan) Wei 
> <zhenglun.wei at gmail.com <mailto:zhenglun.wei at gmail.com>> wrote:
>
>         Everything is fine in AlanFloatStruct.c. *However, when I was
>     trying to use 'calloc' to allocate memory to 'a[][]' rather than
>     directly define 'a[][]' as a structure matrix, the problem comes.*
>     (see AlanTEST1.c).
>
>
>     a = (TESTVAR**) calloc(SIZE, sizeof(TESTVAR*));
>     b = (TESTVAR**) calloc(SIZE, sizeof(TESTVAR*));
>     c = (TESTVAR**) calloc(SIZE, sizeof(TESTVAR*));
>     for(i = 0; i < SIZE; i++) {
>       a[i] = (TESTVAR*) calloc(SIZE, sizeof(TESTVAR));
>       b[i] = (TESTVAR*) calloc(SIZE, sizeof(TESTVAR));
>       c[i] = (TESTVAR*) calloc(SIZE, sizeof(TESTVAR));
>     }
>
> At this point, there is no relationship between a[i][j] and a[k][j]. 
> It is not strided memory. I suggest allocating the entire array in one 
> allocation (SIZE*SIZE*sizeof(TESTVAR)). You can set up pointers into 
> it if you like, but MPI will not use them.
>
>     MPI_Type_vector(SIZE, 1, SIZE, structype, &columntype);
>
> This specifies that the array is strided.
Dear Dr. Brown,
      Thank you for your reply. It gives me another way to solve this 
problem. However, I failed several times while I was trying it. Can I 
repeat your idea to make sure that I understand it.
1)  should define a new one-dimensional pointer array, i.e. TESTVAR *array;
2)  I allocate this array with array = (TESTVAR*) calloc(SIZE*SIZE, 
sizeof(TESTVAR));
3)  then, I setup pointer of 'a[i][j]'  to array.
       Are they correct? BTW, does PETSc have any data structure can be 
an alternative so that I do not need to use MPI derived data type?

thanks,
Alan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120412/947d895c/attachment.htm>


More information about the petsc-users mailing list