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 18 kB

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

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