CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
edm::service::EnableFloatingPointExceptions Class Reference

#include <EnableFloatingPointExceptions.h>

Public Types

typedef int fpu_flags_type
 

Public Member Functions

 EnableFloatingPointExceptions (ParameterSet const &pset, ActivityRegistry &registry)
 
void postEndJob ()
 
void postModule (ModuleDescription const &description)
 
void postModuleBeginJob (ModuleDescription const &description)
 
void postModuleBeginLumi (ModuleDescription const &description)
 
void postModuleBeginRun (ModuleDescription const &description)
 
void postModuleEndJob (ModuleDescription const &description)
 
void postModuleEndLumi (ModuleDescription const &description)
 
void postModuleEndRun (ModuleDescription const &description)
 
void preModule (ModuleDescription const &description)
 
void preModuleBeginJob (ModuleDescription const &description)
 
void preModuleBeginLumi (ModuleDescription const &description)
 
void preModuleBeginRun (ModuleDescription const &description)
 
void preModuleEndJob (ModuleDescription const &description)
 
void preModuleEndLumi (ModuleDescription const &description)
 
void preModuleEndRun (ModuleDescription const &description)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

void echoState () const
 
void enableAndDisableExcept (fpu_flags_type target)
 
void establishModuleEnvironments (ParameterSet const &pset)
 
void postActions (ModuleDescription const &description, char const *debugInfo)
 
void preActions (ModuleDescription const &description, char const *debugInfo)
 
void setPrecision (bool precisionDouble)
 

Private Attributes

fpu_flags_type defaultState_
 
fpu_flags_type fpuState_
 
bool reportSettings_
 
std::map< std::string,
fpu_flags_type
stateMap_
 
std::stack< fpu_flags_typestateStack_
 

Detailed Description

Description: This service gives cmsRun users the ability to configure the behavior of the Floating Point (FP) environment. There are two separate aspects of the FP environment this service can control:

1. floating-point exceptions (on a module by module basis if desired)
2. precision control on x87 FP processors.

If you do not use the service at all, floating point exceptions will not be trapped anywhere (FP exceptions will not cause a crash). Add something like the following to the configuration file to enable to the exceptions:

process.EnableFloatingPointExceptions = cms.Service("EnableFloatingPointExceptions", moduleNames = cms.untracked.vstring( 'default', 'sendMessages1', 'sendMessages2' ), default = cms.untracked.PSet( enableOverFlowEx = cms.untracked.bool(False), enableDivByZeroEx = cms.untracked.bool(False), enableInvalidEx = cms.untracked.bool(False), enableUnderFlowEx = cms.untracked.bool(False) ), sendMessages1 = cms.untracked.PSet( enableOverFlowEx = cms.untracked.bool(False), enableDivByZeroEx = cms.untracked.bool(True), enableInvalidEx = cms.untracked.bool(False), enableUnderFlowEx = cms.untracked.bool(False) ), sendMessages2 = cms.untracked.PSet( enableOverFlowEx = cms.untracked.bool(False), enableDivByZeroEx = cms.untracked.bool(False), enableInvalidEx = cms.untracked.bool(True), enableUnderFlowEx = cms.untracked.bool(False) ) )

In this example, the "Divide By Zero" exception is enabled only for the module with label "sendMessages1", the "Invalid" exception is enabled only for the module with label sendMessages2 and no floating point exceptions are otherwise enabled.

The defaults for these options are currently all false. (in an earlier version DivByZero, Invalid, and Overflow defaulted to true, we hope to return to those defaults someday when the frequency of such exceptions has decreased)

Enabling exceptions is very useful if you are trying to track down where a floating point value of 'nan' or 'inf' is being generated and is even better if the goal is to eliminate them.

One can also control the precision of floating point operations in x87 FP processors as follows:

process.EnableFloatingPointExceptions = cms.Service("EnableFloatingPointExceptions", setPrecisionDouble = cms.untracked.bool(True) )

If set true (the default if the service is used), the floating precision in the x87 math processor will be set to round results of addition, subtraction, multiplication, division, and square root to 64 bits after each operation instead of the x87 default, which is 80 bits for values in registers (this is the default you get if this service is not used at all).

The precision control only affects Intel and AMD 32 bit CPUs under LINUX. We have not implemented precision control in the service for other CPUs yet (some other CPUs round to 64 bits by default and some other CPUs do not allow control of the precision of floating point calculations, the behavior of other CPUs may need more study in the future).

