File size: 1,860 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
/**************************************************************************************************
 *
 * 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.
 *
 **************************************************************************************************/
#pragma once

#include <vector>
#include <string>
#include <memory>

enum AX_IO_BUFFER_STRATEGY_T {
    AX_IO_BUFFER_STRATEGY_DEFAULT = 0,
    AX_IO_BUFFER_STRATEGY_CACHED
};

class AxModelRunner {
public:
    AxModelRunner();

    ~AxModelRunner();

    int load_model(const char* model_path, AX_IO_BUFFER_STRATEGY_T strategy = AX_IO_BUFFER_STRATEGY_CACHED, int device_index = 0);

    int unload_model(void);

    int run(void);

    int set_input(int index, void* data);
    int set_inputs(const std::vector<void*>& datas);
    // use DMA to copy data between models if possible, fallback to normal memcpy otherwise.
    int set_input_dma(int dst_index, AxModelRunner& src_model, int src_index);

    int get_output(int index, void* data);
    int get_outputs(const std::vector<void*>& datas);

    int get_input_num(void);
    int get_output_num(void);

    void* get_input_ptr(int index);
    void* get_output_ptr(int index);

    uint64_t get_input_phy_addr(int index);
    uint64_t get_output_phy_addr(int index);

    const char* get_input_name(int index);
    const char* get_output_name(int index);

    int get_input_size(int index);
    int get_output_size(int index);

    std::vector<int> get_input_shape(int index);
    std::vector<int> get_output_shape(int index);

private:
    class Impl;
    std::unique_ptr<Impl> impl_;
};