Go to the documentation of this file.00001
00002
00003
00004
00005 #include "GaudiKernel/ToolFactory.h"
00006 #include "GaudiKernel/RndmGenerators.h"
00007 #include "GaudiKernel/IRndmGenSvc.h"
00008
00009
00010 #include "SequencerTimerTool.h"
00011
00012
00013
00014
00015
00016
00017
00018
00019 DECLARE_TOOL_FACTORY(SequencerTimerTool)
00020
00021
00022
00023
00024 SequencerTimerTool::SequencerTimerTool( const std::string& type,
00025 const std::string& name,
00026 const IInterface* parent )
00027 : GaudiTool ( type, name , parent )
00028 , m_indent( 0 )
00029 , m_normFactor( 0.001 )
00030 {
00031 declareInterface<ISequencerTimerTool>(this);
00032
00033 m_shots = 3500000 ;
00034 declareProperty( "shots" , m_shots );
00035 declareProperty( "Normalised" , m_normalised = false );
00036 declareProperty( "GlobalTiming" , m_globalTiming = false );
00037 declareProperty( "NameSize" , m_headerSize = 30, "Number of characters to be used in algorithm name column" );
00038 }
00039
00040
00041
00042 SequencerTimerTool::~SequencerTimerTool() {}
00043
00044
00045
00046
00047
00048 StatusCode SequencerTimerTool::initialize ( ) {
00049 GaudiTool::initialize();
00050 double sum = 0;
00051 TimerForSequencer norm( "normalize", m_normFactor );
00052 norm.start();
00053 IRndmGenSvc* rsvc = svc<IRndmGenSvc>( "RndmGenSvc", true );
00054 {
00055 Rndm::Numbers gauss;
00056 gauss.initialize( rsvc , Rndm::Gauss(0.,1.0) ).ignore();
00057 unsigned int shots = m_shots;
00058 while( 0 < --shots ) { sum += gauss() * sum ; }
00059 }
00060 norm.stop();
00061 double time = norm.lastCpu();
00062 m_speedRatio = 1./time;
00063 info() << "This machine has a speed about "
00064 << format( "%6.2f", 1000.*m_speedRatio)
00065 << " times the speed of a 2.8 GHz Xeon." << endmsg ;
00066 if ( m_normalised ) {
00067 m_normFactor = m_speedRatio;
00068 }
00069 return StatusCode::SUCCESS;
00070 }
00071
00072
00073
00074 StatusCode SequencerTimerTool::finalize ( ) {
00075
00076 std::string line(m_headerSize + 68, '-');
00077 info() << line << endmsg
00078 << "This machine has a speed about "
00079 << format( "%6.2f", 1000.*m_speedRatio)
00080 << " times the speed of a 2.8 GHz Xeon.";
00081 if ( m_normalised ) info() <<" *** All times are renormalized ***";
00082 info() << endmsg << TimerForSequencer::header( m_headerSize ) << endmsg
00083 << line << endmsg;
00084
00085 std::string lastName = "";
00086 for ( unsigned int kk=0 ; m_timerList.size() > kk ; kk++ ) {
00087 if ( lastName == m_timerList[kk].name() ) continue;
00088 lastName = m_timerList[kk].name();
00089 info() << m_timerList[kk] << endmsg;
00090 }
00091 info() << line << endmsg;
00092
00093 return GaudiTool::finalize();
00094 }
00095
00096
00097
00098
00099 int SequencerTimerTool::indexByName ( std::string name ) {
00100 std::string::size_type beg = name.find_first_not_of(" \t");
00101 std::string::size_type end = name.find_last_not_of(" \t");
00102 std::string temp = name.substr( beg, end-beg+1 );
00103 for ( unsigned int kk=0 ; m_timerList.size() > kk ; kk++ ) {
00104 beg = m_timerList[kk].name().find_first_not_of(" \t");
00105 end = m_timerList[kk].name().find_last_not_of(" \t");
00106 if ( m_timerList[kk].name().substr(beg,end-beg+1) == temp ) return kk;
00107 }
00108 return -1;
00109 }
00110