[petsc-dev] [Fortran] MatLoad() error: MatLoad is not supported for type: mpiaij!

Barry Smith bsmith at mcs.anl.gov
Fri Sep 3 12:53:07 CDT 2010


On Sep 3, 2010, at 12:52 PM, Jed Brown wrote:

> On Fri, 3 Sep 2010 11:57:59 -0500, Barry Smith <bsmith at mcs.anl.gov> wrote:
>> 
>>  Jed,
>> 
>>    Any sorting algorithm that gives good performance is what we need. The particular algorithm class doesn't matter.
> 
> The issue is the possibility/probability of hitting a bad-case for
> quicksort.  Robust quicksorts usually do something different if they
> detect that pivot choice is going poorly (like do a lot of work to
> choose a good pivot or switch to heapsort).  Heapsort usually costs
> slightly more than quicksort, but I think most users would be willing to
> pay that in exchange for guaranteed O(n log n) performance (as far as I
> know, sorting is never an especially performance-sensitive kernel in
> PETSc, but it's a big deal if 1 second turns into hours occasionally
> (e.g. when the mesh is changed)).

   Ok, when we add drop tolerance ILU this requires something like a sort and we found the sort was really making the factorization slow.

   Barry

> 
>>    Thanks for looking at this and improving the results dramatically. BTW: if maintaining the PETScStack and that stuff is slowing down the debug version a lot because of the recursion you could take the PetscFunctionBegin()/Return stuff from the private function that recursives.
> 
> I did, but for a different reason, see the third bullet:
> 
> changeset:   16901:fb7c48e8b485
> user:        Jed Brown <jed at 59A2.org>
> date:        Fri Sep 03 18:44:43 2010 +0200
> files:       src/sys/utils/sorti.c
> description:
> Speed up PetscSortInt
> 
> * Use median of first,middle,last for quicksort pivot selection.
> 
> * Use less intrusive partitioning algorithm (many fewer swaps for
>  almost-sorted array).
> 
> * Don't use PetscFunctionBegin/Return for the private recursive
>  function.  It costs some, but more importantly, the depth of recursion
>  is data-dependent, so it can blow PETSc's stack, thus making
>  PETSc-provided stack traces useless.  The function could never fail
>  anyway, so this does not lose any error-handling capability.




More information about the petsc-dev mailing list