rknn_api.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #ifndef __RKNN_API_H__
  2. #define __RKNN_API_H__
  3. #include <stdint.h>
  4. #include <stddef.h>
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. #define RKNN_MAX_DIMS 16
  9. #define RKNN_MAX_NAME_LEN 256
  10. #ifdef __arm__
  11. typedef uint32_t rknn_context;
  12. #else
  13. typedef uint64_t rknn_context;
  14. #endif
  15. typedef enum {
  16. RKNN_TENSOR_FLOAT32 = 0,
  17. RKNN_TENSOR_FLOAT16,
  18. RKNN_TENSOR_INT8,
  19. RKNN_TENSOR_UINT8,
  20. RKNN_TENSOR_INT16,
  21. RKNN_TENSOR_UINT16,
  22. RKNN_TENSOR_INT32,
  23. RKNN_TENSOR_UINT32,
  24. RKNN_TENSOR_INT64,
  25. RKNN_TENSOR_BOOL,
  26. RKNN_TENSOR_INT4,
  27. RKNN_TENSOR_BFLOAT16,
  28. RKNN_TENSOR_TYPE_MAX
  29. } rknn_tensor_type;
  30. typedef enum {
  31. RKNN_TENSOR_QNT_NONE = 0,
  32. RKNN_TENSOR_QNT_DFP,
  33. RKNN_TENSOR_QNT_AFFINE_ASYMMETRIC,
  34. RKNN_TENSOR_QNT_MAX
  35. } rknn_tensor_qnt_type;
  36. typedef enum {
  37. RKNN_TENSOR_NCHW = 0,
  38. RKNN_TENSOR_NHWC,
  39. RKNN_TENSOR_NC1HWC2,
  40. RKNN_TENSOR_UNDEFINED,
  41. RKNN_TENSOR_FORMAT_MAX
  42. } rknn_tensor_format;
  43. typedef enum {
  44. RKNN_NPU_CORE_AUTO = 0,
  45. RKNN_NPU_CORE_0 = 1,
  46. RKNN_NPU_CORE_1 = 2,
  47. RKNN_NPU_CORE_2 = 4,
  48. RKNN_NPU_CORE_0_1 = 3,
  49. RKNN_NPU_CORE_0_1_2 = 7,
  50. RKNN_NPU_CORE_ALL = 0xffff,
  51. RKNN_NPU_CORE_UNDEFINED
  52. } rknn_core_mask;
  53. typedef enum {
  54. RKNN_QUERY_IN_OUT_NUM = 0,
  55. RKNN_QUERY_INPUT_ATTR = 1,
  56. RKNN_QUERY_OUTPUT_ATTR = 2,
  57. RKNN_QUERY_PERF_DETAIL = 3,
  58. RKNN_QUERY_PERF_RUN = 4,
  59. RKNN_QUERY_SDK_VERSION = 5,
  60. RKNN_QUERY_MEM_SIZE = 6,
  61. RKNN_QUERY_CUSTOM_STRING = 7,
  62. RKNN_QUERY_NATIVE_INPUT_ATTR = 8,
  63. RKNN_QUERY_NATIVE_OUTPUT_ATTR = 9,
  64. RKNN_QUERY_NATIVE_NC1HWC2_INPUT_ATTR = 8,
  65. RKNN_QUERY_NATIVE_NC1HWC2_OUTPUT_ATTR = 9,
  66. RKNN_QUERY_NATIVE_NHWC_INPUT_ATTR = 10,
  67. RKNN_QUERY_NATIVE_NHWC_OUTPUT_ATTR = 11,
  68. RKNN_QUERY_DEVICE_MEM_INFO = 12,
  69. RKNN_QUERY_INPUT_DYNAMIC_RANGE = 13,
  70. RKNN_QUERY_CURRENT_INPUT_ATTR = 14,
  71. RKNN_QUERY_CURRENT_OUTPUT_ATTR = 15,
  72. RKNN_QUERY_CURRENT_NATIVE_INPUT_ATTR = 16,
  73. RKNN_QUERY_CURRENT_NATIVE_OUTPUT_ATTR = 17,
  74. RKNN_QUERY_CMD_MAX
  75. } rknn_query_cmd;
  76. typedef struct _rknn_input_output_num {
  77. uint32_t n_input;
  78. uint32_t n_output;
  79. } rknn_input_output_num;
  80. typedef struct _rknn_tensor_attr {
  81. uint32_t index;
  82. uint32_t n_dims;
  83. uint32_t dims[RKNN_MAX_DIMS];
  84. char name[RKNN_MAX_NAME_LEN];
  85. uint32_t n_elems;
  86. uint32_t size;
  87. rknn_tensor_format fmt;
  88. rknn_tensor_type type;
  89. rknn_tensor_qnt_type qnt_type;
  90. int8_t fl;
  91. uint32_t zp;
  92. float scale;
  93. uint32_t w_stride;
  94. uint32_t size_with_stride;
  95. uint8_t pass_through;
  96. uint32_t h_stride;
  97. } rknn_tensor_attr;
  98. typedef struct _rknn_input {
  99. uint32_t index;
  100. void* buf;
  101. uint32_t size;
  102. uint8_t pass_through;
  103. uint8_t _pad1;
  104. uint8_t _pad2;
  105. uint8_t _pad3;
  106. rknn_tensor_type type;
  107. rknn_tensor_format fmt;
  108. } rknn_input;
  109. typedef struct _rknn_output {
  110. uint8_t want_float;
  111. uint8_t is_prealloc;
  112. uint8_t _pad1;
  113. uint8_t _pad2;
  114. uint32_t index;
  115. void* buf;
  116. uint32_t size;
  117. } rknn_output;
  118. typedef struct _rknn_tensor_mem {
  119. void* virt_addr;
  120. uint64_t phys_addr;
  121. int32_t fd;
  122. int32_t offset;
  123. uint32_t size;
  124. uint32_t flags;
  125. void* priv_data;
  126. } rknn_tensor_mem;
  127. typedef struct _rknn_perf_detail {
  128. char* perf_data;
  129. uint64_t data_len;
  130. } rknn_perf_detail;
  131. typedef struct _rknn_perf_run {
  132. int64_t run_duration;
  133. } rknn_perf_run;
  134. typedef struct _rknn_sdk_version {
  135. char api_version[256];
  136. char drv_version[256];
  137. } rknn_sdk_version;
  138. typedef struct _rknn_mem_size {
  139. uint32_t total_weight_size;
  140. uint32_t total_internal_size;
  141. uint64_t total_dma_allocated_size;
  142. uint32_t total_sram_size;
  143. uint32_t free_sram_size;
  144. uint32_t reserved[10];
  145. } rknn_mem_size;
  146. typedef struct _rknn_custom_string {
  147. char string[1024];
  148. } rknn_custom_string;
  149. typedef struct _rknn_init_extend {
  150. rknn_context ctx;
  151. int32_t real_model_offset;
  152. uint32_t real_model_size;
  153. int32_t model_buffer_fd;
  154. uint32_t model_buffer_flags;
  155. uint8_t reserved[112];
  156. } rknn_init_extend;
  157. typedef struct _rknn_run_extend {
  158. uint64_t frame_id;
  159. int32_t non_block;
  160. int32_t timeout_ms;
  161. int32_t fence_fd;
  162. } rknn_run_extend;
  163. typedef struct _rknn_output_extend {
  164. uint64_t frame_id;
  165. } rknn_output_extend;
  166. int rknn_init(rknn_context* context, void* model, uint32_t size, uint32_t flag, rknn_init_extend* extend);
  167. int rknn_destroy(rknn_context context);
  168. int rknn_dup_context(rknn_context* context_in, rknn_context* context_out);
  169. int rknn_query(rknn_context context, rknn_query_cmd cmd, void* info, uint32_t size);
  170. int rknn_inputs_set(rknn_context context, uint32_t n_inputs, rknn_input inputs[]);
  171. int rknn_set_batch_core_num(rknn_context context, int core_num);
  172. int rknn_set_core_mask(rknn_context context, rknn_core_mask mask);
  173. int rknn_run(rknn_context context, rknn_run_extend* extend);
  174. int rknn_wait(rknn_context context, rknn_run_extend* extend);
  175. int rknn_outputs_get(rknn_context context, uint32_t n_outputs, rknn_output outputs[], rknn_output_extend* extend);
  176. int rknn_outputs_release(rknn_context context, uint32_t n_outputs, rknn_output outputs[]);
  177. rknn_tensor_mem* rknn_create_mem(rknn_context ctx, uint32_t size);
  178. rknn_tensor_mem* rknn_create_mem2(rknn_context ctx, uint64_t size, uint64_t alloc_flags);
  179. rknn_tensor_mem* rknn_create_mem_from_fd(rknn_context ctx, int32_t fd, void* virt_addr, uint32_t size, int32_t offset);
  180. rknn_tensor_mem* rknn_create_mem_from_phys(rknn_context ctx, uint64_t phys_addr, void* virt_addr, uint32_t size);
  181. int rknn_destroy_mem(rknn_context ctx, rknn_tensor_mem* mem);
  182. int rknn_set_weight_mem(rknn_context ctx, rknn_tensor_mem* mem);
  183. int rknn_set_internal_mem(rknn_context ctx, rknn_tensor_mem* mem);
  184. int rknn_set_io_mem(rknn_context ctx, rknn_tensor_mem* mem, rknn_tensor_attr* attr);
  185. int rknn_set_input_shape(rknn_context ctx, rknn_tensor_attr* attr);
  186. int rknn_set_input_shapes(rknn_context ctx, uint32_t n_inputs, rknn_tensor_attr attr[]);
  187. int rknn_mem_sync(rknn_context context, rknn_tensor_mem* mem, int mode);
  188. #ifdef __cplusplus
  189. }
  190. #endif
  191. #endif