petsc and matlab

Alejandro Garzon gtg100n at mail.gatech.edu
Mon Aug 20 15:25:37 CDT 2007


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