33 #include <cudnn_backend.h> 57 ss <<
"CUDNN_BACKEND_ENGINECFG_DESCRIPTOR :";
58 ss <<
" Number of knobs: " <<
numKnobs;
78 for (uint64_t i = 0; i <
bChoices.size(); i++) {
80 if (
bChoices[i]->is_good() ==
false) {
85 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: CUDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR cudnnCreate Failed");
97 std::array<ManagedOpaqueDescriptor, CUDNN_KNOB_TYPE_COUNTS>
bChoices = {};
112 m_engine_config.engine = engine_.get_desc();
113 m_engine_config.opGraphTag = engine_.getTag();
114 auto &knobs = engine_.getFinalizedKnobs();
115 m_engine_config.numKnobs = knobs.size();
116 for (std::uint32_t i = 0; i < knobs.size(); i++) {
118 cudnnBackendKnobType_t
type = knobs[i].getKnobType();
119 int64_t value = knobs[i].getChoice();
120 status = cudnnBackendSetAttribute(m_engine_config.bChoices[i]->get_backend_descriptor(),
121 CUDNN_ATTR_KNOB_CHOICE_KNOB_TYPE,
122 CUDNN_TYPE_KNOB_TYPE,
125 if (status != CUDNN_STATUS_SUCCESS) {
128 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: " 129 "CUDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR SetAttribute " 130 "CUDNN_ATTR_KNOB_CHOICE_KNOB_TYPE Failed");
132 status = cudnnBackendSetAttribute(m_engine_config.bChoices[i]->get_backend_descriptor(),
133 CUDNN_ATTR_KNOB_CHOICE_KNOB_VALUE,
137 if (status != CUDNN_STATUS_SUCCESS) {
140 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: " 141 "CUDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR SetAttribute " 142 "CUDNN_ATTR_KNOB_CHOICE_KNOB_VALUE Failed");
144 status = cudnnBackendFinalize(m_engine_config.bChoices[i]->get_backend_descriptor());
145 if (status != CUDNN_STATUS_SUCCESS) {
149 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: CUDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR cudnnFinalize Failed");
160 if (m_engine_config.status != CUDNN_STATUS_SUCCESS) {
162 m_engine_config.status,
163 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: is not created properly");
164 return std::move(m_engine_config);
166 if (m_engine_config.engine ==
nullptr) {
169 CUDNN_STATUS_BAD_PARAM,
170 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: Check and Set the CUDNN_ATTR_ENGINECFG_ENGINE.");
171 return std::move(m_engine_config);
174 auto status = m_engine_config.initialize_managed_backend_pointer(CUDNN_BACKEND_ENGINECFG_DESCRIPTOR);
175 if (
status != CUDNN_STATUS_SUCCESS) {
177 &m_engine_config,
status,
"CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: cudnnCreate Failed");
178 return std::move(m_engine_config);
181 status = cudnnBackendSetAttribute(m_engine_config.pointer->get_backend_descriptor(),
182 CUDNN_ATTR_ENGINECFG_ENGINE,
183 CUDNN_TYPE_BACKEND_DESCRIPTOR,
185 &(m_engine_config.engine->get_backend_descriptor()));
186 if (
status != CUDNN_STATUS_SUCCESS) {
190 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: SetAttribute CUDNN_ATTR_ENGINECFG_ENGINE Failed");
191 return std::move(m_engine_config);
194 if (m_engine_config.numKnobs > 0) {
195 std::array<cudnnBackendDescriptor_t, CUDNN_KNOB_TYPE_COUNTS> bChoices_;
196 for (
auto i = 0; i < m_engine_config.numKnobs; i++) {
197 bChoices_[i] = m_engine_config.bChoices[i]->get_backend_descriptor();
199 status = cudnnBackendSetAttribute(m_engine_config.pointer->get_backend_descriptor(),
200 CUDNN_ATTR_ENGINECFG_KNOB_CHOICES,
201 CUDNN_TYPE_BACKEND_DESCRIPTOR,
202 m_engine_config.numKnobs,
204 if (
status != CUDNN_STATUS_SUCCESS) {
208 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: SetAttribute CUDNN_ATTR_ENGINECFG_KNOB_CHOICES Failed");
209 return std::move(m_engine_config);
214 status = cudnnBackendFinalize(m_engine_config.pointer->get_backend_descriptor());
215 if (
status != CUDNN_STATUS_SUCCESS) {
217 &m_engine_config,
status,
"CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: cudnnFinalize Failed");
218 return std::move(m_engine_config);
220 return std::move(m_engine_config);
static void set_error_and_throw_exception(BackendDescriptor const *desc, cudnnStatus_t status, const char *message)
EngineConfig_v8 m_engine_config
ManagedOpaqueDescriptor engine
static ManagedOpaqueDescriptor make_shared_backend_pointer(cudnnBackendDescriptorType_t type)
std::string describe() const override
Return a string describing the backend Descriptor.
~EngineConfig_v8()=default
EngineConfig_v8(EngineConfig_v8 &&from)
ManagedOpaqueDescriptor get_desc() const
Returns a copy of underlying managed descriptor.
auto setEngine(Engine_v8 const &engine_) -> EngineConfigBuilder_v8 &
Set engine for the EngineConfig_v8.
cudnnStatus_t get_status() const
Current status of the descriptor.
friend class EngineConfigBuilder_v8
std::shared_ptr< OpaqueBackendPointer > ManagedOpaqueDescriptor
const char * get_error() const
Diagonistic error message if any.
EngineConfig_v8 && build()
std::string const & getTag() const
std::vector< ManagedOpaqueDescriptor > EngineConfigList
std::array< ManagedOpaqueDescriptor, CUDNN_KNOB_TYPE_COUNTS > bChoices
Opaque pointer to the backend knobs.
cudnnStatus_t status
Shared pointer of the OpaqueBackendPointer.
EngineConfig_v8 & operator=(EngineConfig_v8 const &)=delete