File size: 3,008 Bytes
71e354e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**************************************************************************************************
 *
 * Copyright (c) 2019-2026 Axera Semiconductor (Ningbo) Co., Ltd. All Rights Reserved.
 *
 * This source file is the property of Axera Semiconductor (Ningbo) Co., Ltd. and
 * may not be copied or distributed in any isomorphic form without the prior
 * written consent of Axera Semiconductor (Ningbo) Co., Ltd.
 *
 **************************************************************************************************/
#include "ax_model_runner/ax_model_runner.hpp"
#include "utils/logger.h"
#include "utils/memory_utils.hpp"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <vector>
#include <cstdint>

#if defined (CHIP_AX650) || defined(CHIP_AX630C) || defined(CHIP_AX620Q)
    #include "ax_engine_impl.hpp"
#elif defined (CHIP_AX8850)
    #include "axcl_engine_impl.hpp"
#else
    #error Unknown CHIP_TYPE, check cmake/msp_dependencies.cmake for possible choices
#endif


AxModelRunner::AxModelRunner():
    impl_(std::make_unique<Impl>()) {

}

AxModelRunner::~AxModelRunner() {
    impl_->unload_model();
}

int AxModelRunner::load_model(const char* model_path, AX_IO_BUFFER_STRATEGY_T strategy, int device_index) {
    return impl_->load_model(model_path, strategy, device_index);
}

int AxModelRunner::unload_model(void) {
    return impl_->unload_model();
}

int AxModelRunner::run(void) {
    return impl_->run();
}

int AxModelRunner::set_input(int index, void* data) {
    return impl_->set_input(index, data);
}

int AxModelRunner::set_inputs(const std::vector<void*>& datas) {
    return impl_->set_inputs(datas);
}

int AxModelRunner::set_input_dma(int dst_index, AxModelRunner& src_model, int src_index) {
    return impl_->set_input_dma(dst_index, src_model, src_index);
}

int AxModelRunner::get_output(int index, void* data) {
    return impl_->get_output(index, data);
}

int AxModelRunner::get_outputs(const std::vector<void*>& datas) {
    return impl_->get_outputs(datas);
}

void* AxModelRunner::get_input_ptr(int index) {
    return impl_->get_input_ptr(index);
}

void* AxModelRunner::get_output_ptr(int index) {
    return impl_->get_output_ptr(index);
}

uint64_t AxModelRunner::get_input_phy_addr(int index) {
    return impl_->get_input_phy_addr(index);
}

uint64_t AxModelRunner::get_output_phy_addr(int index) {
    return impl_->get_output_phy_addr(index);
}

const char* AxModelRunner::get_input_name(int index) {
    return impl_->get_input_name(index);
}

const char* AxModelRunner::get_output_name(int index) {
    return impl_->get_output_name(index);
}

int AxModelRunner::get_input_size(int index) {
    return impl_->get_input_size(index);
}

int AxModelRunner::get_output_size(int index) {
    return impl_->get_output_size(index);
}

std::vector<int> AxModelRunner::get_input_shape(int index) {
    return impl_->get_input_shape(index);
}

std::vector<int> AxModelRunner::get_output_shape(int index) {
    return impl_->get_output_shape(index);
}