Oh, ok, i have verified that matrix assembly is not taking so long. The bottleneck was something else. But now I have encountered a different, more important problem regarding the solver itself, which I suppose I should ask in a different thread.
Thank you. Shitij On 30 July 2011 21:56, Matthew Knepley <knepley at gmail.com> wrote: > On Sat, Jul 30, 2011 at 11:11 AM, Shitij Bhargava <shitij.cse at > gmail.com>wrote: > >> Hi !! >> >> I have just started using SLEPc/PETSc. >> >> The problem that I am trying to solve is that I have some routines >> calculating one row at a time of a matrix, which I want to insert in some >> sparse matrix representation, and then find the next row, insert it, and so >> on. (This is being done to avoid the need to have one big NxN matrix in >> memory).The matrix is also symmetric, so the row that the subroutines >> produce is such that any non-zero element can be present only in that part >> of the row corresponding to the upper triangle of the matrix. (all others >> are zero). After I have the matrix in sparse format, I want to find all the >> eigenvalues and eigenvectors. >> >> Till now I have been using the SeqAij matrix and MatSetValues method with >> preallocation set appropriately, but I am not satisfied with its performance >> (the way I am doing it). When one row is produced, I insert it into the AIJ >> matrix, so there are total of N calls to MatSetValues. Also even though the >> matrix is symmetric, i have to enter the full matrix, as otherwise the >> eigensolver doesnt seem to produce the right answer (Why ? I set the problem >> type to EPS_HEP, but still it requires me to store the full matrix ? It is >> written in documentation that problem type should always be specified so >> that the eigensolver can take advantage of it (symmetry in this case), but >> considering that I still have to store the full matrix, it meant 'advantage' >> only in time, not memory ?....when I set the problem type to EPS_HEP, it >> means that it will take only the upper or lower triangle right ? why should >> it require both ? Is this because the matrix type is not symmetric, unlike >> SBAIJ ?) >> > > You must set the type to SBAIJ in order to enter only the symmetric part. > > >> So, if I use SBAIJ and say, enter some bs rows at a time into the SBAIJ >> matrix, will it be faster ? Also, in that case would I still have to enter >> both upper and lower triangle or only one (I hope only one, otherwise the >> 'S' doesnt make sense to me, but in that case, which one ? The eigensolver >> doesnt give me an option to specify if the upper or lower triangle is stored >> in the matrix in case the problem type is EPS_HEP). Will the eigensolver >> produce the right answers in this case ? (say, storing only upper triangle >> in SBAIJ, instead of both) >> > > I do not think it will be noticeably faster. Value entry is usually not a > large part of the time. YOu can check this using -log_summary. > > > http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MATSEQSBAIJ.html#MATSEQSBAIJ > > show that only the upper triangle is stored. > > >> Otherwise, while using AIJ, if I insert multiple rows at a time instead of >> just one (thus reducing the number of calls to MatSetValues, at the cost of >> more memory), will this be much beneficial ? (Please note that the matrix is >> not very sparse) >> > > I cannot say anything until we see the timing from -log_summary. It is very > rare that matrix construction is a factor, > if it has been properly allocated, which you can check using -info. > > Matt > > >> Thank you very much in advance !!! >> >> >> Shitij >> > > > > -- > 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 > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110803/a9104490/attachment.htm>
