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

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