|
Teuchos - Trilinos Tools Package Version of the Day
|
00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Teuchos: Common Tools Package 00005 // Copyright (2004) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // Redistribution and use in source and binary forms, with or without 00011 // modification, are permitted provided that the following conditions are 00012 // met: 00013 // 00014 // 1. Redistributions of source code must retain the above copyright 00015 // notice, this list of conditions and the following disclaimer. 00016 // 00017 // 2. Redistributions in binary form must reproduce the above copyright 00018 // notice, this list of conditions and the following disclaimer in the 00019 // documentation and/or other materials provided with the distribution. 00020 // 00021 // 3. Neither the name of the Corporation nor the names of the 00022 // contributors may be used to endorse or promote products derived from 00023 // this software without specific prior written permission. 00024 // 00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY 00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE 00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00036 // 00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00038 // 00039 // *********************************************************************** 00040 // @HEADER 00041 00042 #ifndef TEUCHOS_TIMEMONITOR_HPP 00043 #define TEUCHOS_TIMEMONITOR_HPP 00044 00045 00065 #include "Teuchos_ConfigDefs.hpp" 00066 #include "Teuchos_Comm.hpp" 00067 #include "Teuchos_PerformanceMonitorBase.hpp" 00068 #include "Teuchos_Time.hpp" 00069 00071 #define TEUCHOS_TIMER(funcName, strName) \ 00072 static Teuchos::Time& funcName() \ 00073 {static Teuchos::RCP<Time> rtn = \ 00074 Teuchos::TimeMonitor::getNewCounter(strName); return *rtn;} 00075 00076 00082 #define TEUCHOS_FUNC_TIME_MONITOR_DIFF( FUNCNAME, DIFF ) \ 00083 static Teuchos::RCP<Teuchos::Time> DIFF ## blabla_localTimer; \ 00084 if(!DIFF ## blabla_localTimer.get()) { \ 00085 std::ostringstream oss; \ 00086 oss << FUNCNAME; \ 00087 DIFF ## blabla_localTimer = Teuchos::TimeMonitor::getNewCounter(oss.str()); \ 00088 } \ 00089 Teuchos::TimeMonitor DIFF ## blabla_localTimeMonitor(*DIFF ## blabla_localTimer) 00090 00091 00114 #define TEUCHOS_FUNC_TIME_MONITOR( FUNCNAME ) \ 00115 TEUCHOS_FUNC_TIME_MONITOR_DIFF( FUNCNAME, main ) 00116 00117 00118 namespace Teuchos { 00119 00131 typedef std::map<std::string, std::vector<std::pair<double, double> > > stat_map_type; 00132 00156 class TEUCHOS_LIB_DLL_EXPORT TimeMonitor : public PerformanceMonitorBase<Time> 00157 { 00158 public: 00159 00162 00171 TimeMonitor (Time& timer, bool reset=false); 00172 00174 ~TimeMonitor(); 00176 00185 static RCP<Time> getNewTimer (const std::string& name) { 00186 return getNewCounter (name); 00187 } 00188 00195 static void zeroOutTimers(); 00196 00299 static void 00300 computeGlobalTimerStatistics (stat_map_type& statData, 00301 std::vector<std::string>& statNames, 00302 Ptr<const Comm<int> > comm, 00303 const ECounterSetOp setOp=Intersection); 00304 00333 static void 00334 computeGlobalTimerStatistics (stat_map_type& statData, 00335 std::vector<std::string>& statNames, 00336 const ECounterSetOp setOp=Intersection); 00337 00396 static void 00397 summarize (Ptr<const Comm<int> > comm, 00398 std::ostream &out=std::cout, 00399 const bool alwaysWriteLocal=false, 00400 const bool writeGlobalStats=true, 00401 const bool writeZeroTimers=true, 00402 const ECounterSetOp setOp=Intersection); 00403 00420 static void 00421 summarize (std::ostream& out=std::cout, 00422 const bool alwaysWriteLocal=false, 00423 const bool writeGlobalStats=true, 00424 const bool writeZeroTimers=true, 00425 const ECounterSetOp setOp=Intersection); 00426 00457 static void 00458 report (Ptr<const Comm<int> > comm, 00459 std::ostream& out, 00460 const RCP<ParameterList>& params=null); 00461 00466 static void 00467 report (std::ostream& out, 00468 const RCP<ParameterList>& params=null); 00469 00471 static RCP<const ParameterList> getValidReportParameters (); 00472 00473 private: 00482 static void summarizeToYaml (Ptr<const Comm<int> > comm, std::ostream& out); 00483 00488 static void summarizeToYaml (std::ostream& out); 00489 00494 enum ETimeMonitorReportFormat { 00495 REPORT_FORMAT_YAML, 00496 REPORT_FORMAT_TABLE 00497 }; 00498 00503 static void setReportFormatParameter (ParameterList& plist); 00504 00509 static void setSetOpParameter (ParameterList& plist); 00510 00525 static void setReportParameters (const RCP<ParameterList>& params); 00526 00528 00529 00531 static ETimeMonitorReportFormat reportFormat_; 00532 00534 static ECounterSetOp setOp_; 00535 00537 static bool alwaysWriteLocal_; 00538 00541 static bool writeGlobalStats_; 00542 00544 static bool writeZeroTimers_; 00546 00551 static bool setParams_; 00552 }; 00553 00554 00555 } // namespace Teuchos 00556 00557 00558 #endif // TEUCHOS_TIMEMONITOR_H
1.7.4