Definition at line 98 of file EnableFloatingPointExceptions.h.

Member Typedef Documentation

Definition at line 100 of file EnableFloatingPointExceptions.h.

Constructor & Destructor Documentation

edm::service::EnableFloatingPointExceptions::EnableFloatingPointExceptions ( ParameterSet const &  pset,
ActivityRegistry registry 
)

Definition at line 78 of file EnableFloatingPointExceptions.cc.

References defaultState_, echoState(), enableAndDisableExcept(), establishModuleEnvironments(), fpuState_, edm::ParameterSet::getUntrackedParameter(), postEndJob(), postModule(), postModuleBeginJob(), postModuleBeginLumi(), postModuleBeginRun(), postModuleEndJob(), postModuleEndLumi(), postModuleEndRun(), preModule(), preModuleBeginJob(), preModuleBeginLumi(), preModuleBeginRun(), preModuleEndJob(), preModuleEndLumi(), preModuleEndRun(), reportSettings_, setPrecision(), stateStack_, edm::ActivityRegistry::watchPostEndJob(), edm::ActivityRegistry::watchPostModule(), edm::ActivityRegistry::watchPostModuleBeginJob(), edm::ActivityRegistry::watchPostModuleBeginLumi(), edm::ActivityRegistry::watchPostModuleBeginRun(), edm::ActivityRegistry::watchPostModuleEndJob(), edm::ActivityRegistry::watchPostModuleEndLumi(), edm::ActivityRegistry::watchPostModuleEndRun(), edm::ActivityRegistry::watchPreModule(), edm::ActivityRegistry::watchPreModuleBeginJob(), edm::ActivityRegistry::watchPreModuleBeginLumi(), edm::ActivityRegistry::watchPreModuleBeginRun(), edm::ActivityRegistry::watchPreModuleEndJob(), edm::ActivityRegistry::watchPreModuleEndLumi(), and edm::ActivityRegistry::watchPreModuleEndRun().

79  :
80  fpuState_(0),
81  defaultState_(0),
82  stateMap_(),
83  stateStack_(),
84  reportSettings_(false) {
85 
86  reportSettings_ = pset.getUntrackedParameter<bool>("reportSettings", false);
87  bool precisionDouble = pset.getUntrackedParameter<bool>("setPrecisionDouble", true);
88 
89  if(reportSettings_) {
90  LogVerbatim("FPE_Enable") << "\nSettings in EnableFloatingPointExceptions constructor";
91  echoState();
92  }
93 
95 
99 
100  setPrecision(precisionDouble);
101 
102  // Note that we must watch all of the transitions even if there are no module specific settings.
103  // This is because the floating point environment may be modified by code outside of this service.
104  registry.watchPostEndJob(this, &EnableFloatingPointExceptions::postEndJob);
105 
106  registry.watchPreModuleBeginJob(this, &EnableFloatingPointExceptions::preModuleBeginJob);
107  registry.watchPostModuleBeginJob(this, &EnableFloatingPointExceptions::postModuleBeginJob);
108  registry.watchPreModuleEndJob(this, &EnableFloatingPointExceptions::preModuleEndJob);
109  registry.watchPostModuleEndJob(this, &EnableFloatingPointExceptions::postModuleEndJob);
110 
111  registry.watchPreModuleBeginRun(this, &EnableFloatingPointExceptions::preModuleBeginRun);
112  registry.watchPostModuleBeginRun(this, &EnableFloatingPointExceptions::postModuleBeginRun);
113  registry.watchPreModuleEndRun(this, &EnableFloatingPointExceptions::preModuleEndRun);
114  registry.watchPostModuleEndRun(this, &EnableFloatingPointExceptions::postModuleEndRun);
115 
116  registry.watchPreModuleBeginLumi(this, &EnableFloatingPointExceptions::preModuleBeginLumi);
117  registry.watchPostModuleBeginLumi(this, &EnableFloatingPointExceptions::postModuleBeginLumi);
118  registry.watchPreModuleEndLumi(this, &EnableFloatingPointExceptions::preModuleEndLumi);
119  registry.watchPostModuleEndLumi(this, &EnableFloatingPointExceptions::postModuleEndLumi);
120 
121  registry.watchPreModule(this, &EnableFloatingPointExceptions::preModule);
122  registry.watchPostModule(this, &EnableFloatingPointExceptions::postModule);
123  }
void preModuleEndRun(ModuleDescription const &description)
void postModuleEndLumi(ModuleDescription const &description)
void postModuleEndRun(ModuleDescription const &description)
void postModuleBeginJob(ModuleDescription const &description)
void preModuleEndJob(ModuleDescription const &description)
void preModuleBeginJob(ModuleDescription const &description)
void postModuleBeginLumi(ModuleDescription const &description)
std::map< std::string, fpu_flags_type > stateMap_
void preModuleBeginLumi(ModuleDescription const &description)
void postModule(ModuleDescription const &description)
void preModuleBeginRun(ModuleDescription const &description)
void preModule(ModuleDescription const &description)
void postModuleBeginRun(ModuleDescription const &description)
void preModuleEndLumi(ModuleDescription const &description)
void postModuleEndJob(ModuleDescription const &description)

