@@ -63,6 +63,7 @@ struct OrtVitisAIEpAPI {
63
63
void (*profiler_collect)(
64
64
std::vector<EventInfo>& api_events,
65
65
std::vector<EventInfo>& kernel_events);
66
+ void (*deinitialize_onnxruntime_vitisai_ep)();
66
67
void Ensure () {
67
68
if (handle_)
68
69
return ;
@@ -91,6 +92,7 @@ struct OrtVitisAIEpAPI {
91
92
ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " create_ep_context_nodes" , (void **)&create_ep_context_nodes));
92
93
ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vitisai_ep_on_run_start" , (void **)&vitisai_ep_on_run_start));
93
94
ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vitisai_ep_set_ep_dynamic_options" , (void **)&vitisai_ep_set_ep_dynamic_options));
95
+ std::ignore = env.GetSymbolFromLibrary (handle_, " deinitialize_onnxruntime_vitisai_ep" , (void **)&deinitialize_onnxruntime_vitisai_ep);
94
96
}
95
97
void Clear () {
96
98
if (handle_) {
@@ -192,7 +194,7 @@ struct MyCustomOpKernel : OpKernel {
192
194
void * op_kernel_;
193
195
};
194
196
195
- void create_kernel_registry (std::vector<OrtCustomOpDomain*> domains) {
197
+ void create_kernel_registry (const std::vector<OrtCustomOpDomain*>& domains) {
196
198
s_kernel_registry_vitisaiep = KernelRegistry::Create ();
197
199
for (const auto & domain : domains) {
198
200
for (const auto * op : domain->custom_ops_ ) {
@@ -245,6 +247,7 @@ void create_kernel_registry(std::vector<OrtCustomOpDomain*> domains) {
245
247
}
246
248
}
247
249
}
250
+
248
251
void initialize_vitisai_ep () {
249
252
s_library_vitisaiep.Ensure ();
250
253
s_domains_vitisaiep.reserve (100 );
@@ -253,6 +256,18 @@ void initialize_vitisai_ep() {
253
256
create_kernel_registry (s_domains_vitisaiep);
254
257
}
255
258
259
+ void deinitialize_vitisai_ep () {
260
+ if (s_library_vitisaiep.deinitialize_onnxruntime_vitisai_ep ) {
261
+ s_library_vitisaiep.deinitialize_onnxruntime_vitisai_ep ();
262
+ }
263
+ vaip::deregister_xir_ops (s_domains_vitisaiep);
264
+ // kernel registry would be repopulated, no need to delete kernel registry
265
+ s_domains_vitisaiep.clear ();
266
+
267
+ s_library_vitisaiep.Clear ();
268
+ s_kernel_registry_vitisaiep.reset ();
269
+ }
270
+
256
271
static void set_version_info (vaip_core::OrtApiForVaip& api) {
257
272
const char * magic = " VAIP" ;
258
273
std::memcpy (reinterpret_cast <char *>(&api.magic ), magic, sizeof (api.magic ));
@@ -510,8 +525,3 @@ vaip_core::OrtApiForVaip* create_org_api_hook() {
510
525
return &the_global_api;
511
526
}
512
527
}
513
-
514
- void deinitialize_vitisai_ep () {
515
- s_library_vitisaiep.Clear ();
516
- s_kernel_registry_vitisaiep.reset ();
517
- }
0 commit comments