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

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