<div dir="ltr"><div><div><div><div><div>Hello Barry:<br>Switching to 64 bit, means to re-install PETSC and add <br>--with-64-bit-indices<br></div>when do the configuration, right?<br><br></div>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.<br>
<br></div>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?<br><br></div>Thanks<br>
<br></div>Qiyue Lu<br><div><div><div><div><br></div></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jul 30, 2013 at 1:38 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  Lu,<br>
<br>
    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.<br>

<br>
   Barry<br>
<br>
Switching to 64 bit indices should not be difficult, please let us know if you have any problems.<br>
<div class="HOEnZb"><div class="h5"><br>
On Jul 30, 2013, at 10:54 AM, Lu Qiyue <<a href="mailto:luqiyue@gmail.com">luqiyue@gmail.com</a>> wrote:<br>
<br>
> Dear All:<br>
><br>
> 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.<br>
><br>
> A is in COO format here. When I prepare the input *.bin file for Petsc, the line<br>
><br>
> ierr = MatCreateSeqAIJ(PETSC_COMM_WORLD,m,n,0,cnt,&A);CHKERRQ(ierr);<br>
><br>
> can not pass.<br>
><br>
> m =n =39979380 here, cnt is an array holding the number of non-zeros per row. The error message is:<br>
><br>
> [0]PETSC ERROR: Out of memory. This could be due to allocating<br>
> [0]PETSC ERROR: too large an object or bleeding by not properly<br>
> [0]PETSC ERROR: destroying unneeded objects.<br>
> [0]PETSC ERROR: Memory allocated 0 Memory used by process 492802048<br>
> [0]PETSC ERROR: Try running with -malloc_dump or -malloc_log for info.<br>
> [0]PETSC ERROR: Memory requested 18446744061813993472!<br>
><br>
> Calling MatCreateSeqAIJ() doesn't involve NNZ information there, m/n/cnt are all integers less than 32-bit integer limit.<br>
> 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.<br>
><br>
> The code works on a system with half size of this failed one.<br>
><br>
> I am wondering, Does this because MatCreateSeqAIJ() might do some 'internal' counting things which exceeds the integer limit in this case?<br>
><br>
> Thanks<br>
><br>
> Qiyue Lu<br>
<br>
</div></div></blockquote></div><br></div>