On Apr 19, 2011, at 10:08 PM, Vijay S. Mahadevan wrote: >> 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 ?
My mistake. Yes if you call MatZeroEntries() on a matrix you have not started putting values in it will not destroy the preallocation information. Barry > 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. >> >>
