> ? Don't call MatCopy() on anything that you have NOT fully filled up, same 
> with MatDiagonalSet() and MatZeroEntries(). You should only do those 
> operations on matrices that you have filled up and called MatAssembly on 
> already. You can use MatDiagonalSet() directly on a naked matrix but only if 
> you are not putting other values in.

Barry, just to confirm, are you saying that MatZeroEntries would
nullify the preallocation completely if called before
AssmeblyBegin/End ? I have been doing this quite often before a linear
system assembly and have not noticed extra mallocs during the process.
Is there something that I am misunderstanding in the above statement ?
I would much appreciate if you can clarify.

Thanks,
Vijay

On Tue, Apr 19, 2011 at 9:58 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> On Apr 19, 2011, at 8:50 PM, Debao Shao wrote:
>
>> Here is my sample code:
>> ?ierr = MatZeroEntries( M ); assert( ierr ?== 0);
>> ?ierr = MatDiagonalSet( M, vec.pv, INSERT_VALUES );
>> ?ierr = MatCopy( ms->M, mStorage->M, ?DIFFERENT_NONZERO_PATTERN );
>>
>> I checked PETSC api, both "MatDiagonalSet" and "MatCopy" called 
>> MatAssembly***, Is the usage wrong, or, how to deal with the problem?
>
> ? Don't call MatCopy() on anything that you have NOT fully filled up, same 
> with MatDiagonalSet() and MatZeroEntries(). You should only do those 
> operations on matrices that you have filled up and called MatAssembly on 
> already. You can use MatDiagonalSet() directly on a naked matrix but only if 
> you are not putting other values in.
>
> ? ?Barry
>
> I know these "rules" may seem strange but the problem is that these 
> operations need to know the nonzero pattern of the sparse matrix and since 
> you haven't set anything much in them yet they have to assume it is empty and 
> blast away the preallocation information. ?Basically you shouldn't do much in 
> the way of operations on matrices until you've fully assembled them.
>
>>
>> Thanks,
>> Debao
>> -----Original Message-----
>> From: petsc-users-bounces at mcs.anl.gov [mailto:petsc-users-bounces at 
>> mcs.anl.gov] On Behalf Of Barry Smith
>> Sent: Wednesday, April 20, 2011 9:40 AM
>> To: PETSc users list
>> Subject: Re: [petsc-users] MatCopy and MatSetValue consume most 99 
>> percentage of runtime
>>
>>
>> On Apr 19, 2011, at 8:31 PM, Debao Shao wrote:
>>
>>> Hi, Barry:
>>>
>>> Thanks for the reply.
>>>
>>> I preallocated enough space for the sparse matrix, but I found 
>>> mat->data->imax changed after "MatAssemblyEnd", and it caused many rowmax 
>>> less than the number of nonzeros per row, then "MatSeqXAIJReallocateAIJ" is 
>>> called frequently when doing MatSetValues again to the matrix.
>>
>> ? Are you using MatZeroRows()? If so call MatSetOption(mat, 
>> MAT_KEEP_NONZERO_PATTERN) before calling the zero rows to retain that 
>> structure.
>>
>> ? ?If you are not using MatZeroRows() then apparently the first time you set 
>> values in there and call MatAssemblyEnd() you have left many locations that 
>> later will be filled unfilled and so they are eliminated at MatAssembly 
>> time. ?You must make sure that all potentially nonzero locations get a value 
>> put in initially (put zero for the locations that you don't yet have ?a 
>> value for) before you first call MatAssemblyEnd().
>>
>> ? Barry
>>
>> PETSc matrices have no way of retaining extra locations you preallocated for 
>> unless you put something (like 0) in there.
>>
>>>
>>> Any suggestions?
>>>
>>> Thanks,
>>> Debao
>>> -----Original Message-----
>>> From: petsc-users-bounces at mcs.anl.gov [mailto:petsc-users-bounces at 
>>> mcs.anl.gov] On Behalf Of Barry Smith
>>> Sent: Friday, April 15, 2011 9:25 PM
>>> To: PETSc users list
>>> Subject: Re: [petsc-users] MatCopy and MatSetValue consume most 99 
>>> percentage of runtime
>>>
>>>
>>> ?Debao,
>>>
>>> ? ? Please see 
>>> http://www.mcs.anl.gov/petsc/petsc-as/documentation/faq.html#efficient-assembly
>>>  It should resolve the difficulties.
>>>
>>> ? Barry
>>>
>>> On Apr 15, 2011, at 2:16 AM, Debao Shao wrote:
>>>
>>>> Dear Petsc:
>>>>
>>>> I'm trying on Petsc iterative solver(KSPCG & PCJACOBI), but it's strange 
>>>> that the two functions "MatCopy" and "MatSetValue" consume most of 
>>>> runtime, and the functions were not called frequently, just several times.
>>>>
>>>> My libpetsc.a is built as follows:
>>>> 1, /config/configure.py --with-mpi=0 --with-debugging=0 -with-log=0 
>>>> -with-info=0
>>>> 2, make all;
>>>>
>>>> It's very appreciated to get your reply.
>>>>
>>>> Thanks a lot,
>>>> Debao
>>>>
>>>> -- The information contained in this communication and any attachments is 
>>>> confidential and may be privileged, and is for the sole use of the 
>>>> intended recipient(s). Any unauthorized review, use, disclosure or 
>>>> distribution is prohibited. Unless explicitly stated otherwise in the body 
>>>> of this communication or the attachment thereto (if any), the information 
>>>> is provided on an AS-IS basis without any express or implied warranties or 
>>>> liabilities. To the extent you are relying on this information, you are 
>>>> doing so at your own risk. If you are not the intended recipient, please 
>>>> notify the sender immediately by replying to this message and destroy all 
>>>> copies of this message and any attachments. ASML is neither liable for the 
>>>> proper and complete transmission of the information contained in this 
>>>> communication, nor for any delay in its receipt.
>>>
>>>
>>> -- The information contained in this communication and any attachments is 
>>> confidential and may be privileged, and is for the sole use of the intended 
>>> recipient(s). Any unauthorized review, use, disclosure or distribution is 
>>> prohibited. Unless explicitly stated otherwise in the body of this 
>>> communication or the attachment thereto (if any), the information is 
>>> provided on an AS-IS basis without any express or implied warranties or 
>>> liabilities. To the extent you are relying on this information, you are 
>>> doing so at your own risk. If you are not the intended recipient, please 
>>> notify the sender immediately by replying to this message and destroy all 
>>> copies of this message and any attachments. ASML is neither liable for the 
>>> proper and complete transmission of the information contained in this 
>>> communication, nor for any delay in its receipt.
>>
>>
>> -- The information contained in this communication and any attachments is 
>> confidential and may be privileged, and is for the sole use of the intended 
>> recipient(s). Any unauthorized review, use, disclosure or distribution is 
>> prohibited. Unless explicitly stated otherwise in the body of this 
>> communication or the attachment thereto (if any), the information is 
>> provided on an AS-IS basis without any express or implied warranties or 
>> liabilities. To the extent you are relying on this information, you are 
>> doing so at your own risk. If you are not the intended recipient, please 
>> notify the sender immediately by replying to this message and destroy all 
>> copies of this message and any attachments. ASML is neither liable for the 
>> proper and complete transmission of the information contained in this 
>> communication, nor for any delay in its receipt.
>
>

Reply via email to