Discussion:
[petsc-users] parallel ILU
Craig Tanis
2010-02-15 17:45:21 UTC
Permalink
Hi,
I'm trying to get ILU(k) preconditioning to work with an MPIBAIJ matrix. It appears that I need to use an MPIAIJ matrix and that I also need to build petsc with the blocksolve95 interface (though some google searches suggest that this was removed in Petsc 2?).

1) Should I be able to replace a call to MatCreateMPIBAIJ with a sequence of MatCreateMPIAIJ and MatSetBlockSize?

2) Is blocksolve95 still necessary, and if so where can one download it? It appears to have moved from it's original location on the mcs.anl.gov site.

It is possible to do ILU-k preconditioning on an MPI matrix, right?

Thanks!
Craig Tanis
Matt Knepley
2010-02-15 18:45:42 UTC
Permalink
ILU(k) was never in Blocksolve, just ilu(0). Also, Blocksolve is no
longer supported. You can try Euclid from the Hypre package at LLNL.
Configure can download Hypre for you.

Matt
Jed Brown
2010-02-16 15:19:19 UTC
Permalink
Post by Craig Tanis
It is possible to do ILU-k preconditioning on an MPI matrix, right?
Note that ILU (regardless of fill) scales very poorly, so it really only
makes sense on a small number of cores, and even then, only if you can't
find anything else that works. As Matt says, build with Hypre, then

-pc_type hypre -pc_hypre_type euclid -pc_hypre_euclid_levels k

Jed
Barry Smith
2010-02-16 19:27:23 UTC
Permalink
On Mon, 15 Feb 2010 12:45:21 -0500, Craig Tanis <craig-
Post by Craig Tanis
It is possible to do ILU-k preconditioning on an MPI matrix, right?
Note that ILU (regardless of fill) scales very poorly, so it really only
makes sense on a small number of cores, and even then, only if you can't
find anything else that works. As Matt says, build with Hypre, then
-pc_type hypre -pc_hypre_type euclid -pc_hypre_euclid_levels k
Jed
Also note that there is no support for BAIJ matrices. It is only a
"scalar" ILU, not one that works on little blocks.

Barry
Craig Tanis
2010-02-16 19:46:22 UTC
Permalink
Post by Jed Brown
Post by Craig Tanis
It is possible to do ILU-k preconditioning on an MPI matrix, right?
Note that ILU (regardless of fill) scales very poorly, so it really only
makes sense on a small number of cores, and even then, only if you can't
find anything else that works. As Matt says, build with Hypre, then
-pc_type hypre -pc_hypre_type euclid -pc_hypre_euclid_levels k
Jed
Also note that there is no support for BAIJ matrices. It is only a "scalar" ILU, not one that works on little blocks.
Barry
could you clarify this? i'm running the euclid preconditioner on a mpibaij matrix, and I get no errors or warnings. a ksp_view verifies that things are configured as expected.

thanks
craig
Barry Smith
2010-02-16 19:51:49 UTC
Permalink
Post by Craig Tanis
Post by Barry Smith
On Mon, 15 Feb 2010 12:45:21 -0500, Craig Tanis <craig-
Post by Craig Tanis
It is possible to do ILU-k preconditioning on an MPI matrix, right?
Note that ILU (regardless of fill) scales very poorly, so it
really only
makes sense on a small number of cores, and even then, only if you can't
find anything else that works. As Matt says, build with Hypre, then
-pc_type hypre -pc_hypre_type euclid -pc_hypre_euclid_levels k
Jed
Also note that there is no support for BAIJ matrices. It is only a
"scalar" ILU, not one that works on little blocks.
Barry
could you clarify this? i'm running the euclid preconditioner on a
mpibaij matrix, and I get no errors or warnings. a ksp_view
verifies that things are configured as expected.
thanks
craig
As the matrix is passed to hypre it is passed as a AIJ matrix
without a block size. This is because hypre has no concept of a BAIJ
matrix. So yes, your PETSc part of the code is using a BAIJ matrix but
hypre is doing a scalar ILU without a block size.


Barry
Craig Tanis
2010-02-16 21:02:01 UTC
Permalink
On Feb 16, 2010, at 2:51
As the matrix is passed to hypre it is passed as a AIJ matrix without a block size. This is because hypre has no concept of a BAIJ matrix. So yes, your PETSc part of the code is using a BAIJ matrix but hypre is doing a scalar ILU without a block size.
Thanks for the clarification.Is there much overhead in this conversion? Would I be better off working with a AIJ matrix in the "driver code"?

-craig
Barry Smith
2010-02-16 21:06:03 UTC
Permalink
I would stick to the BAIJ, since that will give you better
performance in the non-hypre part of the code, while the hypre part
has the same performance because it does not "know" about BAIJ. The
conversion cost is in my experience very small relative to the
computation times.

Barry
Post by Craig Tanis
On Feb 16, 2010, at 2:51
Post by Barry Smith
As the matrix is passed to hypre it is passed as a AIJ matrix
without a block size. This is because hypre has no concept of a
BAIJ matrix. So yes, your PETSc part of the code is using a BAIJ
matrix but hypre is doing a scalar ILU without a block size.
Thanks for the clarification.Is there much overhead in this
conversion? Would I be better off working with a AIJ matrix in the
"driver code"?
-craig
Continue reading on narkive:
Loading...