@@ -41,7 +41,27 @@ using namespace onnxruntime;
41
41
#define LIBRARY_PREFIX " lib"
42
42
#define LIBRARY_EXTENSION " .so"
43
43
#endif
44
-
44
+ extern " C" {
45
+ void initialize_onnxruntime_vitisai_ep_c (vaip_core::OrtApiForVaip* api, std::vector<OrtCustomOpDomain*>& ret_domain);
46
+ uint32_t vaip_get_version_c ();
47
+ int create_ep_context_nodes_c (
48
+ const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps,
49
+ vaip_core::DllSafe<std::vector<Node*>>* ret_value);
50
+ std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* compile_onnx_model_with_options_c (
51
+ const std::string& model_path, const onnxruntime::Graph& graph, const onnxruntime::ProviderOptions& options);
52
+ std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* compile_onnx_model_vitisai_ep_with_error_handling_c (
53
+ const std::string& model_path, const onnxruntime::Graph& graph, const onnxruntime::ProviderOptions& options, void * status, vaip_core::error_report_func func);
54
+ int vitisai_ep_on_run_start_c (
55
+ const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps, const void * state,
56
+ vaip_core::DllSafe<std::string> (*get_config_entry)(const void * state, const char * entry_name));
57
+ int vitisai_ep_set_ep_dynamic_options_c (
58
+ const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps,
59
+ const char * const * keys,
60
+ const char * const * values, size_t kv_len);
61
+ void profiler_collect_c (
62
+ std::vector<EventInfo>& api_events,
63
+ std::vector<EventInfo>& kernel_events);
64
+ };
45
65
vaip_core::OrtApiForVaip* create_org_api_hook ();
46
66
struct OrtVitisAIEpAPI {
47
67
void (*initialize_onnxruntime_vitisai_ep)(vaip_core::OrtApiForVaip* api, std::vector<OrtCustomOpDomain*>& ret_domain);
@@ -50,7 +70,7 @@ struct OrtVitisAIEpAPI {
50
70
std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* (*compile_onnx_model_vitisai_ep_with_error_handling)(
51
71
const std::string& model_path, const onnxruntime::Graph& graph, const onnxruntime::ProviderOptions& options, void * status, vaip_core::error_report_func func);
52
72
uint32_t (*vaip_get_version)();
53
- void (*create_ep_context_nodes)(
73
+ int (*create_ep_context_nodes)(
54
74
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps,
55
75
vaip_core::DllSafe<std::vector<Node*>>* ret_value) = nullptr ;
56
76
int (*vitisai_ep_on_run_start)(
@@ -63,34 +83,54 @@ struct OrtVitisAIEpAPI {
63
83
void (*profiler_collect)(
64
84
std::vector<EventInfo>& api_events,
65
85
std::vector<EventInfo>& kernel_events);
86
+ int (*vaip_xcompiler_compile)(const char * input_xmodel,
87
+ size_t input_xmodel_size,
88
+ const char * config_xmodel,
89
+ size_t config_xmodel_size, void * state,
90
+ void (*k)(void *, void *, size_t )) = nullptr ;
91
+ const char * (*vaip_get_default_config)() = nullptr ;
92
+ int (*vaip_get_pattern_as_binary)(const char * name, void * state, void (*k)(void *, void *, size_t )) = nullptr ;
93
+ void (*vaip_get_pattern_list)(void * state, void (*k)(void *, void *, size_t )) = nullptr ;
94
+ int (*vaip_get_mem_xclbin)(const char * name, void * state, void (*k)(void *, void *, size_t )) = nullptr ;
95
+ bool (*vaip_has_mem_xclbin)(const char * name) = nullptr ;
66
96
void Ensure () {
67
97
if (handle_)
68
98
return ;
99
+
100
+ this ->initialize_onnxruntime_vitisai_ep = initialize_onnxruntime_vitisai_ep_c;
101
+ this ->compile_onnx_model_with_options = compile_onnx_model_with_options_c;
102
+ this ->compile_onnx_model_vitisai_ep_with_error_handling = compile_onnx_model_vitisai_ep_with_error_handling_c;
103
+ this ->create_ep_context_nodes = create_ep_context_nodes_c;
104
+ this ->vitisai_ep_on_run_start = vitisai_ep_on_run_start_c;
105
+ this ->vitisai_ep_set_ep_dynamic_options = vitisai_ep_set_ep_dynamic_options_c;
106
+ this ->vaip_get_version = vaip_get_version_c;
107
+ this ->profiler_collect = profiler_collect_c;
108
+
69
109
auto & env = Provider_GetHost ()->Env__Default ();
110
+ auto & logger = *Provider_GetHost ()->LoggingManager_GetDefaultLogger ();
111
+
70
112
#ifdef _WIN32
71
113
// this dll is already linked to the executable, normally a test program
72
114
handle_ = reinterpret_cast <void *>(GetModuleHandle (TEXT (" onnxruntime_vitisai_ep.dll" )));
115
+ auto status = Status::OK ();
73
116
if (!handle_) {
74
117
auto full_path = env.GetRuntimePath () + PathString (LIBRARY_PREFIX ORT_TSTR (" onnxruntime_vitisai_ep" ) LIBRARY_EXTENSION);
75
- ORT_THROW_IF_ERROR (env.LoadDynamicLibrary (full_path, true , &handle_));
118
+ status = env.LoadDynamicLibrary (full_path, true , &handle_);
119
+ if (!status.IsOK ()) {
120
+ LOGS (logger, VERBOSE) << " cannot load onnxruntime_vitisai_ep.dll, can only deploy ep_context onnx model." ;
121
+ return ;
122
+ }
76
123
}
77
124
#else
78
125
auto full_path = env.GetRuntimePath () + PathString (LIBRARY_PREFIX ORT_TSTR (" onnxruntime_vitisai_ep" ) LIBRARY_EXTENSION);
79
126
ORT_THROW_IF_ERROR (env.LoadDynamicLibrary (full_path, true , &handle_));
80
127
#endif
81
- ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " initialize_onnxruntime_vitisai_ep" , (void **)&initialize_onnxruntime_vitisai_ep));
82
- auto status1 = env.GetSymbolFromLibrary (handle_, " compile_onnx_model_vitisai_ep_with_error_handling" , (void **)&compile_onnx_model_vitisai_ep_with_error_handling);
83
- auto status2 = env.GetSymbolFromLibrary (handle_, " compile_onnx_model_vitisai_ep_with_options" , (void **)&compile_onnx_model_with_options);
84
- if ((!status1.IsOK ()) && (!status2.IsOK ())) {
85
- ::onnxruntime::LogRuntimeError (0 , status2, __FILE__, static_cast <const char *>(__FUNCTION__), __LINE__);
86
- ORT_THROW (status2);
87
- }
88
- std::ignore = env.GetSymbolFromLibrary (handle_, " vaip_get_version" ,
89
- (void **)&vaip_get_version);
90
- std::ignore = env.GetSymbolFromLibrary (handle_, " profiler_collect" , (void **)&profiler_collect);
91
- ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " create_ep_context_nodes" , (void **)&create_ep_context_nodes));
92
- ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vitisai_ep_on_run_start" , (void **)&vitisai_ep_on_run_start));
93
- ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vitisai_ep_set_ep_dynamic_options" , (void **)&vitisai_ep_set_ep_dynamic_options));
128
+ ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vaip_xcompiler_compile" , (void **)&vaip_xcompiler_compile));
129
+ ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vaip_get_default_config" , (void **)&vaip_get_default_config));
130
+ ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vaip_get_pattern_as_binary" , (void **)&vaip_get_pattern_as_binary));
131
+ ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vaip_get_pattern_list" , (void **)&vaip_get_pattern_list));
132
+ ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vaip_get_mem_xclbin" , (void **)&vaip_get_mem_xclbin));
133
+ ORT_THROW_IF_ERROR (env.GetSymbolFromLibrary (handle_, " vaip_has_mem_xclbin" , (void **)&vaip_has_mem_xclbin));
94
134
}
95
135
void Clear () {
96
136
if (handle_) {
@@ -484,6 +524,7 @@ vaip_core::OrtApiForVaip* create_org_api_hook() {
484
524
}
485
525
};
486
526
the_global_api.node_arg_external_location = vaip::node_arg_external_location;
527
+
487
528
the_global_api.model_to_proto = [](onnxruntime::Model& model) { return model.ToProto ().release (); };
488
529
the_global_api.model_proto_serialize_as_string = [](ONNX_NAMESPACE::ModelProto& model_proto) {
489
530
return vaip_core::DllSafe (model_proto.SerializeAsString ());
@@ -503,6 +544,12 @@ vaip_core::OrtApiForVaip* create_org_api_hook() {
503
544
the_global_api.graph_remove_initialized_tensor = [](Graph& graph, const std::string& tensor_name) {
504
545
graph.RemoveInitializedTensor (tensor_name);
505
546
};
547
+ the_global_api.vaip_xcompiler_compile = s_library_vitisaiep.vaip_xcompiler_compile ;
548
+ the_global_api.vaip_get_default_config = s_library_vitisaiep.vaip_get_default_config ;
549
+ the_global_api.vaip_get_pattern_as_binary = s_library_vitisaiep.vaip_get_pattern_as_binary ;
550
+ the_global_api.vaip_get_pattern_list = s_library_vitisaiep.vaip_get_pattern_list ;
551
+ the_global_api.vaip_get_mem_xclbin = s_library_vitisaiep.vaip_get_mem_xclbin ;
552
+ the_global_api.vaip_has_mem_xclbin = s_library_vitisaiep.vaip_has_mem_xclbin ;
506
553
if (!s_library_vitisaiep.vaip_get_version ) {
507
554
return reinterpret_cast <vaip_core::OrtApiForVaip*>(&(the_global_api.host_ ));
508
555
} else {
0 commit comments