|
Teuchos Package Browser (Single Doxygen Collection)
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 00067 #include "Teuchos_ConfigDefs.hpp" 00068 #include "Teuchos_Comm.hpp" 00069 #include "Teuchos_PerformanceMonitorBase.hpp" 00070 #include "Teuchos_Time.hpp" 00071 00073 #define TEUCHOS_TIMER(funcName, strName) \ 00074 static Teuchos::Time& funcName() \ 00075 {static Teuchos::RCP<Time> rtn = \ 00076 Teuchos::TimeMonitor::getNewCounter(strName); return *rtn;} 00077 00078 00084 #define TEUCHOS_FUNC_TIME_MONITOR_DIFF( FUNCNAME, DIFF ) \ 00085 static Teuchos::RCP<Teuchos::Time> DIFF ## blabla_localTimer; \ 00086 if(!DIFF ## blabla_localTimer.get()) { \ 00087 std::ostringstream oss; \ 00088 oss << FUNCNAME; \ 00089 DIFF ## blabla_localTimer = Teuchos::TimeMonitor::getNewCounter(oss.str()); \ 00090 } \ 00091 Teuchos::TimeMonitor DIFF ## blabla_localTimeMonitor(*DIFF ## blabla_localTimer) 00092 00093 00116 #define TEUCHOS_FUNC_TIME_MONITOR( FUNCNAME ) \ 00117 TEUCHOS_FUNC_TIME_MONITOR_DIFF( FUNCNAME, main ) 00118 00119 00120 namespace Teuchos { 00121 00133 typedef std::map<std::string, std::vector<std::pair<double, double> > > stat_map_type; 00134 00161 class TEUCHOS_LIB_DLL_EXPORT TimeMonitor : public PerformanceMonitorBase<Time> 00162 { 00163 public: 00164 00167 00176 TimeMonitor (Time& timer, bool reset=false); 00177 00179 ~TimeMonitor(); 00181 00190 static RCP<Time> getNewTimer (const std::string& name) { 00191 return getNewCounter (name); 00192 } 00193 00200 static void zeroOutTimers(); 00201 00318 static void 00319 computeGlobalTimerStatistics (stat_map_type& statData, 00320 std::vector<std::string>& statNames, 00321 Ptr<const Comm<int> > comm, 00322 const ECounterSetOp setOp=Intersection, 00323 const std::string& filter=""); 00324 00353 static void 00354 computeGlobalTimerStatistics (stat_map_type& statData, 00355 std::vector<std::string>& statNames, 00356 const ECounterSetOp setOp=Intersection, 00357 const std::string& filter=""); 00358 00421 static void 00422 summarize (Ptr<const Comm<int> > comm, 00423 std::ostream &out=std::cout, 00424 const bool alwaysWriteLocal=false, 00425 const bool writeGlobalStats=true, 00426 const bool writeZeroTimers=true, 00427 const ECounterSetOp setOp=Intersection, 00428 const std::string& filter=""); 00429 00446 static void 00447 summarize (std::ostream& out=std::cout, 00448 const bool alwaysWriteLocal=false, 00449 const bool writeGlobalStats=true, 00450 const bool writeZeroTimers=true, 00451 const ECounterSetOp setOp=Intersection, 00452 const std::string& filter=""); 00453 00534 static void 00535 report (Ptr<const Comm<int> > comm, 00536 std::ostream& out, 00537 const std::string& filter, 00538 const RCP<ParameterList>& params=null); 00539 00544 static void 00545 report (Ptr<const Comm<int> > comm, 00546 std::ostream& out, 00547 const RCP<ParameterList>& params=null); 00548 00553 static void 00554 report (std::ostream& out, 00555 const std::string& filter, 00556 const RCP<ParameterList>& params=null); 00557 00562 static void 00563 report (std::ostream& out, 00564 const RCP<ParameterList>& params=null); 00565 00567 static RCP<const ParameterList> getValidReportParameters (); 00568 00569 private: 00574 enum ETimeMonitorReportFormat { 00575 REPORT_FORMAT_YAML, 00576 REPORT_FORMAT_TABLE 00577 }; 00578 00583 enum ETimeMonitorYamlFormat { 00584 YAML_FORMAT_COMPACT, 00585 YAML_FORMAT_SPACIOUS 00586 }; 00587 00602 static void 00603 summarizeToYaml (Ptr<const Comm<int> > comm, 00604 std::ostream& out, 00605 const ETimeMonitorYamlFormat yamlStyle, 00606 const std::string& filter=""); 00607 00612 static void 00613 summarizeToYaml (std::ostream& out, 00614 const ETimeMonitorYamlFormat yamlStyle, 00615 const std::string& filter=""); 00616 00621 static void setReportFormatParameter (ParameterList& plist); 00622 00627 static void setYamlFormatParameter (ParameterList& plist); 00628 00633 static void setSetOpParameter (ParameterList& plist); 00634 00649 static void setReportParameters (const RCP<ParameterList>& params); 00650 00652 00653 00655 static ETimeMonitorReportFormat reportFormat_; 00656 00659 static ETimeMonitorYamlFormat yamlStyle_; 00660 00662 static ECounterSetOp setOp_; 00663 00665 static bool alwaysWriteLocal_; 00666 00669 static bool writeGlobalStats_; 00670 00672 static bool writeZeroTimers_; 00674 00679 static bool setParams_; 00680 }; 00681 00682 00683 } // namespace Teuchos 00684 00685 00686 #endif // TEUCHOS_TIMEMONITOR_H
1.7.6.1