You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mem.h 19 kB

5 years ago
5 years ago
3 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
3 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. /*
  2. * Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved.
  3. * Description: mem.h
  4. * Create: 2020-01-01
  5. */
  6. #ifndef CCE_RUNTIME_MEM_H
  7. #define CCE_RUNTIME_MEM_H
  8. #include <stddef.h>
  9. #include "base.h"
  10. #include "config.h"
  11. #include "stream.h"
  12. #if defined(__cplusplus)
  13. extern "C" {
  14. #endif
  15. /**
  16. * @ingroup dvrt_mem
  17. * @brief memory type
  18. */
  19. #define RT_MEMORY_DEFAULT (0x0U) // default memory on device
  20. #define RT_MEMORY_HBM (0x2U) // HBM memory on device
  21. #define RT_MEMORY_RDMA_HBM (0x3U) // RDMA-HBM memory on device
  22. #define RT_MEMORY_DDR (0x4U) // DDR memory on device
  23. #define RT_MEMORY_SPM (0x8U) // shared physical memory on device
  24. #define RT_MEMORY_P2P_HBM (0x10U) // HBM memory on other 4P device
  25. #define RT_MEMORY_P2P_DDR (0x11U) // DDR memory on other device
  26. #define RT_MEMORY_DDR_NC (0x20U) // DDR memory of non-cache
  27. #define RT_MEMORY_TS (0x40U) // Used for Ts memory
  28. #define RT_MEMORY_TS_4G (0x40U) // Used for Ts memory(only 1951)
  29. #define RT_MEMORY_RESERVED (0x100U)
  30. #define RT_MEMORY_L1 (0x1U << 16U)
  31. #define RT_MEMORY_L2 (0x1U << 17U)
  32. /**
  33. * @ingroup dvrt_mem
  34. * @brief memory info type
  35. */
  36. #define RT_MEM_INFO_TYPE_DDR_SIZE (0x1U)
  37. #define RT_MEM_INFO_TYPE_HBM_SIZE (0x2U)
  38. #define RT_MEM_INFO_TYPE_DDR_P2P_SIZE (0x3U)
  39. #define RT_MEM_INFO_TYPE_HBM_P2P_SIZE (0x4U)
  40. /**
  41. * @ingroup dvrt_mem
  42. * @brief memory Policy
  43. */
  44. #define RT_MEMORY_POLICY_NONE (0x0U) // Malloc mem prior huge page, then default page
  45. #define RT_MEMORY_POLICY_HUGE_PAGE_FIRST (0x400U) // Malloc mem prior huge page, then default page, 0x1U << 10U
  46. #define RT_MEMORY_POLICY_HUGE_PAGE_ONLY (0x800U) // Malloc mem only use huge page, 0x1U << 11U
  47. #define RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY (0x1000U) // Malloc mem only use default page, 0x1U << 12U
  48. // Malloc mem prior huge page, then default page, for p2p, 0x1U << 13U
  49. #define RT_MEMORY_POLICY_HUGE_PAGE_FIRST_P2P (0x2000U)
  50. #define RT_MEMORY_POLICY_HUGE_PAGE_ONLY_P2P (0x4000U) // Malloc mem only use huge page, use for p2p, 0x1U << 14U
  51. #define RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY_P2P (0x8000U) // Malloc mem only use default page, use for p2p, 0x1U << 15U
  52. #define MEM_ALLOC_TYPE_BIT (0x3FFU) // mem type bit in <0, 9>
  53. /**
  54. * @ingroup dvrt_mem
  55. * @brief memory type | memory Policy
  56. */
  57. typedef uint32_t rtMemType_t;
  58. /**
  59. * @ingroup dvrt_mem
  60. * @brief memory advise type
  61. */
  62. #define RT_MEMORY_ADVISE_EXE (0x02U)
  63. #define RT_MEMORY_ADVISE_THP (0x04U)
  64. #define RT_MEMORY_ADVISE_PLE (0x08U)
  65. #define RT_MEMORY_ADVISE_PIN (0x16U)
  66. /**
  67. * @ingroup dvrt_mem
  68. * @brief memory copy type
  69. */
  70. typedef enum tagRtMemcpyKind {
  71. RT_MEMCPY_HOST_TO_HOST = 0, // host to host
  72. RT_MEMCPY_HOST_TO_DEVICE, // host to device
  73. RT_MEMCPY_DEVICE_TO_HOST, // device to host
  74. RT_MEMCPY_DEVICE_TO_DEVICE, // device to device, 1P && P2P
  75. RT_MEMCPY_MANAGED, // managed memory
  76. RT_MEMCPY_ADDR_DEVICE_TO_DEVICE,
  77. RT_MEMCPY_HOST_TO_DEVICE_EX, // host to device ex (only used for 8 bytes)
  78. RT_MEMCPY_DEVICE_TO_HOST_EX, // device to host ex
  79. RT_MEMCPY_RESERVED,
  80. } rtMemcpyKind_t;
  81. typedef enum tagRtMemInfoType {
  82. RT_MEMORYINFO_DDR,
  83. RT_MEMORYINFO_HBM,
  84. RT_MEMORYINFO_DDR_HUGE, // Hugepage memory of DDR
  85. RT_MEMORYINFO_DDR_NORMAL, // Normal memory of DDR
  86. RT_MEMORYINFO_HBM_HUGE, // Hugepage memory of HBM
  87. RT_MEMORYINFO_HBM_NORMAL, // Normal memory of HBM
  88. RT_MEMORYINFO_DDR_P2P_HUGE, // Hugepage memory of DDR
  89. RT_MEMORYINFO_DDR_P2P_NORMAL, // Normal memory of DDR
  90. RT_MEMORYINFO_HBM_P2P_HUGE, // Hugepage memory of HBM
  91. RT_MEMORYINFO_HBM_P2P_NORMAL, // Normal memory of HBM
  92. } rtMemInfoType_t;
  93. typedef enum tagRtRecudeKind {
  94. RT_MEMCPY_SDMA_AUTOMATIC_ADD = 10, // D2D, SDMA inline reduce, include 1P, and P2P
  95. RT_MEMCPY_SDMA_AUTOMATIC_MAX = 11,
  96. RT_MEMCPY_SDMA_AUTOMATIC_MIN = 12,
  97. RT_MEMCPY_SDMA_AUTOMATIC_EQUAL = 13,
  98. RT_RECUDE_KIND_END = 14,
  99. } rtRecudeKind_t;
  100. typedef enum tagRtDataType {
  101. RT_DATA_TYPE_FP32 = 0, // fp32
  102. RT_DATA_TYPE_FP16 = 1, // fp16
  103. RT_DATA_TYPE_INT16 = 2, // int16
  104. RT_DATA_TYPE_INT4 = 3, // int4
  105. RT_DATA_TYPE_INT8 = 4, // int8
  106. RT_DATA_TYPE_INT32 = 5, // int32
  107. RT_DATA_TYPE_BFP16 = 6, // bfp16
  108. RT_DATA_TYPE_BFP32 = 7, // bfp32
  109. RT_DATA_TYPE_UINT8 = 8, // uint8
  110. RT_DATA_TYPE_UINT16 = 9, // uint16
  111. RT_DATA_TYPE_UINT32 = 10, // uint32
  112. RT_DATA_TYPE_END = 11,
  113. } rtDataType_t;
  114. /**
  115. * @ingroup dvrt_mem
  116. * @brief memory copy channel type
  117. */
  118. typedef enum tagRtMemcpyChannelType {
  119. RT_MEMCPY_CHANNEL_TYPE_INNER = 0, // 1P
  120. RT_MEMCPY_CHANNEL_TYPE_PCIe,
  121. RT_MEMCPY_CHANNEL_TYPE_HCCs, // not support now
  122. RT_MEMCPY_CHANNEL_TYPE_RESERVED,
  123. } rtMemcpyChannelType_t;
  124. /**
  125. * @ingroup rt_kernel
  126. * @brief ai core memory size
  127. */
  128. typedef struct rtAiCoreMemorySize {
  129. uint32_t l0ASize;
  130. uint32_t l0BSize;
  131. uint32_t l0CSize;
  132. uint32_t l1Size;
  133. uint32_t ubSize;
  134. uint32_t l2Size;
  135. uint32_t l2PageNum;
  136. uint32_t blockSize;
  137. uint64_t bankSize;
  138. uint64_t bankNum;
  139. uint64_t burstInOneBlock;
  140. uint64_t bankGroupNum;
  141. } rtAiCoreMemorySize_t;
  142. /**
  143. * @ingroup dvrt_mem
  144. * @brief memory type
  145. */
  146. typedef enum tagRtMemoryType {
  147. RT_MEMORY_TYPE_HOST = 1,
  148. RT_MEMORY_TYPE_DEVICE = 2,
  149. RT_MEMORY_TYPE_SVM = 3,
  150. RT_MEMORY_TYPE_DVPP = 4
  151. } rtMemoryType_t;
  152. /**
  153. * @ingroup dvrt_mem
  154. * @brief memory attribute
  155. */
  156. typedef struct tagRtPointerAttributes {
  157. rtMemoryType_t memoryType; // host memory or device memory
  158. rtMemoryType_t locationType;
  159. uint32_t deviceID; // device ID
  160. uint32_t pageSize;
  161. } rtPointerAttributes_t;
  162. typedef struct {
  163. const char_t *name;
  164. const uint64_t size;
  165. uint32_t flag;
  166. } rtMallocHostSharedMemoryIn;
  167. typedef struct {
  168. int32_t fd;
  169. void *ptr;
  170. void *devPtr;
  171. } rtMallocHostSharedMemoryOut;
  172. typedef struct {
  173. const char_t *name;
  174. const uint64_t size;
  175. int32_t fd;
  176. void *ptr;
  177. void *devPtr;
  178. } rtFreeHostSharedMemoryIn;
  179. /**
  180. * @ingroup dvrt_mem
  181. * @brief alloc device memory
  182. * @param [in|out] devPtr memory pointer
  183. * @param [in] size memory size
  184. * @param [in] type memory type
  185. * @return RT_ERROR_NONE for ok
  186. * @return RT_ERROR_INVALID_VALUE for error input
  187. */
  188. RTS_API rtError_t rtMalloc(void **devPtr, uint64_t size, rtMemType_t type);
  189. /**
  190. * @ingroup dvrt_mem
  191. * @brief free device memory
  192. * @param [in|out] devPtr memory pointer
  193. * @return RT_ERROR_NONE for ok
  194. * @return RT_ERROR_INVALID_VALUE for error input
  195. */
  196. RTS_API rtError_t rtFree(void *devPtr);
  197. /**
  198. * @ingroup dvrt_mem
  199. * @brief alloc device memory for dvpp
  200. * @param [in|out] devPtr memory pointer
  201. * @param [in] size memory size
  202. * @return RT_ERROR_NONE for ok
  203. * @return RT_ERROR_INVALID_VALUE for error input
  204. */
  205. RTS_API rtError_t rtDvppMalloc(void **devPtr, uint64_t size);
  206. /**
  207. * @ingroup dvrt_mem
  208. * @brief free device memory for dvpp
  209. * @param [in|out] devPtr memory pointer
  210. * @return RT_ERROR_NONE for ok
  211. * @return RT_ERROR_INVALID_VALUE for error input
  212. */
  213. RTS_API rtError_t rtDvppFree(void *devPtr);
  214. /**
  215. * @ingroup dvrt_mem
  216. * @brief alloc host memory
  217. * @param [in|out] hostPtr memory pointer
  218. * @param [in] size memory size
  219. * @return RT_ERROR_NONE for ok
  220. * @return RT_ERROR_INVALID_VALUE for error input
  221. */
  222. RTS_API rtError_t rtMallocHost(void **hostPtr, uint64_t size);
  223. /**
  224. * @ingroup dvrt_mem
  225. * @brief free host memory
  226. * @param [in] hostPtr memory pointer
  227. * @return RT_ERROR_NONE for ok
  228. * @return RT_ERROR_INVALID_VALUE for error input
  229. */
  230. RTS_API rtError_t rtFreeHost(void *hostPtr);
  231. /**
  232. * @ingroup dvrt_mem
  233. * @brief alloc host shared memory
  234. * @param [in] in alloc host shared memory inputPara pointer
  235. * @param [in] out alloc host shared memory outputInfo pointer
  236. * @return RT_ERROR_NONE for ok
  237. * @return RT_ERROR_INVALID_VALUE for error input
  238. */
  239. RTS_API rtError_t rtMallocHostSharedMemory(rtMallocHostSharedMemoryIn *in,
  240. rtMallocHostSharedMemoryOut *out);
  241. /**
  242. * @ingroup dvrt_mem
  243. * @brief free host memory
  244. * @param [in] in free host shared memory inputPara pointer
  245. * @return RT_ERROR_NONE for ok
  246. * @return RT_ERROR_INVALID_VALUE for error input
  247. */
  248. RTS_API rtError_t rtFreeHostSharedMemory(rtFreeHostSharedMemoryIn *in);
  249. /**
  250. * @ingroup dvrt_mem
  251. * @brief alloc managed memory
  252. * @param [in|out] ptr memory pointer
  253. * @param [in] size memory size
  254. * @param [in] flag reserved, set to 0.
  255. * @return RT_ERROR_NONE for ok
  256. * @return RT_ERROR_INVALID_VALUE for error input
  257. */
  258. RTS_API rtError_t rtMemAllocManaged(void **ptr, uint64_t size, uint32_t flag);
  259. /**
  260. * @ingroup dvrt_mem
  261. * @brief free managed memory
  262. * @param [in] ptr memory pointer
  263. * @return RT_ERROR_NONE for ok
  264. * @return RT_ERROR_INVALID_VALUE for error input
  265. */
  266. RTS_API rtError_t rtMemFreeManaged(void *ptr);
  267. /**
  268. * @ingroup dvrt_mem
  269. * @brief alloc cached device memory
  270. * @param [in| devPtr memory pointer
  271. * @param [in] size memory size
  272. * @param [in] type memory type
  273. * @return RT_ERROR_NONE for ok
  274. */
  275. RTS_API rtError_t rtMallocCached(void **devPtr, uint64_t size, rtMemType_t type);
  276. /**
  277. * @ingroup dvrt_mem
  278. * @brief flush device mempory
  279. * @param [in] base virtal base address
  280. * @param [in] len memory size
  281. * @return RT_ERROR_NONE for ok, errno for failed
  282. */
  283. RTS_API rtError_t rtFlushCache(void *base, size_t len);
  284. /**
  285. * @ingroup dvrt_mem
  286. * @brief invalid device mempory
  287. * @param [in] base virtal base address
  288. * @param [in] len memory size
  289. * @return RT_ERROR_NONE for ok, errno for failed
  290. */
  291. RTS_API rtError_t rtInvalidCache(void *base, size_t len);
  292. /**
  293. * @ingroup dvrt_mem
  294. * @brief synchronized memcpy
  295. * @param [in] dst destination address pointer
  296. * @param [in] Max length of destination address memory
  297. * @param [in] src source address pointer
  298. * @param [in] cnt the number of byte to copy
  299. * @param [in] kind memcpy type
  300. * @return RT_ERROR_NONE for ok
  301. * @return RT_ERROR_INVALID_VALUE for error input
  302. */
  303. RTS_API rtError_t rtMemcpy(void *dst, uint64_t destMax, const void *src, uint64_t cnt, rtMemcpyKind_t kind);
  304. /**
  305. * @ingroup dvrt_mem
  306. * @brief host task memcpy
  307. * @param [in] dst destination address pointer
  308. * @param [in] destMax length of destination address memory
  309. * @param [in] src source address pointer
  310. * @param [in] cnt the number of byte to copy
  311. * @param [in] kind memcpy type
  312. * @param [in] stm task stream
  313. * @return RT_ERROR_NONE for ok, errno for failed
  314. */
  315. RTS_API rtError_t rtMemcpyHostTask(void * const dst, const uint64_t destMax, const void * const src,
  316. const uint64_t cnt, rtMemcpyKind_t kind, rtStream_t stm);
  317. /**
  318. * @ingroup dvrt_mem
  319. * @brief asynchronized memcpy
  320. * @param [in] dst destination address pointer
  321. * @param [in] Max length of destination address memory
  322. * @param [in] src source address pointer
  323. * @param [in] cnt the number of byte to copy
  324. * @param [in] kind memcpy type
  325. * @param [in] stm asynchronized task stream
  326. * @return RT_ERROR_NONE for ok
  327. * @return RT_ERROR_INVALID_VALUE for error input
  328. */
  329. RTS_API rtError_t rtMemcpyAsync(void *dst, uint64_t destMax, const void *src, uint64_t cnt, rtMemcpyKind_t kind,
  330. rtStream_t stm);
  331. /**
  332. * @ingroup dvrt_mem
  333. * @brief asynchronized reduce memcpy
  334. * @param [in] dst destination address pointer
  335. * @param [in] Max length of destination address memory
  336. * @param [in] src source address pointer
  337. * @param [in] cnt the number of byte to copy
  338. * @param [in] kind memcpy type
  339. * @param [in] type data type
  340. * @param [in] stm asynchronized task stream
  341. * @return RT_ERROR_NONE for ok
  342. * @return RT_ERROR_INVALID_VALUE for error input
  343. */
  344. RTS_API rtError_t rtReduceAsync(void *dst, uint64_t destMax, const void *src, uint64_t cnt, rtRecudeKind_t kind,
  345. rtDataType_t type, rtStream_t stm);
  346. /**
  347. * @ingroup dvrt_mem
  348. * @brief synchronized memcpy2D
  349. * @param [in] dst destination address pointer
  350. * @param [in] dstPitch pitch of destination memory
  351. * @param [in] src source address pointer
  352. * @param [in] srcPitch pitch of source memory
  353. * @param [in] width width of matrix transfer
  354. * @param [in] height height of matrix transfer
  355. * @param [in] kind memcpy type
  356. * @return RT_ERROR_NONE for ok
  357. * @return RT_ERROR_INVALID_VALUE for error input
  358. */
  359. RTS_API rtError_t rtMemcpy2d(void *dst, uint64_t dstPitch, const void *src, uint64_t srcPitch, uint64_t width,
  360. uint64_t height, rtMemcpyKind_t kind);
  361. /**
  362. * @ingroup dvrt_mem
  363. * @brief asynchronized memcpy2D
  364. * @param [in] dst destination address pointer
  365. * @param [in] dstPitch length of destination address memory
  366. * @param [in] src source address pointer
  367. * @param [in] srcPitch length of destination address memory
  368. * @param [in] width width of matrix transfer
  369. * @param [in] height height of matrix transfer
  370. * @param [in] kind memcpy type
  371. * @param [in] stm asynchronized task stream
  372. * @return RT_ERROR_NONE for ok
  373. * @return RT_ERROR_INVALID_VALUE for error input
  374. */
  375. RTS_API rtError_t rtMemcpy2dAsync(void *dst, uint64_t dstPitch, const void *src, uint64_t srcPitch, uint64_t width,
  376. uint64_t height, rtMemcpyKind_t kind, rtStream_t stm);
  377. /**
  378. * @ingroup dvrt_mem
  379. * @brief query memory size
  380. * @param [in] aiCoreMemorySize
  381. * @return RT_ERROR_NONE for ok, errno for failed
  382. * @return RT_ERROR_INVALID_VALUE for error input
  383. */
  384. RTS_API rtError_t rtAiCoreMemorySizes(rtAiCoreMemorySize_t *aiCoreMemorySize);
  385. /**
  386. * @ingroup dvrt_mem
  387. * @brief set memory size, Setting before model reasoning, Bright screen to prevent model can not be fully
  388. integrated network due to memory limitations.Requirement come from JiaMinHu.Only use for Tiny.
  389. * @param [in] aiCoreMemorySize
  390. * @return RT_ERROR_NONE for ok, errno for failed
  391. * @return RT_ERROR_INVALID_VALUE for error input
  392. */
  393. RTS_API rtError_t rtSetAiCoreMemorySizes(rtAiCoreMemorySize_t *aiCoreMemorySize);
  394. /**
  395. * @ingroup dvrt_mem
  396. * @brief Specifies how memory is use
  397. * @param [in] devPtr memory pointer
  398. * @param [in] count memory count
  399. * @param [in] advise reserved, set to 1
  400. * @return RT_ERROR_NONE for ok
  401. * @return others for error
  402. */
  403. RTS_API rtError_t rtMemAdvise(void *devPtr, uint64_t count, uint32_t advise);
  404. /**
  405. * @ingroup dvrt_mem
  406. * @brief set memory with uint32_t value
  407. * @param [in] devPtr
  408. * @param [in] Max length of destination address memory
  409. * @param [in] val
  410. * @param [in] cnt byte num
  411. * @return RT_ERROR_NONE for ok, errno for failed
  412. * @return RT_ERROR_INVALID_VALUE for error input
  413. */
  414. RTS_API rtError_t rtMemset(void *devPtr, uint64_t destMax, uint32_t val, uint64_t cnt);
  415. /**
  416. * @ingroup dvrt_mem
  417. * @brief set memory with uint32_t value async
  418. * @param [in] devPtr
  419. * @param [in] Max length of destination address memory
  420. * @param [in] val
  421. * @param [in] cnt byte num
  422. * @param [in] stm
  423. * @return RT_ERROR_NONE for ok, errno for failed
  424. * @return RT_ERROR_INVALID_VALUE for error input
  425. */
  426. RTS_API rtError_t rtMemsetAsync(void *ptr, uint64_t destMax, uint32_t val, uint64_t cnt, rtStream_t stm);
  427. /**
  428. * @ingroup dvrt_mem
  429. * @brief get current device memory total and free
  430. * @param [out] freeSize
  431. * @param [out] totalSize
  432. * @return RT_ERROR_NONE for ok, errno for failed
  433. * @return RT_ERROR_INVALID_VALUE for error input
  434. */
  435. RTS_API rtError_t rtMemGetInfo(size_t *freeSize, size_t *totalSize);
  436. /**
  437. * @ingroup dvrt_mem
  438. * @brief get current device memory total and free
  439. * @param [in] memInfoType
  440. * @param [out] freeSize
  441. * @param [out] totalSize
  442. * @return RT_ERROR_NONE for ok, errno for failed
  443. */
  444. RTS_API rtError_t rtMemGetInfoEx(rtMemInfoType_t memInfoType, size_t *freeSize, size_t *totalSize);
  445. /**
  446. * @ingroup dvrt_mem
  447. * @brief set memory with uint32_t value
  448. * @param [in] devPtr
  449. * @param [in] len
  450. * @param [in] devId
  451. * @return RT_ERROR_NONE for ok, errno for failed
  452. * @return RT_ERROR_INVALID_VALUE for error input
  453. */
  454. RTS_API rtError_t rtMemPrefetchToDevice(void *devPtr, uint64_t len, int32_t devId);
  455. /**
  456. * @ingroup dvrt_mem
  457. * @brief get memory attribute:Host or Device
  458. * @param [in] ptr
  459. * @param [out] attributes
  460. * @return RT_ERROR_NONE for ok, errno for failed
  461. * @return RT_ERROR_INVALID_VALUE for error input
  462. */
  463. RTS_API rtError_t rtPointerGetAttributes(rtPointerAttributes_t *attributes, const void *ptr);
  464. /**
  465. * @ingroup dvrt_mem
  466. * @brief make memory shared interprocess and assigned a name
  467. * @param [in] ptr device memory address pointer
  468. * @param [in] name identification name
  469. * @param [in] byteCount identification byteCount
  470. * @return RT_ERROR_NONE for ok
  471. * @return RT_ERROR_INVALID_VALUE for error input
  472. * @return RT_ERROR_DRV_ERR for driver error
  473. */
  474. RTS_API rtError_t rtIpcSetMemoryName(const void *ptr, uint64_t byteCount, char_t *name, uint32_t len);
  475. /**
  476. * @ingroup dvrt_mem
  477. * @brief destroy a interprocess shared memory
  478. * @param [in] name identification name
  479. * @return RT_ERROR_NONE for ok
  480. * @return RT_ERROR_INVALID_VALUE for error input
  481. * @return RT_ERROR_DRV_ERR for driver error
  482. */
  483. RTS_API rtError_t rtIpcDestroyMemoryName(const char_t *name);
  484. /**
  485. * @ingroup dvrt_mem
  486. * @brief open a interprocess shared memory
  487. * @param [in|out] ptr device memory address pointer
  488. * @param [in] name identification name
  489. * @return RT_ERROR_NONE for ok
  490. * @return RT_ERROR_INVALID_VALUE for error input
  491. * @return RT_ERROR_DRV_ERR for driver error
  492. */
  493. RTS_API rtError_t rtIpcOpenMemory(void **ptr, const char_t *name);
  494. /**
  495. * @ingroup dvrt_mem
  496. * @brief close a interprocess shared memory
  497. * @param [in] ptr device memory address pointer
  498. * @param [in] name identification name
  499. * @return RT_ERROR_NONE for ok
  500. * @return RT_ERROR_INVALID_VALUE for error input
  501. * @return RT_ERROR_DRV_ERR for driver error
  502. */
  503. RTS_API rtError_t rtIpcCloseMemory(const void *ptr);
  504. /**
  505. * @ingroup dvrt_mem
  506. * @brief HCCL Async memory cpy
  507. * @param [in] sqIndex sq index
  508. * @param [in] wqeIndex moudle index
  509. * @param [in] stm asynchronized task stream
  510. * @return RT_ERROR_NONE for ok
  511. * @return RT_ERROR_INVALID_VALUE for error input
  512. * @return RT_ERROR_DRV_ERR for driver error
  513. */
  514. RTS_API rtError_t rtRDMASend(uint32_t sqIndex, uint32_t wqeIndex, rtStream_t stm);
  515. /**
  516. * @ingroup dvrt_mem
  517. * @brief Ipc set mem pid
  518. * @param [in] name name to be queried
  519. * @param [in] pid process id
  520. * @param [in] num length of pid[]
  521. * @return RT_ERROR_NONE for ok
  522. * @return RT_ERROR_INVALID_VALUE for error input
  523. * @return RT_ERROR_DRV_ERR for driver error
  524. */
  525. RTS_API rtError_t rtSetIpcMemPid(const char_t *name, int32_t pid[], int32_t num);
  526. /**
  527. * @ingroup dvrt_mem
  528. * @brief HCCL Async memory cpy
  529. * @param [in] dbindex single device 0
  530. * @param [in] dbinfo doorbell info
  531. * @param [in] stm asynchronized task stream
  532. * @return RT_ERROR_NONE for ok
  533. * @return RT_ERROR_INVALID_VALUE for error input
  534. * @return RT_ERROR_DRV_ERR for driver error
  535. */
  536. RTS_API rtError_t rtRDMADBSend(uint32_t dbIndex, uint64_t dbInfo, rtStream_t stm);
  537. #if defined(__cplusplus)
  538. }
  539. #endif
  540. #endif // CCE_RUNTIME_MEM_H

图引擎模块(GE)是MindSpore的一个子模块,其代码由C++实现,位于前端模块ME和底层硬件之间,起到承接作用。图引擎模块以ME下发的图作为输入,然后进行一系列的深度图优化操作,最后输出一张可以在底层硬件上高效运行的图。GE针对昇腾AI处理器的硬件结构特点,做了特定的优化工作,以此来充分发挥出昇腾AI处理器的强大算力。在进行模型训练/推理时,GE会被自动调用而用户并不感知。GE主要由GE API和GE Core两部分组成,详细的架构图如下所示