[petsc-users] Saving output and execution time

Fazlul Huq huq2090 at gmail.com
Fri Jul 27 14:11:54 CDT 2018


Thanks Karl!


On Fri, Jul 27, 2018 at 2:09 PM, Karl Rupp <rupp at iue.tuwien.ac.at> wrote:

> 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/>
>>
>>
>>


-- 

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180727/c1945980/attachment.html>


More information about the petsc-users mailing list