[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