Member Function Documentation

void edm::service::EnableFloatingPointExceptions::echoState ( ) const
private

Definition at line 415 of file EnableFloatingPointExceptions.cc.

Referenced by EnableFloatingPointExceptions(), establishModuleEnvironments(), postActions(), postEndJob(), and preActions().

415  {
416  feclearexcept(FE_ALL_EXCEPT);
417  fpu_flags_type femask = fegetexcept();
418  LogVerbatim("FPE_Enable") << "Floating point exception mask is "
419  << std::showbase << std::hex << femask;
420 
421  if(femask & FE_DIVBYZERO)
422  LogVerbatim("FPE_Enable") << "\tDivByZero exception is on";
423  else
424  LogVerbatim("FPE_Enable") << "\tDivByZero exception is off";
425 
426  if(femask & FE_INVALID)
427  LogVerbatim("FPE_Enable") << "\tInvalid exception is on";
428  else
429  LogVerbatim("FPE_Enable") << "\tInvalid exception is off";
430 
431  if(femask & FE_OVERFLOW)
432  LogVerbatim("FPE_Enable") << "\tOverFlow exception is on";
433  else
434  LogVerbatim("FPE_Enable") << "\tOverflow exception is off";
435 
436  if(femask & FE_UNDERFLOW)
437  LogVerbatim("FPE_Enable") << "\tUnderFlow exception is on";
438  else
439  LogVerbatim("FPE_Enable") << "\tUnderFlow exception is off";
440  }
void edm::service::EnableFloatingPointExceptions::enableAndDisableExcept ( fpu_flags_type  target)
private

Definition at line 367 of file EnableFloatingPointExceptions.cc.

References cond::rpcobimon::current, and filterCSVwithJSON::target.

Referenced by EnableFloatingPointExceptions(), establishModuleEnvironments(), postActions(), and preActions().

367  {
368  feclearexcept(FE_ALL_EXCEPT);
369  fpu_flags_type current = fegetexcept();
370  fpu_flags_type exceptionsToModify = current ^ target;
371  fpu_flags_type exceptionsToEnable = 0;
372  fpu_flags_type exceptionsToDisable = 0;
373 
374  if(exceptionsToModify & FE_DIVBYZERO) {
375  if(target & FE_DIVBYZERO) {
376  exceptionsToEnable |= FE_DIVBYZERO;
377  }
378  else {
379  exceptionsToDisable |= FE_DIVBYZERO;
380  }
381  }
382  if(exceptionsToModify & FE_INVALID) {
383  if(target & FE_INVALID) {
384  exceptionsToEnable |= FE_INVALID;
385  }
386  else {
387  exceptionsToDisable |= FE_INVALID;
388  }
389  }
390  if(exceptionsToModify & FE_OVERFLOW) {
391  if(target & FE_OVERFLOW) {
392  exceptionsToEnable |= FE_OVERFLOW;
393  }
394  else {
395  exceptionsToDisable |= FE_OVERFLOW;
396  }
397  }
398  if(exceptionsToModify & FE_UNDERFLOW) {
399  if(target & FE_UNDERFLOW) {
400  exceptionsToEnable |= FE_UNDERFLOW;
401  }
402  else {
403  exceptionsToDisable |= FE_UNDERFLOW;
404  }
405  }
406  if(exceptionsToEnable != 0) {
407  feenableexcept(exceptionsToEnable);
408  }
409  if(exceptionsToDisable != 0) {
410  fedisableexcept(exceptionsToDisable);
411  }
412  }
void edm::service::EnableFloatingPointExceptions::establishModuleEnvironments ( ParameterSet const &  pset)
private

