[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