<!DOCTYPE html>
<!-- BaNnErBlUrFlE-BoDy-start -->
<!-- Preheader Text : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">
 Computing the full spectrum is always an unpleasant task. But if you cannot avoid it, I would suggest that you compute the eigenvalues in two runs: n/2 largest real eigenvalues and n/2 smallest real. If your matrix-vector product is cheap,
</div>
<!-- Preheader Text : END -->

<!-- Email Banner : BEGIN -->
<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerStart</div>

<!--[if ((ie)|(mso))]>
  <table border="0" cellspacing="0" cellpadding="0" width="100%" style="padding: 16px 0px 16px 0px; direction: ltr" ><tr><td>
    <table border="0" cellspacing="0" cellpadding="0" style="padding: 0px 10px 5px 6px; width: 100%; border-radius:4px; border-top:4px solid #90a4ae;background-color:#D0D8DC;"><tr><td valign="top">
      <table align="left" border="0" cellspacing="0" cellpadding="0" style="padding: 4px 8px 4px 8px">
        <tr><td style="color:#000000; font-family: 'Arial', sans-serif; font-weight:bold; font-size:14px; direction: ltr">
          This Message Is From an External Sender
        </td></tr>
        <tr><td style="color:#000000; font-weight:normal; font-family: 'Arial', sans-serif; font-size:12px; direction: ltr">
          This message came from outside your organization.
        </td></tr>

      </table>

    </td></tr></table>
  </td></tr></table>
<![endif]-->

<![if !((ie)|(mso))]>
  <div dir="ltr"  id="pfptBannerdysltjo" style="all: revert !important; display:block !important; text-align: left !important; margin:16px 0px 16px 0px !important; padding:8px 16px 8px 16px !important; border-radius: 4px !important; min-width: 200px !important; background-color: #D0D8DC !important; background-color: #D0D8DC; border-top: 4px solid #90a4ae !important; border-top: 4px solid #90a4ae;">
    <div id="pfptBannerdysltjo" style="all: unset !important; float:left !important; display:block !important; margin: 0px 0px 1px 0px !important; max-width: 600px !important;">
      <div id="pfptBannerdysltjo" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #D0D8DC !important; color:#000000 !important; color:#000000; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-weight:bold !important; font-weight:bold; font-size:14px !important; line-height:18px !important; line-height:18px">
        This Message Is From an External Sender
      </div>
      <div id="pfptBannerdysltjo" style="all: unset !important; display:block !important; visibility: visible !important; background-color: #D0D8DC !important; color:#000000 !important; color:#000000; font-weight:normal; font-family: 'Arial', sans-serif !important; font-family: 'Arial', sans-serif; font-size:12px !important; line-height:18px !important; line-height:18px; margin-top:2px !important;">
This message came from outside your organization.
      </div>

    </div>

    <div style="clear: both !important; display: block !important; visibility: hidden !important; line-height: 0 !important; font-size: 0.01px !important; height: 0px"> </div>
  </div>
<![endif]>

<div style="display:none !important;display:none;visibility:hidden;mso-hide:all;font-size:1px;color:#ffffff;line-height:1px;height:0px;max-height:0px;opacity:0;overflow:hidden;">ZjQcmQRYFpfptBannerEnd</div>
<!-- Email Banner : END -->

<!-- BaNnErBlUrFlE-BoDy-end -->
<html>
<head><!-- BaNnErBlUrFlE-HeAdEr-start -->
<style>
  #pfptBannerdysltjo { all: revert !important; display: block !important; 
    visibility: visible !important; opacity: 1 !important; 
    background-color: #D0D8DC !important; 
    max-width: none !important; max-height: none !important }
  .pfptPrimaryButtondysltjo:hover, .pfptPrimaryButtondysltjo:focus {
    background-color: #b4c1c7 !important; }
  .pfptPrimaryButtondysltjo:active {
    background-color: #90a4ae !important; }
</style>

<!-- BaNnErBlUrFlE-HeAdEr-end -->
<meta charset="utf-8"></head><body><pre style="font-family: sans-serif; font-size: 100%; white-space: pre-wrap; word-wrap: break-word">Computing the full spectrum is always an unpleasant task. But if you cannot avoid it, I would suggest that you compute the eigenvalues in two runs: n/2 largest real eigenvalues and n/2 smallest real. If your matrix-vector product is cheap, then the biggest cost is orthogonalization, and this will be significantly smaller if you do it in two chunks.

A more elaborate alternative would be to compute the eigenvalues with more than two chunks, splitting the spectrum in several intervals, and using polynomial filters. Likely not faster, and implementation would not be trivial.

Doing the full diagonalization with a dense eigensolver may be faster or not, difficult to say. For symmetric matrices I would suggest the SLEPc interface to ELPA (solver EPSELPA). Configure SLEPc with --download-elpa for easy installation. Alternatively, install it yourself with the wanted options (it has GPU support). You may also want to try MAGMA, which has multi-GPU routines for symmetric dense eigenproblems (this one is not interfaced yet from SLEPc). 

Jose


> El 13 may 2024, a las 20:10, Matthew Knepley <knepley@gmail.com> escribió:

> This Message Is From an External Sender
> This message came from outside your organization.
> On Mon, May 13, 2024 at 1:40 PM Sreeram R Venkat <srvenkat@utexas.edu> wrote:
> This Message Is From an External Sender
> This message came from outside your organization.
>  I have a MatShell object that computes matrix-vector products of a dense symmetric matrix of size NxN. The MatShell does not actually form the dense matrix, so it is never in memory/storage. For my application, N ranges from 1e4 to 1e5.

> I want to compute the full spectrum of this matrix. For an example with N ~1e4, I was able to use SLEPc's Krylov-Schur solver to get the spectrum in about 3 hours running on 6 A100 GPUs. There, I had set the MPD to 2000. Before moving on to larger matrices, I wanted to check whether this is the best way to go about it. I saw on other posts that for computing full spectra of dense matrices, it is generally better to go with LAPACK/SCALAPACK. Is the same true for MatShells of dense matrices? The matrix-vector products with the shell themselves are really cheap, so I can form the dense matrix with MatComputeOperator() and store it to later compute with another solver if needed. If SLEPc is not a bad option, what is a good way to select MPD/NCV?

> You can select LAPACK through SLEPc. I would definitely try it since it is easy. For the complete spectrum, it is likely to be faster (modulo how fast KS converges).

>   Thanks,

>     Matt
>  I do need the full spectrum here since I am trying to analyze how the spectral decay changes for different problem configurations.

> Thanks for your help,
> Sreeram


> -- 
> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
> -- Norbert Wiener

> <a href="https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!akWHVQEU3frUc3IGNzuaYU5ayheOCPoAPCdhw6e4VPHr0oaEuOBOxMUu1ZRsBuA_F5n56o9fJLTnmNiQcb7R2oZ9$">https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!akWHVQEU3frUc3IGNzuaYU5ayheOCPoAPCdhw6e4VPHr0oaEuOBOxMUu1ZRsBuA_F5n56o9fJLTnmNiQcb7R2oZ9$</a>


</pre></body></html>