Definition at line 127 of file EnableFloatingPointExceptions.cc.

References def, defaultState_, echoState(), enableAndDisableExcept(), flags, fpuState_, edm::ParameterSet::getUntrackedParameter(), edm::ParameterSet::getUntrackedParameterSet(), reportSettings_, and stateMap_.

Referenced by EnableFloatingPointExceptions().

127  {
128 
129  // Scan the module name list and set per-module values. Be careful to treat
130  // any user-specified default first. If there is one, use it to override our default.
131  // Then remove it from the list so we don't see it again while handling everything else.
132 
133  typedef std::vector<std::string> VString;
134 
135  std::string const def("default");
136  ParameterSet const empty_PSet;
137  VString const empty_VString;
138  VString moduleNames = pset.getUntrackedParameter<VString>("moduleNames", empty_VString);
139 
140  for(VString::const_iterator it(moduleNames.begin()), itEnd = moduleNames.end(); it != itEnd; ++it) {
141  ParameterSet const& modulePSet = pset.getUntrackedParameterSet(*it, empty_PSet);
142  bool enableDivByZeroEx = modulePSet.getUntrackedParameter<bool>("enableDivByZeroEx", false);
143  bool enableInvalidEx = modulePSet.getUntrackedParameter<bool>("enableInvalidEx", false);
144  bool enableOverFlowEx = modulePSet.getUntrackedParameter<bool>("enableOverFlowEx", false);
145  bool enableUnderFlowEx = modulePSet.getUntrackedParameter<bool>("enableUnderFlowEx", false);
146 
147  fpu_flags_type flags = 0;
148  if(enableDivByZeroEx) flags |= FE_DIVBYZERO;
149  if(enableInvalidEx) flags |= FE_INVALID;
150  if(enableOverFlowEx) flags |= FE_OVERFLOW;
151  if(enableUnderFlowEx) flags |= FE_UNDERFLOW;
152  enableAndDisableExcept(flags);
153 
154  fpuState_ = fegetexcept();
155  assert(flags == fpuState_);
156 
157  if(reportSettings_) {
158  LogVerbatim("FPE_Enable") << "\nSettings for module " << *it;
159  echoState();
160  }
161  if(*it == def) {
163  }
164  else {
165  stateMap_[*it] = fpuState_;
166  }
167  }
168  }
std::vector< Variable::Flags > flags
Definition: MVATrainer.cc:135
std::map< std::string, fpu_flags_type > stateMap_
JetCorrectorParameters::Definitions def
Definition: classes.h:10
void edm::service::EnableFloatingPointExceptions::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 265 of file EnableFloatingPointExceptions.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::addNode(), edm::ParameterSetDescription::addUntracked(), python.Node::node, edm::ConfigurationDescriptions::setComment(), edm::ParameterSetDescription::setComment(), and edm::ParameterDescriptionNode::setComment().

