[petsc-users] Saving output and execution time
Karl Rupp
rupp at iue.tuwien.ac.at
Fri Jul 27 14:09:36 CDT 2018
Hi Fazlul,
Pass the command line option -log_view to get a detailed breakdown of
time spent in various code sections. For details, consult the manual.
Best regards,
Karli
On 07/27/2018 01:47 PM, Fazlul Huq wrote:
> Thanks Matthew.
>
> By the way, how can I find the execution time of the processor?
>
>
>
> On Thu, Jul 19, 2018 at 7:34 PM, Matthew Knepley <knepley at gmail.com
> <mailto:knepley at gmail.com>> wrote:
>
> On Thu, Jul 19, 2018 at 1:44 PM Fazlul Huq <huq2090 at gmail.com
> <mailto:huq2090 at gmail.com>> wrote:
>
> Hello all,
>
> I can run the following code with this command showing output on
> the console: ./poisson_m -ksp_view_solution
>
>
> What is the question? To put that ASCII output in a file, use
>
> -ksp_view_solution :sol.txt
>
> There is a chapter in the manual on viewing.
>
> Thanks,
>
> Matt
>
> The code is:
> static char help[] = "Solves a tridiagonal linear system.\n\n";
>
> /*T
> Concepts: KSP^basic parallel example;
> Processors: n
> T*/
>
> /*
> Include "petscksp.h" so that we can use KSP solvers. Note
> that this file
> automatically includes:
> petscsys.h - base PETSc routines petscvec.h - vectors
> petscmat.h - matrices
> petscis.h - index sets petscksp.h - Krylov
> subspace methods
> petscviewer.h - viewers petscpc.h -
> preconditioners
>
> Note: The corresponding uniprocessor example is ex1.c
> */
> #include <petscksp.h>
>
> int main(int argc,char **args)
> {
> Vec x, b, u; /* approx solution, RHS,
> exact solution */
> Mat A; /* linear system matrix */
> KSP ksp; /* linear solver context */
> PC pc; /* preconditioner context */
> PetscReal norm,tol=1000.*PETSC_MACHINE_EPSILON; /* norm
> of solution error */
> PetscErrorCode ierr;
> PetscInt i,n = 99,col[3],its,rstart,rend,nlocal;
> PetscScalar one = 1.0,hundredth = 0.001,leftbc =
> 10.001,rightbc = 15.001,value[3];
>
> ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr)
> return ierr;
> ierr = PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);CHKERRQ(ierr);
>
> /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - -
> Compute the matrix and right-hand-side vector that define
> the linear system, Ax = b.
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - */
>
> /*
> Create vectors. Note that we form 1 vector from scratch and
> then duplicate as needed. For this simple case let PETSc
> decide how
> many elements of the vector are stored on each processor.
> The second
> argument to VecSetSizes() below causes PETSc to decide.
> */
> ierr = VecCreate(PETSC_COMM_WORLD,&x);CHKERRQ(ierr);
> ierr = VecSetSizes(x,PETSC_DECIDE,n);CHKERRQ(ierr);
> ierr = VecSetFromOptions(x);CHKERRQ(ierr);
> ierr = VecDuplicate(x,&b);CHKERRQ(ierr);
> ierr = VecDuplicate(x,&u);CHKERRQ(ierr);
>
> /* Identify the starting and ending mesh points on each
> processor for the interior part of the mesh. We let PETSc
> decide
> above. */
>
> ierr = VecGetOwnershipRange(x,&rstart,&rend);CHKERRQ(ierr);
> ierr = VecGetLocalSize(x,&nlocal);CHKERRQ(ierr);
>
> /*
> Create matrix. When using MatCreate(), the matrix format can
> be specified at runtime.
>
> Performance tuning note: For problems of substantial size,
> preallocation of matrix memory is crucial for attaining good
> performance. See the matrix chapter of the users manual
> for details.
>
> We pass in nlocal as the "local" size of the matrix to
> force it
> to have the same parallel layout as the vector created above.
> */
> ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr);
> ierr = MatSetSizes(A,nlocal,nlocal,n,n);CHKERRQ(ierr);
> ierr = MatSetFromOptions(A);CHKERRQ(ierr);
> ierr = MatSetUp(A);CHKERRQ(ierr);
>
> /*
> Assemble matrix.
> The linear system is distributed across the processors by
> chunks of contiguous rows, which correspond to contiguous
> sections of the mesh on which the problem is discretized.
> For matrix assembly, each processor contributes entries for
> the part that it owns locally.
> */
>
>
> if (!rstart) {
> rstart = 1;
> i = 0; col[0] = 0; col[1] = 1; value[0] = 2.0;
> value[1] = -1.0;
> ierr =
> MatSetValues(A,1,&i,2,col,value,INSERT_VALUES);CHKERRQ(ierr);
> }
> if (rend == n) {
> rend = n-1;
> i = n-1; col[0] = n-2; col[1] = n-1; value[0] = -1.0;
> value[1] = 2.0;
> ierr =
> MatSetValues(A,1,&i,2,col,value,INSERT_VALUES);CHKERRQ(ierr);
> }
>
> /* Set entries corresponding to the mesh interior */
> value[0] = -1.0; value[1] = 2.0; value[2] = -1.0;
> for (i=rstart; i<rend; i++) {
> col[0] = i-1; col[1] = i; col[2] = i+1;
> ierr =
> MatSetValues(A,1,&i,3,col,value,INSERT_VALUES);CHKERRQ(ierr);
> }
>
> /* Assemble the matrix */
> ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
> ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
>
> /*
> Set exact solution; then compute right-hand-side vector.
> */
> ierr = VecSet(u,one);CHKERRQ(ierr);
>
> i=0;
> ierr = VecSetValues(b, 1, &i, &leftbc,
> INSERT_VALUES);CHKERRQ(ierr);
> for (i=1; i<n-1; i++){
> ierr = VecSetValues(b, 1, &i, &hundredth,
> INSERT_VALUES);CHKERRQ(ierr);
> }
> i=n-1;
> ierr = VecSetValues(b, 1, &i, &rightbc,
> INSERT_VALUES);CHKERRQ(ierr);
> ierr = VecAssemblyBegin(b);CHKERRQ(ierr);
> ierr = VecAssemblyEnd(b);CHKERRQ(ierr);
>
> // ierr = MatMult(A,u,b);CHKERRQ(ierr);
>
> /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - -
> Create the linear solver and set various options
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - */
> /*
> Create linear solver context
> */
> ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr);
>
> /*
> Set operators. Here the matrix that defines the linear system
> also serves as the preconditioning matrix.
> */
> ierr = KSPSetOperators(ksp,A,A);CHKERRQ(ierr);
>
> /*
> Set linear solver defaults for this problem (optional).
> - By extracting the KSP and PC contexts from the KSP context,
> we can then directly call any KSP and PC routines to set
> various options.
> - The following four statements are optional; all of these
> parameters could alternatively be specified at runtime via
> KSPSetFromOptions();
> */
> ierr = KSPGetPC(ksp,&pc);CHKERRQ(ierr);
> ierr = PCSetType(pc,PCJACOBI);CHKERRQ(ierr);
> ierr =
> KSPSetTolerances(ksp,1.e-7,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT);CHKERRQ(ierr);
>
> /*
> Set runtime options, e.g.,
> -ksp_type <type> -pc_type <type> -ksp_monitor -ksp_rtol
> <rtol>
> These options will override those specified above as long as
> KSPSetFromOptions() is called _after_ any other customization
> routines.
> */
> ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);
>
> /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - -
> Solve the linear system
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - */
> /*
> Solve linear system
> */
> ierr = KSPSolve(ksp,b,x);CHKERRQ(ierr);
>
> /*
> View solver info; we could instead use the option -ksp_view to
> print this info to the screen at the conclusion of KSPSolve().
> */
> ierr = KSPView(ksp,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
>
> /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - -
> Check solution and clean up
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - */
> /*
> Check the error
> */
> ierr = VecAXPY(x,-1.0,u);CHKERRQ(ierr);
> ierr = VecNorm(x,NORM_2,&norm);CHKERRQ(ierr);
> ierr = KSPGetIterationNumber(ksp,&its);CHKERRQ(ierr);
> if (norm > tol) {
> ierr = PetscPrintf(PETSC_COMM_WORLD,"Norm of error %g,
> Iterations %D\n",(double)norm,its);CHKERRQ(ierr);
> }
>
> /*
> Free work space. All PETSc objects should be destroyed
> when they
> are no longer needed.
> */
> ierr = VecDestroy(&x);CHKERRQ(ierr); ierr =
> VecDestroy(&u);CHKERRQ(ierr);
> ierr = VecDestroy(&b);CHKERRQ(ierr); ierr =
> MatDestroy(&A);CHKERRQ(ierr);
> ierr = KSPDestroy(&ksp);CHKERRQ(ierr);
>
> /*
> Always call PetscFinalize() before exiting a program.
> This routine
> - finalizes the PETSc libraries as well as MPI
> - provides summary and diagnostic information if certain
> runtime
> options are chosen (e.g., -log_view).
> */
> ierr = PetscFinalize();
> return ierr;
> }
>
>
> Now I am trying to save this output in a file (say in a .csv
> file) at runtime along with execution time but I can't.
>
> Any suggestion please!
>
> Sincerely,
> Huq
>
> --
>
> Fazlul Huq
> Graduate Research Assistant
> Department of Nuclear, Plasma & Radiological Engineering (NPRE)
> University of Illinois at Urbana-Champaign (UIUC)
> E-mail: huq2090 at gmail.com <mailto:huq2090 at gmail.com>
>
>
>
> --
> 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
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.caam.rice.edu/%7Emk51/>
>
>
More information about the petsc-users
mailing list