#ifndef CAFFE2_OPERATORS_NO_DEFAULT_ENGINE_OP_H_ #define CAFFE2_OPERATORS_NO_DEFAULT_ENGINE_OP_H_ #include "caffe2/core/context.h" #include "caffe2/core/logging.h" #include "caffe2/core/operator.h" namespace caffe2 { /** * A helper class to denote that an op does not have a default engine. * * NoDefaultEngineOp is a helper class that one can use to denote that a * specific operator is not intended to be called without an explicit engine * given. This is the case for e.g. the communication operators where one has * to specify a backend (like MPI or ZEROMQ). */ template class NoDefaultEngineOp final : public Operator { public: USE_SIMPLE_CTOR_DTOR(NoDefaultEngineOp); USE_OPERATOR_CONTEXT_FUNCTIONS; bool RunOnDevice() override { CAFFE_THROW( "The operator ", this->debug_def().type(), " does not have a default engine implementation. Please " "specify an engine explicitly for this operator."); } }; } // namespace caffe2 #endif // CAFFE2_OPERATORS_NO_DEFAULT_ENGINE_OP_H_