Skip to content

Commit cdf1730

Browse files
author
mingyue
committed
vaip alive morphizen
vaip point to morphizen_open_src branch point to mph_open_src branch clean up vaip_ort_api fix VAIP_ORT_API vaip point to VitisAI/mph_open_src branch export GetProvider and support cmake install find_package(vaip) after create onnxruntime_providers_vitisai VAIP must be made available to after the onnxruntime_providers_vitisai target is created so that VAIP can detect if it is build as a subproject or not. add onnxruntime_providers_vitisai.def fix OrtVitisAIEPAPI function pointer point to self vaip point to mph_open_src_v2(rebase into cp_dev) branch
1 parent 9c689e4 commit cdf1730

File tree

6 files changed

+44
-52
lines changed

6 files changed

+44
-52
lines changed

cmake/deps.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,5 @@ directx_headers;https://github.com/microsoft/DirectX-Headers/archive/refs/tags/v
5959
cudnn_frontend;https://github.com/NVIDIA/cudnn-frontend/archive/refs/tags/v1.7.0.zip;d0753d8d5b39947ca0729d7773cb84653a129eb1
6060
dawn;https://github.com/google/dawn/archive/4cb1f9be152a4fa6bb695c08cd707ab078a1e2fb.zip;de39336b7715f53c14eec61072293b85cc73b691
6161
kleidiai;https://github.com/ARM-software/kleidiai/archive/refs/tags/v1.4.0.tar.gz;22d3b57b54a61c194ab256ff11b0353a3b220244
62-
vaip;https://gitenterprise.xilinx.com/mingyue/vaip.git;cp_dev_open_src_0226
62+
#vaip;https://github.com/amd/vaip/archive/refs/tags/v1.0.0-rc0.zip;e084b71c0277e2e3263179a4682300d427ff83e7
63+
vaip;https://gitenterprise.xilinx.com/VitisAI/vaip.git;mph_open_src_v2

cmake/onnxruntime_providers_vitisai.cmake

+6-5
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
GIT_TAG ${DEP_SHA1_vaip}
77
GIT_SUBMODULES_RECURSE FALSE
88
GIT_SHALLOW TRUE
9+
EXCLUDE_FROM_ALL
910
OVERRIDE_FIND_PACKAGE
1011
)
11-
find_package(vaip)
1212

1313
if ("${GIT_COMMIT_ID}" STREQUAL "")
1414
execute_process(
@@ -29,12 +29,13 @@
2929
)
3030
source_group(TREE ${ONNXRUNTIME_ROOT}/core FILES ${onnxruntime_providers_vitisai_cc_srcs})
3131
onnxruntime_add_shared_library(onnxruntime_providers_vitisai ${onnxruntime_providers_vitisai_cc_srcs})
32-
onnxruntime_add_include_to_target(onnxruntime_providers_vitisai ${ONNXRUNTIME_PROVIDERS_SHARED} ${GSL_TARGET} safeint_interface flatbuffers::flatbuffers)
33-
target_link_libraries(onnxruntime_providers_vitisai PRIVATE ${ONNXRUNTIME_PROVIDERS_SHARED} onnxruntime_vitisai_ep::onnxruntime_vitisai_ep)
32+
# VAIP must be made available to after the onnxruntime_providers_vitisai target is created so that VAIP can detect if it is build as a subproject or not.
33+
find_package(vaip)
34+
onnxruntime_add_include_to_target(onnxruntime_providers_vitisai ${ONNXRUNTIME_PROVIDERS_SHARED} ${GSL_TARGET} safeint_interface flatbuffers::flatbuffers Boost::mp11)
35+
target_link_libraries(onnxruntime_providers_vitisai PRIVATE ${ONNXRUNTIME_PROVIDERS_SHARED} morphizen::morphizen-core-static)
3436
if(MSVC)
3537
onnxruntime_add_include_to_target(onnxruntime_providers_vitisai dbghelp)
36-
set_property(TARGET onnxruntime_providers_vitisai APPEND_STRING PROPERTY LINK_FLAGS "-DEF:${ONNXRUNTIME_ROOT}/core/providers/vitisai/symbols.def")
37-
target_sources(onnxruntime_providers_vitisai PRIVATE ${vaip_BINARY_DIR}/onnxruntime_vitisai_ep/onnxruntime_vitisai_ep.def)
38+
target_sources(onnxruntime_providers_vitisai PRIVATE ${ONNXRUNTIME_ROOT}/core/providers/vitisai/imp/onnxruntime_providers_vitisai.def)
3839
else(MSVC)
3940
set_property(TARGET onnxruntime_providers_vitisai APPEND_STRING PROPERTY LINK_FLAGS "-Xlinker --version-script=${ONNXRUNTIME_ROOT}/core/providers/vitisai/version_script.lds -Xlinker --gc-sections")
4041
endif(MSVC)

