<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">Simon :</div><div class="gmail_quote"><span style="font-size:12.8px">For '-eps_hermitian -eps_largest_magnitude', why do you need '</span>spectral transform'?</div><div class="gmail_quote">Try slepc default method for ex3.c.</div><div class="gmail_quote"><br></div><div class="gmail_quote">Hong<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
Hi,<br>
<br>
I'm running a slepc eigenvalue solver on a single machine with 198GB of ram,<br>
and solution space dimension 2^32. With double precision this means<br>
each vector is 32GB. I'm using shell matrices to implement the matrix<br>
vector product. I figured the easiest way to get eigenvalues is using<br>
the slepc power method, but it is still eating all the ram.<br>
<br>
Running in gdb I see that slepc is allocating a bunch of vectors in<br>
the spectral transform object (in STSetUp), and by this time it has consumed<br>
most of the 198GB of ram. I don't see why a spectral transform<br>
shift of zero needs to alloc a whole bunch of memory.<br>
<br>
I'm wondering if there are some other options to slepc that can<br>
reduce the memory footprint? A barebones implementation of the<br>
power method only needs to keep two vectors, perhaps I should<br>
just try doing this using petsc primitives. It's also possible that<br>
I could spread the computation over two or more machines but<br>
that's a whole other learning curve.<br>
<br>
The code I am running is essentially the laplacian grid<br>
example from slepc (src/eps/examples/tutorials/ex3.c):<br>
<br>
./ex3 -eps_hermitian -eps_largest_magnitude -eps_monitor ascii -eps_nev 1 -eps_type power -n 65536<br>
<br>
I also put this line in the source:<br>
EPSSetDimensions(eps,1,2,1);<br>
<br>
Cheers,<br>
<br>
Simon.<br>
<br>
</blockquote></div><br></div></div>