My application calls for solving a dense, 40,000 x 40,000, ill-conditioned linear system. The native SciPy GMRES solver with preconditioning has worked well for my application and solving a single system is within the ability of my local hardware. I am now looking to perform many such calculations and would like to move the calculations to cluster to improve speed. My understanding is that the native GMRES solver is default configured for use on a single core. Is there a straightforward way to incorporate the solver with Pool? Or does anyone know of an efficient parallelized GMRES solver with a Python wrapper?

  • 1
    $\begingroup$ I think PETSc and Trillinos have Python wrappers available. $\endgroup$ – Spencer Bryngelson Jun 14 '20 at 17:30
  • 1
    $\begingroup$ The matrix vector multiplications are the most time consuming parts of the computation and can be parallelized, both across cores on a single node and across nodes in a cluster. $\endgroup$ – Brian Borchers Jun 14 '20 at 18:32
  • 2
    $\begingroup$ If you have to solve many such systems, why not solve several systems at once, rather than each one in parallel? $\endgroup$ – Wolfgang Bangerth Jun 15 '20 at 17:04
  • $\begingroup$ +1 to SpencerBryngelson's suggestion. @WolfgangBangerth, would not he need a block GMRES implementation then? I know that there is a BGMRES implementation in PETSc but I am not sure if it is being maintained. It may be a better idea to run multiple solvers in parallel each for different rhs (in terms of human time of course). $\endgroup$ – Abdullah Ali Sivas Jun 16 '20 at 2:45
  • $\begingroup$ You should be able to call the GMRES solver from several threads at the same time, each thread solving one linear system. $\endgroup$ – Wolfgang Bangerth Jun 16 '20 at 13:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.