[petsc-users] AOCreateBasic is not scaling

M. Scot Breitenfeld brtnfld at uiuc.edu
Wed Mar 2 16:52:48 CST 2011


I don't number my global degree's of freedom from low-high continuously
per processor as PETSc uses for ordering, but I use the natural ordering
of the application, I then use AOcreateBasic to obtain the mapping
between the PETSc and my ordering.

 CALL VecGetOwnershipRange(b, low, high, ierr)

  icnt = 0

  DO mi = 1, mctr ! these are the nodes local to processor
        mi_global = myglobal(mi)

        irowx = 3*mi_global-2
        irowy = 3*mi_global-1
        irowz = 3*mi_global
       
        mappings(icnt+1:icnt+3) = (/            &
             nrow_global(row_from_dof(1,mi))-1, &
             nrow_global(row_from_dof(2,mi))-1, &
             nrow_global(row_from_dof(3,mi))-1  &
             /)

        petscOrdering(icnt+1:icnt+3) = (/low+icnt,low+icnt+1,low+icnt+2/)

        icnt = icnt + 3
 END DO

  CALL AOCreateBasic(PETSC_COMM_WORLD, icnt, mappings, petscOrdering,
toao, ierr)

  DO mi = mctr+1, myn ! these are the ghost nodes not on this processor

     mi_global = myglobal(mi)

     mappings(icnt+1:icnt+3) = (/            &
          nrow_global(row_from_dof(1,mi))-1, &
          nrow_global(row_from_dof(2,mi))-1, &
          nrow_global(row_from_dof(3,mi))-1  &
          /)

     icnt = icnt + 3
  ENDDO
  CALL AOApplicationToPetsc(toao, 3*myn, mappings, ierr)

  CALL AODestroy(toao, ierr)

I then use  mapping to input the values into the correct row as wanted
by PETSc


On 03/02/2011 04:29 PM, Matthew Knepley wrote:
> On Wed, Mar 2, 2011 at 4:25 PM, M. Scot Breitenfeld <brtnfld at uiuc.edu
> <mailto:brtnfld at uiuc.edu>> wrote:
>
>     Hi,
>
>     First, thanks for the suggestion on using MPISBAIJ for my A matrix, it
>     seems to have cut down on my memory and assembly time. For a 1.5
>     million
>     dof problem:
>
>        # procs:                  2        4        8           16
>     ----------------------------------------------------------------
>     Assembly (sec):        245     124      63       86
>     Solver (sec):              924     578     326     680
>
>     Memory (GB):          2.5        1.4     .877    .565
>
>     The problem I have is the amount of time it's taking in AOCreateBasic,
>     it takes longer then assembling,
>
>        # procs:                            2        4        8         16
>     ---------------------------------------------------------------------
>     AOCreateBasic (sec):         .6      347      170     197
>
>     Is there something that I can change or something I can look for that
>     might be causing this increase in time as I go from 2 to 4 processors
>     (at least it scales from 4 to 8 processors). I read in the archive
>     that
>     AOCreateBasic is not meant to be scalable so maybe there is nothing I
>     can do.
>
>
> Yes, this is non-scalable. What are you using it for?
>
>    Matt
>  
>
>     Thanks,
>     Scot
>
>
>
>
>
>
>
>
>
> -- 
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their experiments lead.
> -- Norbert Wiener



More information about the petsc-users mailing list