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$ Jun 14, 2020 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$ Jun 14, 2020 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$ Jun 15, 2020 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$ Jun 16, 2020 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$ Jun 16, 2020 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.