petsc and matlab

Barry Smith bsmith at mcs.anl.gov
Sat Sep 15 22:28:38 CDT 2007


   Forgot to mention, given all the odd tweaks people put
into drop tolerance ILU's there is no way we could have 
exactly the same preconditioner as PETSc.

   It is possible using the "Matlab engine" to use Matlab to 
apply its own drop tolerance ILU(), this would not be useful
for production, but could be used to confirm that the two
codes do work the same. You must build PETSc with matlab engine
(which is painful, run PETSc's config/configure.py with --help
to see what options to use) then use -mat_type matlab to
run. I don't recommend doing this unless you really care
and have spare time on your hands.

   Barry


On Sat, 15 Sep 2007, Barry Smith wrote:

> 
>   Alejandro,
> 
>     That is really weird, the convergence usually does
> not depend much on exactly what the right hand side is.
> 
> Are you using a nonzero initial guess with Matlab?
> With PETSc? (With PETSc call KSPSetInitialGuessNonzero().
> 
> Can you run the PETSc one with -ksp_monitor so that 
> you see how many iterations are needed each time, and get that
> information from Matlab to compare?
> 
>    Barry
> 
> 
> On Tue, 21 Aug 2007, Alejandro Garzon wrote:
> 
> > Yes, the "A" matrix is the same.
> > --
> > Alejandro
> > 
> > 
> > Quoting Barry Smith <bsmith at mcs.anl.gov>:
> > 
> > >
> > >   Is the matrix "A" the same for all groups (and the only thing
> > > different for each group is b)?
> > >
> > >    Barry
> > >
> > >
> > > On Mon, 20 Aug 2007, Alejandro Garzon wrote:
> > >
> > > > Hi, I wrote a code for solving a time dependent pde. In each time step
> > > > I have to solve a linear system. I first wrote a prototype in matlab
> > > > and then a C version using Petsc. To my surprise for some input
> > > > parameters the matlab version runs faster than the Petsc code (on the
> > > > same single processor). I did
> > > > the performance comparison by timing 20 groups of 40 iterations. The
> > > > times for Petsc and matlab are shown bellow
> > > >
> > > > group        Petsc        matlab
> > > >
> > > >     1       0.244981     1.110283
> > > >     2       0.244995     1.112919
> > > >     3       0.241305     1.113608
> > > >     4       0.244542     1.114669
> > > >     5       7.534417     1.112450
> > > >     6       0.242212     1.115867
> > > >     7       0.246327     1.111135
> > > >     8       0.241105     1.113442
> > > >     9       0.244468     1.111215
> > > >    10       0.241113     1.111334
> > > >    11       0.244541     1.112467
> > > >    12       0.241400     1.113525
> > > >    13       0.245020     1.114077
> > > >    14       0.241303     1.113409
> > > >    15       0.244380     1.116238
> > > >    16       0.241372     1.109931
> > > >    17       0.244108     1.100667
> > > >    18       0.240419     1.096030
> > > >    19       0.244337     1.096293
> > > >    20      17.139999     1.097120
> > > >            ---------     --------
> > > > total      29.0523       22.1967
> > > > time
> > > >
> > > > As can be seen in the table, although in most of the groups the time
> > > > spent by the Petsc code is lower than that of matlab
> > > > (0.24 compared to 1.1) there are two groups (5 and 20) in the Petsc column
> > > that
> > > > take a long time and make the total for the Petsc code bigger than
> > > > that for matlab.
> > > >
> > > > In Petsc and matlab the method used is bicg and the relative residual
> > > > is the same: 1e-8. The preconditioners are different, though. In petsc
> > > > I used the default preconditioner and in matlab I used incomplete LU
> > > > decomposition  with drop tolerance. The code that solves the linear
> > > > system in matlab is
> > > >
> > > > [L,U] = luinc(A,droptol); <---- this is done only once before the
> > > >                                  first iteration, droptol = 1e-12
> > > >
> > > > x = bicg(A,b,relres,maxsteps,L,U);
> > > >
> > > > I know incomplete LU decomposition as a preconditioner is available in
> > > > Petsc but in order to use it one must provide two arguments in
> > > > addition to the drop tolerance and I didn't know what values to give
> > > > to them.
> > > >
> > > > My question is this: what options should be chosen so that the
> > > > preconditioner and method use by Petsc are the same as those shown in
> > > > the two lines of matlab code above? (could you contact the authors of the
> > > > matlab functions?) A comparison of the performace of Petsc and matlab
> > > > makes sense only if they are using the exact same methods.
> > > >
> > > >
> > > > Thanks.
> > > >
> > > > --
> > > > Alejandro
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> > 
> > 
> 




More information about the petsc-users mailing list