33 #include <cudnn_backend.h> 58 ss <<
"CUDNN_BACKEND_ENGINECFG_DESCRIPTOR :";
59 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");
98 std::array<ManagedOpaqueDescriptor, CUDNN_KNOB_TYPE_COUNTS>
bChoices = {};
113 m_engine_config.engine = engine_.get_desc();
114 m_engine_config.opGraphTag = engine_.getTag();
115 auto &knobs = engine_.getFinalizedKnobs();
116 m_engine_config.numKnobs = knobs.size();
118 m_engine_config.set_knobs_attr = engine_.knobs_set();
120 for (std::uint32_t i = 0; i < knobs.size(); i++) {
122 cudnnBackendKnobType_t
type = knobs[i].getKnobType();
123 int64_t value = knobs[i].getChoice();
124 status = cudnnBackendSetAttribute(m_engine_config.bChoices[i]->get_backend_descriptor(),
125 CUDNN_ATTR_KNOB_CHOICE_KNOB_TYPE,
126 CUDNN_TYPE_KNOB_TYPE,
129 if (status != CUDNN_STATUS_SUCCESS) {
132 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: " 133 "CUDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR SetAttribute " 134 "CUDNN_ATTR_KNOB_CHOICE_KNOB_TYPE Failed");
136 status = cudnnBackendSetAttribute(m_engine_config.bChoices[i]->get_backend_descriptor(),
137 CUDNN_ATTR_KNOB_CHOICE_KNOB_VALUE,
141 if (status != CUDNN_STATUS_SUCCESS) {
144 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: " 145 "CUDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR SetAttribute " 146 "CUDNN_ATTR_KNOB_CHOICE_KNOB_VALUE Failed");
148 status = cudnnBackendFinalize(m_engine_config.bChoices[i]->get_backend_descriptor());
149 if (status != CUDNN_STATUS_SUCCESS) {
153 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: CUDNN_BACKEND_KNOB_CHOICE_DESCRIPTOR cudnnFinalize Failed");
165 if (m_engine_config.status != CUDNN_STATUS_SUCCESS) {
167 m_engine_config.status,
168 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: is not created properly");
169 return std::move(m_engine_config);
171 if (m_engine_config.engine ==
nullptr) {
174 CUDNN_STATUS_BAD_PARAM,
175 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: Check and Set the CUDNN_ATTR_ENGINECFG_ENGINE.");
176 return std::move(m_engine_config);
179 auto status = m_engine_config.initialize_managed_backend_pointer(CUDNN_BACKEND_ENGINECFG_DESCRIPTOR);
180 if (
status != CUDNN_STATUS_SUCCESS) {
182 &m_engine_config,
status,
"CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: cudnnCreate Failed");
183 return std::move(m_engine_config);
186 status = cudnnBackendSetAttribute(m_engine_config.pointer->get_backend_descriptor(),
187 CUDNN_ATTR_ENGINECFG_ENGINE,
188 CUDNN_TYPE_BACKEND_DESCRIPTOR,
190 &(m_engine_config.engine->get_backend_descriptor()));
191 if (
status != CUDNN_STATUS_SUCCESS) {
195 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: SetAttribute CUDNN_ATTR_ENGINECFG_ENGINE Failed");
196 return std::move(m_engine_config);
199 if (m_engine_config.set_knobs_attr && m_engine_config.numKnobs > 0) {
200 std::array<cudnnBackendDescriptor_t, CUDNN_KNOB_TYPE_COUNTS> bChoices_;
201 for (
auto i = 0; i < m_engine_config.numKnobs; i++) {
202 bChoices_[i] = m_engine_config.bChoices[i]->get_backend_descriptor();
204 status = cudnnBackendSetAttribute(m_engine_config.pointer->get_backend_descriptor(),
205 CUDNN_ATTR_ENGINECFG_KNOB_CHOICES,
206 CUDNN_TYPE_BACKEND_DESCRIPTOR,
207 m_engine_config.numKnobs,
209 if (
status != CUDNN_STATUS_SUCCESS) {
213 "CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: SetAttribute CUDNN_ATTR_ENGINECFG_KNOB_CHOICES Failed");
214 return std::move(m_engine_config);
219 status = cudnnBackendFinalize(m_engine_config.pointer->get_backend_descriptor());
220 if (
status != CUDNN_STATUS_SUCCESS) {
222 &m_engine_config,
status,
"CUDNN_BACKEND_ENGINECFG_DESCRIPTOR: cudnnFinalize Failed");
223 return std::move(m_engine_config);
225 getLogger() <<
"[cudnn_frontend] " << m_engine_config << std::endl;
226 return std::move(m_engine_config);
ConditionalStreamer & getLogger()
static void set_error_and_throw_exception(BackendDescriptor const *desc, cudnnStatus_t status, const char *message)
EngineConfig_v8 m_engine_config
ManagedOpaqueDescriptor engine
EngineConfig_v8 & operator=(EngineConfig_v8 &&from)=default
static ManagedOpaqueDescriptor make_shared_backend_pointer(cudnnBackendDescriptorType_t type)
std::string describe() const override
Return a string describing the backend Descriptor.
~EngineConfig_v8()=default
auto setEngine(Engine_v8 const &engine_) -> EngineConfigBuilder_v8 &
Set engine for the EngineConfig_v8.
friend class EngineConfigBuilder_v8
std::shared_ptr< OpaqueBackendPointer > ManagedOpaqueDescriptor
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.