assembly

Barry Smith bsmith at mcs.anl.gov
Sat Feb 2 16:19:37 CST 2008


    The matstash has a concept of preallocation also. During the first  
setvalues
it is allocating more and more memory for the stash. In the second  
setvalues
the stash is large enough so does not require any addition allocation.

    You can use the option -matstash_initial_size <size> to allocate  
enough space
initially so that the first setvalues is also fast. It does not look  
like there is a way
coded to get the <size> that you should use. It should be set to the  
maximum nonzeros
any process has that belongs to other processes. The stash handling  
code is
in src/mat/utils/matstash.c, perhaps you can figure out how to  
printout with PetscInfo()
the sizes needed?


    Barry



On Feb 2, 2008, at 12:30 PM, Thomas Geenen wrote:

> On Saturday 02 February 2008 18:33, Hong Zhang wrote:
>> On Sat, 2 Feb 2008, Thomas Geenen wrote:
>>> Dear Petsc users,
>>>
>>> I would like to understand what is slowing down the assembly phase  
>>> of my
>>> matrix. I create a matrix with MatCreateMPIAIJ i make a rough  
>>> guess of
>>> the number of off diagonal entries and then use a conservative  
>>> value to
>>> make sure I do not need extra mallocs. (the number of diagonal  
>>> entries is
>>> exact)
>>> next i call MatSetValues and MatAssemblyBegin, MatAssemblyEnd.
>>> The first time i call MatSetValues and MatAssemblyBegin,
>>> MatAssemblyEnd it takes about 170 seconds
>>> the second time 0.3 seconds.
>>> I run it on 6 cpu's and I do fill quit a number of row-entries on  
>>> the
>>> "wrong" cpu. However thats also the case the second run. I checked
>>> that there are no additional mallocs
>>> MatGetInfo info.mallocs=0 both after MatSetValues and after
>>> MatAssemblyBegin, MatAssemblyEnd.
>>
>> Run your code with the option '-log_summary' and check which function
>> call dominates the execution time.
>
> the time is spend in MatStashScatterGetMesg_Private
>
>>
>>> I run it on 6 cpu's and I do fill quit a number of row-entries on  
>>> the
>>> "wrong" cpu.
>>
>> Likely, the communication that sending the entries to the
>> corrected cpu consume the time. Can you fill the entries in the
>> correct cpu?
>
> the second time the entries are filled on the wrong CPU as well.
> i am curious about the difference in time between run 1 and 2.
>
>>
>> Hong
>>
>>> cheers
>>> Thomas
>




More information about the petsc-users mailing list