Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to account for additional CPU time per event #4213

Merged
merged 1 commit into from Jun 13, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion FWCore/Services/interface/Timing.h
Expand Up @@ -9,6 +9,7 @@
//

#include "DataFormats/Provenance/interface/ProvenanceFwd.h"
#include "FWCore/Utilities/interface/TimingServiceBase.h"
#include <atomic>

namespace edm {
Expand All @@ -21,13 +22,15 @@ namespace edm {
class ModuleCallingContext;

namespace service {
class Timing {
class Timing : public TimingServiceBase {
public:
Timing(ParameterSet const&,ActivityRegistry&);
~Timing();

static void fillDescriptions(edm::ConfigurationDescriptions & descriptions);

virtual void addToCPUTime(StreamID id, double iTime) override;

private:

void postBeginJob();
Expand Down
2 changes: 2 additions & 0 deletions FWCore/Services/plugins/Module.cc
Expand Up @@ -45,3 +45,5 @@ DEFINE_FWK_SERVICE_MAKER(EnableFloatingPointExceptions,edm::serviceregistry::All
DEFINE_FWK_SERVICE_MAKER(LoadAllDictionaries,edm::serviceregistry::ParameterSetMaker<LoadAllDictionaries>);
typedef edm::serviceregistry::AllArgsMaker<edm::JobReport,JobReportService> JobReportMaker;
DEFINE_FWK_SERVICE_MAKER(JobReportService, JobReportMaker);
typedef edm::serviceregistry::AllArgsMaker<edm::TimingServiceBase,Timing> TimingMaker;
DEFINE_FWK_SERVICE_MAKER(Timing, TimingMaker);
6 changes: 6 additions & 0 deletions FWCore/Services/src/Timing.cc
Expand Up @@ -103,6 +103,12 @@ namespace edm {

Timing::~Timing() {
}

void Timing::addToCPUTime(StreamID id, double iTime) {
//For accounting purposes we effectively can saw we started earlier
curr_events_cpu_[id.value()] -= iTime;
}


void Timing::fillDescriptions(ConfigurationDescriptions& descriptions) {
ParameterSetDescription desc;
Expand Down
49 changes: 49 additions & 0 deletions FWCore/Utilities/interface/TimingServiceBase.h
@@ -0,0 +1,49 @@
#ifndef FWCore_Utilities_TimingServiceBase_h
#define FWCore_Utilities_TimingServiceBase_h
// -*- C++ -*-
//
// Package: FWCore/Utilities
// Class : TimingServiceBase
//
/**\class TimingServiceBase TimingServiceBase.h "TimingServiceBase.h"

Description: Base class for Timing Services

Usage:
Provides an interface to allow

*/
//
// Original Author: Chris Jones
// Created: Wed, 11 Jun 2014 14:50:33 GMT
//

// system include files

// user include files
#include "FWCore/Utilities/interface/StreamID.h"

// forward declarations
namespace edm {
class TimingServiceBase
{

public:
TimingServiceBase();
virtual ~TimingServiceBase();

// ---------- member functions ---------------------------
///Extra CPU time used by a job but not seen by cmsRun
/// The value should be in seconds.
/// This function is safe to call from multiple threads
virtual void addToCPUTime(StreamID id, double iTime) = 0;

private:
TimingServiceBase(const TimingServiceBase&) =delete; // stop default

const TimingServiceBase& operator=(const TimingServiceBase&) =delete; // stop default
};
}


#endif
32 changes: 32 additions & 0 deletions FWCore/Utilities/src/TimingServiceBase.cc
@@ -0,0 +1,32 @@
// -*- C++ -*-
//
// Package: Subsystem/Package
// Class : TimingServiceBase
//
// Implementation:
// [Notes on implementation]
//
// Original Author: Chris Jones
// Created: Wed, 11 Jun 2014 15:08:00 GMT
//

// system include files

// user include files
#include "FWCore/Utilities/interface/TimingServiceBase.h"

using namespace edm;
//
// constants, enums and typedefs
//

//
// constructors and destructor
//
TimingServiceBase::TimingServiceBase()
{
}

TimingServiceBase::~TimingServiceBase()
{
}