// Activates the hardware (HW) way to flush denormals (see [1]) to zero as they // can very seriously impact performance. At destruction time restores the // denormals handling state read by the ctor; hence, supports nested calls. // Equals a no-op if the architecture is not x86 or ARM or if the compiler is // not CLANG. // [1] https://en.wikipedia.org/wiki/Denormal_number // // Example usage: // // void Foo() { // DenormalDisabler d; // ... // } class DenormalDisabler { public: // Ctor. If architecture and compiler are supported, stores the HW settings // for denormals, disables denormals and sets `disabling_activated_` to true. // Otherwise, only sets `disabling_activated_` to false.
DenormalDisabler(); // Ctor. Same as above, but also requires `enabled` to be true to disable // denormals.
explicit DenormalDisabler(bool enabled);
DenormalDisabler(const DenormalDisabler&) = delete;
DenormalDisabler& operator=(const DenormalDisabler&) = delete; // Dtor. If `disabling_activated_` is true, restores the denormals HW settings // read by the ctor before denormals were disabled. Otherwise it's a no-op.
~DenormalDisabler();
// Returns true if architecture and compiler are supported. staticbool IsSupported();
private: const int status_word_; constbool disabling_activated_;
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.