onnxruntime/core/providers/vitisai/imp/global_api.cc

+24-27
Original file line numberDiff line numberDiff line change
@@ -42,26 +42,26 @@ using namespace onnxruntime;
4242
#define LIBRARY_EXTENSION ".so"
4343
#endif
4444
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(
45+
void initialize_onnxruntime_vitisai_ep(vaip_core::OrtApiForVaip* api, std::vector<OrtCustomOpDomain*>& ret_domain);
46+
uint32_t vaip_get_version();
47+
int create_ep_context_nodes(
4848
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps,
4949
vaip_core::DllSafe<std::vector<Node*>>* ret_value);
50-
std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* compile_onnx_model_with_options_c(
50+
std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* compile_onnx_model_vitisai_ep_with_options(
5151
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(
52+
std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>* compile_onnx_model_vitisai_ep_with_error_handling(
5353
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(
54+
int vitisai_ep_on_run_start(
5555
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps, const void* state,
5656
vaip_core::DllSafe<std::string> (*get_config_entry)(const void* state, const char* entry_name));
57-
int vitisai_ep_set_ep_dynamic_options_c(
57+
int vitisai_ep_set_ep_dynamic_options(
5858
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps,
5959
const char* const* keys,
6060
const char* const* values, size_t kv_len);
61-
void profiler_collect_c(
61+
void profiler_collect(
6262
std::vector<EventInfo>& api_events,
6363
std::vector<EventInfo>& kernel_events);
64-
void deinitialize_onnxruntime_vitisai_ep_c();
64+
void deinitialize_onnxruntime_vitisai_ep();
6565
};
6666
vaip_core::OrtApiForVaip* create_org_api_hook();
6767
struct OrtVitisAIEpAPI {
@@ -101,15 +101,15 @@ struct OrtVitisAIEpAPI {
101101
if (handle_)
102102
return;
103103

104-
this->initialize_onnxruntime_vitisai_ep = initialize_onnxruntime_vitisai_ep_c;
105-
this->compile_onnx_model_with_options = compile_onnx_model_with_options_c;
106-
this->compile_onnx_model_vitisai_ep_with_error_handling = compile_onnx_model_vitisai_ep_with_error_handling_c;
107-
this->create_ep_context_nodes = create_ep_context_nodes_c;
108-
this->vitisai_ep_on_run_start = vitisai_ep_on_run_start_c;
109-
this->vitisai_ep_set_ep_dynamic_options = vitisai_ep_set_ep_dynamic_options_c;
110-
this->vaip_get_version = vaip_get_version_c;
111-
this->profiler_collect = profiler_collect_c;
112-
this->deinitialize_onnxruntime_vitisai_ep = deinitialize_onnxruntime_vitisai_ep_c;
104+
this->initialize_onnxruntime_vitisai_ep = ::initialize_onnxruntime_vitisai_ep;
105+
this->compile_onnx_model_with_options = ::compile_onnx_model_vitisai_ep_with_options;
106+
this->compile_onnx_model_vitisai_ep_with_error_handling = ::compile_onnx_model_vitisai_ep_with_error_handling;
107+
this->create_ep_context_nodes = ::create_ep_context_nodes;
108+
this->vitisai_ep_on_run_start = ::vitisai_ep_on_run_start;
109+
this->vitisai_ep_set_ep_dynamic_options = ::vitisai_ep_set_ep_dynamic_options;
110+
this->vaip_get_version = ::vaip_get_version;
111+
this->profiler_collect = ::profiler_collect;
112+
this->deinitialize_onnxruntime_vitisai_ep = ::deinitialize_onnxruntime_vitisai_ep;
113113

114114
auto& env = Provider_GetHost()->Env__Default();
115115
auto& logger = *Provider_GetHost()->LoggingManager_GetDefaultLogger();
@@ -157,14 +157,15 @@ static vaip_core::OrtApiForVaip the_global_api;
157157
std::shared_ptr<KernelRegistry> get_kernel_registry_vitisaiep() { return s_kernel_registry_vitisaiep; }
158158
const std::vector<OrtCustomOpDomain*>& get_domains_vitisaiep() { return s_domains_vitisaiep; }
159159

160+
namespace onnxruntime {
160161
void profiler_collect(
161162
std::vector<EventInfo>& api_events,
162163
std::vector<EventInfo>& kernel_events) {
163164
if (s_library_vitisaiep.profiler_collect) {
164165
s_library_vitisaiep.profiler_collect(api_events, kernel_events);
165166
}
166167
}
167-
168+
} // namespace onnxruntime
168169
void change_status_with_error(void* status_ptr, int error_code, const char* error_msg) {
169170
auto status = reinterpret_cast<Status*>(status_ptr);
170171
*status = Status(onnxruntime::common::ONNXRUNTIME, error_code, error_msg);
@@ -206,6 +207,7 @@ std::optional<std::vector<Node*>> create_ep_context_nodes(
206207
}
207208
return std::nullopt;
208209
}
210+
namespace onnxruntime {
209211

210212
int vitisai_ep_on_run_start(
211213
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps, const void* state,
@@ -224,6 +226,7 @@ int vitisai_ep_set_ep_dynamic_options(
224226
}
225227
return 100;
226228
}
229+
} // namespace onnxruntime
227230

228231
struct MyCustomOpKernel : OpKernel {
229232
MyCustomOpKernel(const OpKernelInfo& info, const OrtCustomOp& op) : OpKernel(info), op_(op) {
@@ -298,7 +301,7 @@ void create_kernel_registry(const std::vector<OrtCustomOpDomain*>& domains) {
298301
}
299302
}
300303
}
301-
304+
namespace onnxruntime {
302305
void initialize_vitisai_ep() {
303306
s_library_vitisaiep.Ensure();
304307
s_domains_vitisaiep.reserve(100);
@@ -318,7 +321,7 @@ void deinitialize_vitisai_ep() {
318321
s_library_vitisaiep.Clear();
319322
s_kernel_registry_vitisaiep.reset();
320323
}
321-
324+
} // namespace onnxruntime
322325
static void set_version_info(vaip_core::OrtApiForVaip& api) {
323326
const char* magic = "VAIP";
324327
std::memcpy(reinterpret_cast<char*>(&api.magic), magic, sizeof(api.magic));
@@ -581,12 +584,6 @@ vaip_core::OrtApiForVaip* create_org_api_hook() {
581584
};
582585

583586
the_global_api.graph_reverse_dfs_from_preemp = vaip::graph_reverse_dfs_from;
584-
the_global_api.vaip_xcompiler_compile = s_library_vitisaiep.vaip_xcompiler_compile;
585-
the_global_api.vaip_get_default_config = s_library_vitisaiep.vaip_get_default_config;
586-
the_global_api.vaip_get_pattern_as_binary = s_library_vitisaiep.vaip_get_pattern_as_binary;
587-
the_global_api.vaip_get_pattern_list = s_library_vitisaiep.vaip_get_pattern_list;
588-
the_global_api.vaip_get_mem_xclbin = s_library_vitisaiep.vaip_get_mem_xclbin;
589-
the_global_api.vaip_has_mem_xclbin = s_library_vitisaiep.vaip_has_mem_xclbin;
590587
if (!s_library_vitisaiep.vaip_get_version) {
591588
return reinterpret_cast<vaip_core::OrtApiForVaip*>(&(the_global_api.host_));
592589
} else {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
LIBRARY onnxruntime_providers_vitisai
2+
EXPORTS
3+
GetProvider

onnxruntime/core/providers/vitisai/include/vaip/global_api.h

+8-6
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,9 @@
1010
#include "vaip/dll_safe.h"
1111
#include "vaip/custom_op.h"
1212
#include <optional>
13+
namespace onnxruntime {
1314
void initialize_vitisai_ep();
1415
void deinitialize_vitisai_ep();
15-
vaip_core::DllSafe<std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>> compile_onnx_model(const onnxruntime::GraphViewer& graph_viewer, const onnxruntime::logging::Logger& logger, const onnxruntime::ProviderOptions& options);
16-
std::shared_ptr<onnxruntime::KernelRegistry> get_kernel_registry_vitisaiep();
17-
const std::vector<OrtCustomOpDomain*>& get_domains_vitisaiep();
18-
std::optional<std::vector<onnxruntime::Node*>> create_ep_context_nodes(
19-
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps);
20-
2116
int vitisai_ep_on_run_start(
2217
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps, const void* state,
2318
vaip_core::DllSafe<std::string> (*get_config_entry)(const void* state, const char* entry_name));
@@ -37,6 +32,13 @@ using EventInfo = std::tuple<
3732
long long, // timestamp
3833
long long // duration
3934
>;
35+
4036
void profiler_collect(
4137
std::vector<EventInfo>& api_events,
4238
std::vector<EventInfo>& kernel_events);
39+
} // namespace onnxruntime
40+
vaip_core::DllSafe<std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>> compile_onnx_model(const onnxruntime::GraphViewer& graph_viewer, const onnxruntime::logging::Logger& logger, const onnxruntime::ProviderOptions& options);
41+
std::shared_ptr<onnxruntime::KernelRegistry> get_kernel_registry_vitisaiep();
42+
const std::vector<OrtCustomOpDomain*>& get_domains_vitisaiep();
43+
std::optional<std::vector<onnxruntime::Node*>> create_ep_context_nodes(
44+
const std::vector<std::unique_ptr<vaip_core::ExecutionProvider>>& eps);

onnxruntime/core/providers/vitisai/include/vaip/vaip_ort_api.h

+1-13
Original file line numberDiff line numberDiff line change
@@ -235,15 +235,14 @@ struct OrtApiForVaip {
235235
DllSafe<std::string> (*model_proto_serialize_as_string)(ModelProto& model_proto); // [96]
236236
void (*model_proto_delete)(ModelProto* p); // [97]
237237
DllSafe<std::string> (*attr_proto_release_string)(AttributeProto* attr); // [98]
238-
bool (*is_profiling_enabled)(void* session_options); // [99]
238+
bool (*is_profiling_enabled)(void* session_options); // [99] // [98]
239239
TensorProto* (*tensor_proto_new_i4)(const std::string& name,
240240
const std::vector<int64_t>& shape,
241241
const std::vector<int8_t>& data); // [100]
242242
TensorProto* (*tensor_proto_new_u4)(const std::string& name,
243243
const std::vector<int64_t>& shape,
244244
const std::vector<uint8_t>& data); // [101]
245245
void (*graph_remove_initialized_tensor)(Graph& graph, const std::string& tensor_name); // [102]
246-
247246
void (*graph_reverse_dfs_from_preemp)(
248247
const Graph& graph, gsl::span<const Node* const> from,
249248
const std::function<bool(const Node*)>& enter,
@@ -257,17 +256,6 @@ struct OrtApiForVaip {
257256
GraphProto* (*graph_to_graph_proto)(const Graph& graph); // [106]
258257
void (*graph_proto_delete)(GraphProto* p); // [107]
259258
void (*graph_infer_shapes)(ModelProto& m); // [108]
260-
261-
int (*vaip_xcompiler_compile)(const char* input_xmodel,
262-
size_t input_xmodel_size,
263-
const char* config_xmodel,
264-
size_t config_xmodel_size, void* state,
265-
void (*k)(void*, void*, size_t)); // [103]
266-
const char* (*vaip_get_default_config)(); // [104]
267-
int (*vaip_get_pattern_as_binary)(const char* name, void* state, void (*k)(void*, void*, size_t)); // [105]
268-
void (*vaip_get_pattern_list)(void* state, void (*k)(void*, void*, size_t)); // [106]
269-
int (*vaip_get_mem_xclbin)(const char* name, void* state, void (*k)(void*, void*, size_t)); // [107]
270-
bool (*vaip_has_mem_xclbin)(const char* name); // [108]
271259
};
272260

273261
#ifndef USE_VITISAI

0 commit comments

Comments
 (0)