[petsc-users] Question on MatCreateSeqAIJ() and 32-bit integer

Karl Rupp rupp at mcs.anl.gov
Tue Jul 30 14:10:01 CDT 2013


Hi,

yes, you really need to re-compile the PETSc library to get 64-bit 
integers. You can build the library below your home folder, there is no 
need to beg your admin for this. :-)

(As an additional benefit, you can also enable additional packages which 
may not be available in your default installation).

Best regards,
Karli


On 07/30/2013 02:05 PM, Lu Qiyue wrote:
> Hello Barry:
> Switching to 64 bit, means to re-install PETSC and add
> --with-64-bit-indices
> when do the configuration, right?
>
> Because re-install PETSC is not easy here and I am wondering, is there
> any other way to solve this problem? Like add some ' -bigint' option
> while compiling the driver? Looks not enough for this case, because
> PETSC still at 32-bits.
>
>  From what you said that 'because of internal counts inside of PETSc
> (actually the way we store the matrices) it requires 64 bit indices', I
> am afraid that re-install is the only solution?
>
> Thanks
>
> Qiyue Lu
>
>
>
> On Tue, Jul 30, 2013 at 1:38 PM, Barry Smith <bsmith at mcs.anl.gov
> <mailto:bsmith at mcs.anl.gov>> wrote:
>
>
>        Lu,
>
>          You need to switch to 64 bit indices. Even though the
>     individual number of non zeros per row is less than the 32 bit limit
>     the total number of non zeros in the matrix is higher than the
>     limit; how much physical memory you have is not relevant. As you
>     note it is because of internal counts inside of PETSc (actually the
>     way we store the matrices) it requires 64 bit indices.
>
>         Barry
>
>     Switching to 64 bit indices should not be difficult, please let us
>     know if you have any problems.
>
>     On Jul 30, 2013, at 10:54 AM, Lu Qiyue <luqiyue at gmail.com
>     <mailto:luqiyue at gmail.com>> wrote:
>
>      > Dear All:
>      >
>      > I am solving a huge system AX=b, A is a sparse matrix but its
>     number of non-zeros is 3.29*10^9. I noticed that the 32-bit integer
>     upper limit is ~2.15*10^9.
>      >
>      > A is in COO format here. When I prepare the input *.bin file for
>     Petsc, the line
>      >
>      > ierr = MatCreateSeqAIJ(PETSC_COMM_WORLD,m,n,0,cnt,&A);CHKERRQ(ierr);
>      >
>      > can not pass.
>      >
>      > m =n =39979380 here, cnt is an array holding the number of
>     non-zeros per row. The error message is:
>      >
>      > [0]PETSC ERROR: Out of memory. This could be due to allocating
>      > [0]PETSC ERROR: too large an object or bleeding by not properly
>      > [0]PETSC ERROR: destroying unneeded objects.
>      > [0]PETSC ERROR: Memory allocated 0 Memory used by process 492802048
>      > [0]PETSC ERROR: Try running with -malloc_dump or -malloc_log for
>     info.
>      > [0]PETSC ERROR: Memory requested 18446744061813993472!
>      >
>      > Calling MatCreateSeqAIJ() doesn't involve NNZ information there,
>     m/n/cnt are all integers less than 32-bit integer limit.
>      > And the total size of data in COO format: nnz*8
>     bytes(values)+nnz*4 bytes(rows)+nnz*4 bytes(cols) are less than the
>     memory limit of our system.
>      >
>      > The code works on a system with half size of this failed one.
>      >
>      > I am wondering, Does this because MatCreateSeqAIJ() might do some
>     'internal' counting things which exceeds the integer limit in this case?
>      >
>      > Thanks
>      >
>      > Qiyue Lu
>
>



More information about the petsc-users mailing list