265  {
267 
268  desc.addUntracked<bool>("reportSettings", false)->setComment(
269  "Log FPE settings at different phases of the job.");
270  desc.addUntracked<bool>("setPrecisionDouble", true)->setComment(
271  "Set the FPU to use double precision");
272 
273  ParameterSetDescription validator;
274  validator.setComment("FPU exceptions to enable/disable for the requested module");
275  validator.addUntracked<bool>("enableDivByZeroEx", false)->setComment(
276  "Enable/disable exception for 'divide by zero'");
277  validator.addUntracked<bool>("enableInvalidEx", false)->setComment(
278  "Enable/disable exception for 'invalid' math operations (e.g. sqrt(-1))");
279  validator.addUntracked<bool>("enableOverFlowEx", false)->setComment(
280  "Enable/disable exception for numeric 'overflow' (value to big for type)");
281  validator.addUntracked<bool>("enableUnderFlowEx", false)->setComment(
282  "Enable/disable exception for numeric 'underflow' (value to small to be represented accurately)");
283 
284  AllowedLabelsDescription<ParameterSetDescription> node("moduleNames", validator, false);
285  node.setComment("Contains the names for PSets where the PSet name matches the label of a module for which you want to modify the FPE");
286  desc.addNode(node);
287 
288  descriptions.add("EnableFloatingPointExceptions", desc);
289  descriptions.setComment("This service allows you to control the FPU and its exceptions on a per module basis.");
290  }
tuple node
Definition: Node.py:50
void setComment(std::string const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void edm::service::EnableFloatingPointExceptions::postActions ( ModuleDescription const &  description,
char const *  debugInfo 
)
private

Definition at line 326 of file EnableFloatingPointExceptions.cc.

References echoState(), enableAndDisableExcept(), fpuState_, edm::ModuleDescription::moduleLabel(), reportSettings_, and stateStack_.

Referenced by postModule(), postModuleBeginJob(), postModuleBeginLumi(), postModuleBeginRun(), postModuleEndJob(), postModuleEndLumi(), and postModuleEndRun().

326  {
327  // On exit from a module, set the state of the fpu back to what
328  // it was before entry
329  stateStack_.pop();
330  fpuState_ = stateStack_.top();
332 
333  if(reportSettings_) {
334  LogVerbatim("FPE_Enable")
335  << "\nSettings for module label \""
336  << description.moduleLabel()
337  << "\" after "
338  << debugInfo;
339  echoState();
340  }
341  }
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::postEndJob ( )

Definition at line 171 of file EnableFloatingPointExceptions.cc.

References echoState(), and reportSettings_.

Referenced by EnableFloatingPointExceptions().

171  {
172 
173  if(reportSettings_) {
174  LogVerbatim("FPE_Enable") << "\nSettings after endJob ";
175  echoState();
176  }
177  }
void edm::service::EnableFloatingPointExceptions::postModule ( ModuleDescription const &  description)

Definition at line 259 of file EnableFloatingPointExceptions.cc.

References postActions().

Referenced by EnableFloatingPointExceptions().

259  {
260  postActions(description, "event");
261  }
void postActions(ModuleDescription const &description, char const *debugInfo)
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::postModuleBeginJob ( ModuleDescription const &  description)

Definition at line 187 of file EnableFloatingPointExceptions.cc.

References postActions().

Referenced by EnableFloatingPointExceptions().

187  {
188  postActions(description, "beginJob");
189  }
void postActions(ModuleDescription const &description, char const *debugInfo)
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::postModuleBeginLumi ( ModuleDescription const &  description)

Definition at line 235 of file EnableFloatingPointExceptions.cc.

References postActions().

Referenced by EnableFloatingPointExceptions().

235  {
236  postActions(description, "beginLumi");
237  }
void postActions(ModuleDescription const &description, char const *debugInfo)
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::postModuleBeginRun ( ModuleDescription const &  description)

Definition at line 211 of file EnableFloatingPointExceptions.cc.

References postActions().

Referenced by EnableFloatingPointExceptions().

211  {
212  postActions(description, "beginRun");
213  }
void postActions(ModuleDescription const &description, char const *debugInfo)
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::postModuleEndJob ( ModuleDescription const &  description)

Definition at line 199 of file EnableFloatingPointExceptions.cc.

References postActions().

Referenced by EnableFloatingPointExceptions().

199  {
200  postActions(description, "endJob");
201  }
void postActions(ModuleDescription const &description, char const *debugInfo)
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::postModuleEndLumi ( ModuleDescription const &  description)

Definition at line 247 of file EnableFloatingPointExceptions.cc.

References postActions().

Referenced by EnableFloatingPointExceptions().

247  {
248  postActions(description, "endLumi");
249  }
void postActions(ModuleDescription const &description, char const *debugInfo)
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::postModuleEndRun ( ModuleDescription const &  description)

Definition at line 223 of file EnableFloatingPointExceptions.cc.

References postActions().

Referenced by EnableFloatingPointExceptions().

223  {
224  postActions(description, "endRun");
225  }
void postActions(ModuleDescription const &description, char const *debugInfo)
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::preActions ( ModuleDescription const &  description,
char const *  debugInfo 
)
private

Definition at line 295 of file EnableFloatingPointExceptions.cc.

References defaultState_, echoState(), enableAndDisableExcept(), fpuState_, edm::ModuleDescription::moduleLabel(), reportSettings_, stateMap_, and stateStack_.

Referenced by preModule(), preModuleBeginJob(), preModuleBeginLumi(), preModuleBeginRun(), preModuleEndJob(), preModuleEndLumi(), and preModuleEndRun().

296  {
297 
298  // On entry to a module, find the desired state of the fpu and set it
299  // accordingly. Note that any module whose label does not appear in
300  // our list gets the default settings.
301 
302  std::string const& moduleLabel = description.moduleLabel();
303  std::map<std::string, fpu_flags_type>::const_iterator iModule = stateMap_.find(moduleLabel);
304 
305  if(iModule == stateMap_.end()) {
307  }
308  else {
309  fpuState_ = iModule->second;
310  }
312  stateStack_.push(fpuState_);
313 
314  if(reportSettings_) {
315  LogVerbatim("FPE_Enable")
316  << "\nSettings for module label \""
317  << moduleLabel
318  << "\" before "
319  << debugInfo;
320  echoState();
321  }
322  }
std::map< std::string, fpu_flags_type > stateMap_
tuple description
Definition: idDealer.py:66
void edm::service::EnableFloatingPointExceptions::preModule ( ModuleDescription const &  description)

Definition at line 253 of file EnableFloatingPointExceptions.cc.

References preActions().

Referenced by EnableFloatingPointExceptions().

253  {
254  preActions(description, "event");
255  }
tuple description
Definition: idDealer.py:66
void preActions(ModuleDescription const &description, char const *debugInfo)
void edm::service::EnableFloatingPointExceptions::preModuleBeginJob ( ModuleDescription const &  description)

Definition at line 181 of file EnableFloatingPointExceptions.cc.

References preActions().

Referenced by EnableFloatingPointExceptions().

181  {
182  preActions(description, "beginJob");
183  }
tuple description
Definition: idDealer.py:66
void preActions(ModuleDescription const &description, char const *debugInfo)
void edm::service::EnableFloatingPointExceptions::preModuleBeginLumi ( ModuleDescription const &  description)

Definition at line 229 of file EnableFloatingPointExceptions.cc.

References preActions().

Referenced by EnableFloatingPointExceptions().

229  {
230  preActions(description, "beginLumi");
231  }
tuple description
Definition: idDealer.py:66
void preActions(ModuleDescription const &description, char const *debugInfo)
void edm::service::EnableFloatingPointExceptions::preModuleBeginRun ( ModuleDescription const &  description)

Definition at line 205 of file EnableFloatingPointExceptions.cc.

References preActions().

Referenced by EnableFloatingPointExceptions().

205  {
206  preActions(description, "beginRun");
207  }
tuple description
Definition: idDealer.py:66
void preActions(ModuleDescription const &description, char const *debugInfo)
void edm::service::EnableFloatingPointExceptions::preModuleEndJob ( ModuleDescription const &  description)

Definition at line 193 of file EnableFloatingPointExceptions.cc.

References preActions().

Referenced by EnableFloatingPointExceptions().

193  {
194  preActions(description, "endJob");
195  }
tuple description
Definition: idDealer.py:66
void preActions(ModuleDescription const &description, char const *debugInfo)
void edm::service::EnableFloatingPointExceptions::preModuleEndLumi ( ModuleDescription const &  description)

Definition at line 241 of file EnableFloatingPointExceptions.cc.

References preActions().

Referenced by EnableFloatingPointExceptions().

241  {
242  preActions(description, "endLumi");
243  }
tuple description
Definition: idDealer.py:66
void preActions(ModuleDescription const &description, char const *debugInfo)
void edm::service::EnableFloatingPointExceptions::preModuleEndRun ( ModuleDescription const &  description)

Definition at line 217 of file EnableFloatingPointExceptions.cc.

References preActions().

Referenced by EnableFloatingPointExceptions().

217  {
218  preActions(description, "endRun");
219  }
tuple description
Definition: idDealer.py:66
void preActions(ModuleDescription const &description, char const *debugInfo)
void edm::service::EnableFloatingPointExceptions::setPrecision ( bool  precisionDouble)
private

Definition at line 362 of file EnableFloatingPointExceptions.cc.

Referenced by EnableFloatingPointExceptions().

362  {
363  }

Member Data Documentation

fpu_flags_type edm::service::EnableFloatingPointExceptions::defaultState_
private
fpu_flags_type edm::service::EnableFloatingPointExceptions::fpuState_
private
bool edm::service::EnableFloatingPointExceptions::reportSettings_
private
std::map<std::string, fpu_flags_type> edm::service::EnableFloatingPointExceptions::stateMap_
private

Definition at line 144 of file EnableFloatingPointExceptions.h.

Referenced by establishModuleEnvironments(), and preActions().

std::stack<fpu_flags_type> edm::service::EnableFloatingPointExceptions::stateStack_
private