http://www.mcs.anl.gov/petsc/documentation/faq.html#efficient-assembly


On Jul 12, 2013, at 8:46 AM, "Salko, Robert K." <salk...@ornl.gov> wrote:

> I'm attempting to implement PETSc for the parallel solution of a large sparse 
> matrix in a computer program I work with. The program is written in Fortran. 
> I currently have been able to get the program working using PETSc and giving 
> correct results, but the issue is its performance. It is much slower than 
> solving the matrix in serial. I seem to have narrowed the major PETSc time 
> sink down to actually constructing the matrix (getting the matrix terms into 
> the PETSc matrix). Specifically, it is hanging for a very long time to do 
> this step:
> 
>  do values_counter = 1, total_values
>     call 
> MatSetValues(A,1,coeff_row(values_counter),1,coeff_col(values_counter),coeff(values_counter),INSERT_VALUES,petsc_err)
>  end do
> 
> Building the right-hand-side vector for this matrix is much faster:
> 
>  call VecSetValues(y,nrows,index_of_values,rhs_values,INSERT_VALUES,petsc_err)
> 
> The difference, as I see it, is that I'm sending the matrix coefficients to 
> the PETSc matrix one element at a time whereas with the RHS vector, I'm 
> sending all the values in one shot. There are 7 times more elements in the 
> matrix than the vector, so I get that it will take longer. So I did some 
> timing studies using MPI_Wtime and putting the matrix values into the PETSc 
> matrix is taking 4,800 times longer than putting the values into the RHS 
> vector.
> 
> Then there is the actual assembly of the matrix that you have to do using 
> MatAssemblyBegin and MatAssemblyEnd. That takes even longer than assigning 
> values to the matrix. More than twice as long. Actually solving the matrix 
> and then distributing the solution back to the domains in the program takes 
> about as much time as the RHS vector assignment step, so that is nearly 5,000 
> times faster than putting data into PETSc. Surely there must be something 
> wrong that I'm doing with the assignment of data into PETSc.
> 
> So my question is, is there a more efficient way to build the matrix? I 
> already have my coefficients stored in AIJ form in the program. I understand 
> that PETSc uses AIJ. Can't I somehow just send the three AIJ vectors to PETSc 
> in one shot?
> 
> Thanks,
> Bob

Reply via email to