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

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