Teuchos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
comm/example/TimeMonitor/cxx_main.cpp
Go to the documentation of this file.
1/*
2// @HEADER
3// ***********************************************************************
4//
5// Teuchos: Common Tools Package
6// Copyright (2004) Sandia Corporation
7//
8// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9// license for use of this work by or on behalf of the U.S. Government.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39//
40// ***********************************************************************
41// @HEADER
42*/
43
45#include "Teuchos_Version.hpp"
46
47#ifdef HAVE_MPI
48#include <mpi.h>
49#endif
50
51using namespace Teuchos;
52
53// Global Timers
54RCP<Time> CompTime = TimeMonitor::getNewCounter("Computational Time");
55RCP<Time> FactTime = TimeMonitor::getNewCounter("Factorial Time");
56
57// Quadratic function declaration.
58double quadFunc( double x );
59
60// Factorial function declaration.
61double factFunc( int x );
62
63int main(int argc, char* argv[])
64{
65 std::cout << Teuchos::Teuchos_Version() << std::endl << std::endl;
66
67 int i;
68 double x;
69
70#ifdef HAVE_MPI
71 MPI_Init(&argc, &argv);
72#endif
73
74 // Apply the quadratic function.
75 for( i=-100; i<100; i++ ) {
76 x = quadFunc( (double) i );
77 (void)x; // Not used!
78 }
79
80 // Apply the factorial function.
81 for( i=0; i<100; i++ ) {
82 x = factFunc( i );
83 (void)x; // Not used!
84 }
85
86 // Get a summary from the time monitor.
88
89#ifdef HAVE_MPI
90 MPI_Finalize();
91#endif
92
93 return 0;
94}
95
96/* Evaluate a quadratic function at point x */
97double quadFunc( double x )
98{
99 // Construct a local time monitor, this starts the CompTime timer and will stop when leaving scope.
100 Teuchos::TimeMonitor LocalTimer(*CompTime);
101
102 // Evaluate the quadratic function.
103 return ( x*x - 1.0 );
104}
105
106/* Compute the factorial of x */
107double factFunc( int x )
108{
109 // Construct a local time monitor, this starts the FactTime timer and will stop when leaving scope.
110 Teuchos::TimeMonitor LocalTimer(*FactTime);
111
112 // Special returns for specific cases.
113 if( x == 0 ) return 0.0;
114 if( x == 1 ) return 1.0;
115
116 // Evaluate the factorial function.
117 return ( (double) x * factFunc(x-1) );
118}
Scope guard for Teuchos::Time, with MPI collective timer reporting.
Smart reference counting pointer class for automatic garbage collection.
Scope guard for Time, that can compute MPI collective timer statistics.
static void summarize(Ptr< const Comm< int > > comm, std::ostream &out=std::cout, const bool alwaysWriteLocal=false, const bool writeGlobalStats=true, const bool writeZeroTimers=true, const ECounterSetOp setOp=Intersection, const std::string &filter="", const bool ignoreZeroTimers=false)
Print summary statistics for all timers on the given communicator.
RCP< Time > FactTime
double factFunc(int x)
RCP< Time > CompTime
double quadFunc(double x)
int main()
Definition: evilMain.cpp:75
std::string Teuchos_Version()