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.

mmpa_win.h 16 kB

5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  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 MMPA_WIN_MMPA_WIN_H
  17. #define MMPA_WIN_MMPA_WIN_H
  18. #ifdef __cplusplus
  19. #if __cplusplus
  20. extern "C" {
  21. #endif /* __cpluscplus */
  22. #endif /* __cpluscplus */
  23. #ifdef MMPA_DLL
  24. #define MMPA_DLL_API __declspec(dllexport)
  25. #else
  26. #define MMPA_DLL_API __declspec(dllimport)
  27. #endif
  28. #define MMPA_MACINFO_DEFAULT_SIZE 18
  29. #define MMPA_CPUDESC_DEFAULT_SIZE 64
  30. MMPA_DLL_API extern char *optarg;
  31. MMPA_DLL_API extern int opterr;
  32. MMPA_DLL_API extern int optind;
  33. MMPA_DLL_API extern int optopt;
  34. #pragma section(".CRT$XCU", long, read)
  35. #pragma section(".CRT$XPU", long, read)
  36. typedef HANDLE mmMutex_t;
  37. typedef HANDLE mmThread;
  38. typedef HANDLE mmProcess;
  39. typedef HANDLE mmPollHandle;
  40. typedef HANDLE mmPipeHandle;
  41. typedef HANDLE mmCompletionHandle;
  42. typedef CRITICAL_SECTION mmMutexFC;
  43. typedef CONDITION_VARIABLE mmCond;
  44. typedef VOID *(*userProcFunc)(VOID *pulArg);
  45. typedef struct {
  46. userProcFunc procFunc;
  47. VOID *pulArg;
  48. } mmUserBlock_t;
  49. typedef DWORD mmThreadKey;
  50. typedef SYSTEMTIME mmSystemTime_t;
  51. typedef HANDLE mmSem_t;
  52. typedef SOCKET mmSockHandle;
  53. typedef struct sockaddr mmSockAddr;
  54. typedef int mmSocklen_t;
  55. typedef int mmSemTimeout_t;
  56. typedef long mmAtomicType;
  57. typedef DWORD mmExitCode;
  58. typedef int mmKey_t;
  59. typedef HANDLE mmMsgid;
  60. typedef INT32 mmSsize_t;
  61. typedef enum {
  62. DT_DIR = FILE_ATTRIBUTE_DIRECTORY,
  63. } mmDtype;
  64. typedef struct {
  65. unsigned char d_type;
  66. char d_name[MAX_PATH];
  67. } mmDirent;
  68. typedef int (*mmFilter)(const mmDirent *entry);
  69. typedef int (*mmSort)(const mmDirent **a, const mmDirent **b);
  70. typedef struct {
  71. VOID *sendBuf;
  72. INT32 sendLen;
  73. } mmIovSegment;
  74. typedef PVOID mmInAddr;
  75. typedef enum {
  76. pollTypeRead = 1,
  77. pollTypeRecv,
  78. pollTypeIoctl,
  79. } mmPollType;
  80. typedef struct {
  81. HANDLE completionHandle;
  82. mmPollType overlapType;
  83. OVERLAPPED oa;
  84. } mmComPletionKey, *pmmComPletionKey;
  85. typedef struct {
  86. VOID *priv;
  87. mmPollHandle bufHandle;
  88. mmPollType bufType;
  89. VOID *buf;
  90. UINT32 bufLen;
  91. UINT32 bufRes;
  92. } mmPollData, *pmmPollData;
  93. typedef VOID (*mmPollBack)(pmmPollData);
  94. typedef struct {
  95. mmPollHandle handle;
  96. mmPollType pollType;
  97. INT32 ioctlCode;
  98. mmComPletionKey completionKey;
  99. } mmPollfd;
  100. typedef struct {
  101. OVERLAPPED oa;
  102. HANDLE completionHandle;
  103. WSABUF DataBuf;
  104. } PRE_IO_DATA, *PPRE_IO_DATA;
  105. typedef OVERLAPPED mmOverLap;
  106. typedef struct {
  107. UINT32 createFlag;
  108. INT32 oaFlag;
  109. } mmCreateFlag;
  110. typedef struct {
  111. VOID *inbuf;
  112. INT32 inbufLen;
  113. VOID *outbuf;
  114. INT32 outbufLen;
  115. mmOverLap *oa;
  116. } mmIoctlBuf;
  117. typedef struct {
  118. HANDLE timerQueue;
  119. HANDLE timerHandle;
  120. } mmTimerHandle;
  121. typedef struct {
  122. LONG tv_sec;
  123. LONG tv_usec;
  124. } mmTimeval;
  125. typedef struct {
  126. INT32 tz_minuteswest;
  127. INT32 tz_dsttime;
  128. } mmTimezone;
  129. typedef struct {
  130. LONG tv_sec;
  131. LONG tv_nsec;
  132. } mmTimespec;
  133. typedef mmTimerHandle mmTimer;
  134. #define mmTLS __declspec(thread)
  135. typedef struct stat mmStat_t;
  136. typedef struct _stat64 mmStat64_t;
  137. typedef int mmMode_t;
  138. typedef int MODE;
  139. typedef struct {
  140. const char *name;
  141. int has_arg;
  142. int *flag;
  143. int val;
  144. } mmStructOption;
  145. typedef struct {
  146. ULONGLONG totalSize;
  147. ULONGLONG freeSize;
  148. ULONGLONG availSize;
  149. } mmDiskSize;
  150. typedef struct {
  151. char addr[MMPA_MACINFO_DEFAULT_SIZE]; // ex:aa-bb-cc-dd-ee-ff\0
  152. } mmMacInfo;
  153. typedef struct {
  154. char arch[MMPA_CPUDESC_DEFAULT_SIZE];
  155. char manufacturer[MMPA_CPUDESC_DEFAULT_SIZE]; // vendor
  156. char version[MMPA_CPUDESC_DEFAULT_SIZE]; // modelname
  157. INT32 frequency; // cpu frequency
  158. INT32 maxFrequency; // max speed
  159. INT32 ncores; // cpu cores
  160. INT32 nthreads; // cpu thread count
  161. INT32 ncounts; // logical cpu nums
  162. } mmCpuDesc;
  163. typedef struct {
  164. char **argv;
  165. INT32 argvCount;
  166. char **envp;
  167. INT32 envpCount;
  168. } mmArgvEnv;
  169. typedef struct {
  170. INT32 detachFlag;
  171. INT32 priorityFlag;
  172. INT32 priority;
  173. INT32 policyFlag;
  174. INT32 policy;
  175. INT32 stackFlag;
  176. UINT32 stackSize;
  177. } mmThreadAttr;
  178. typedef VOID (*mmPf)(VOID);
  179. #define M_FILE_RDONLY GENERIC_READ
  180. #define M_FILE_WRONLY GENERIC_WRITE
  181. #define M_FILE_RDWR (GENERIC_READ | GENERIC_WRITE)
  182. #define M_FILE_CREAT OPEN_ALWAYS
  183. #define M_RDONLY _O_RDONLY
  184. #define M_WRONLY _O_WRONLY
  185. #define M_RDWR _O_RDWR
  186. #define M_CREAT _O_CREAT
  187. #define M_BINARY _O_BINARY
  188. #define M_IREAD _S_IREAD
  189. #define M_IRUSR _S_IREAD
  190. #define M_IWRITE _S_IWRITE
  191. #define M_IWUSR _S_IWRITE
  192. #define M_IXUSR 0
  193. #define M_MSG_CREAT 1
  194. #define M_MSG_EXCL 2
  195. #define M_MSG_NOWAIT 3
  196. #define M_WAIT_NOHANG 1
  197. #define M_WAIT_UNTRACED 2
  198. #define M_UMASK_USRREAD _S_IREAD
  199. #define M_UMASK_GRPREAD _S_IREAD
  200. #define M_UMASK_OTHREAD _S_IREAD
  201. #define M_UMASK_USRWRITE _S_IWRITE
  202. #define M_UMASK_GRPWRITE _S_IWRITE
  203. #define M_UMASK_OTHWRITE _S_IWRITE
  204. #define M_UMASK_USREXEC 0
  205. #define M_UMASK_GRPEXEC 0
  206. #define M_UMASK_OTHEXEC 0
  207. #define mmConstructor(x) __declspec(allocate(".CRT$XCU")) mmPf con = x
  208. #define mmDestructor(x) __declspec(allocate(".CRT$XPU")) mmPf de = x
  209. #define MMPA_PRINT_ERROR ((opterr) && (*options != ':'))
  210. #define MMPA_FLAG_PERMUTE 0x01 // permute non-options to the end of argv
  211. #define MMPA_FLAG_ALLARGS 0x02 // treat non-options as args to option "-1"
  212. #define MMPA_FLAG_LONGONLY 0x04 // operate as getopt_long_only
  213. /* return values */
  214. #define MMPA_BADCH (INT32)'?'
  215. #define MMPA_BADARG ((*options == ':') ? (INT32)':' : (INT32)'?')
  216. #define MMPA_INORDER (INT32)1
  217. #define MMPA_NO_ARGUMENT 0
  218. #define MMPA_REQUIRED_ARGUMENT 1
  219. #define MMPA_OPTIONAL_ARGUMENT 2
  220. #define MMPA_EMSG ""
  221. #define MMPA_MAX_PATH MAX_PATH
  222. #define M_F_OK 0
  223. #define M_W_OK 2
  224. #define M_R_OK 4
  225. #define MMPA_RTLD_NOW 0
  226. #define MMPA_RTLD_GLOBAL 0
  227. #define MMPA_DL_EXT_NAME ".dll"
  228. #define __attribute__(v)
  229. _declspec(dllexport) INT32 mmCreateTask(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  230. _declspec(dllexport) INT32 mmJoinTask(mmThread *threadHandle);
  231. _declspec(dllexport) INT32 mmMutexInit(mmMutex_t *mutex);
  232. _declspec(dllexport) INT32 mmMutexLock(mmMutex_t *mutex);
  233. _declspec(dllexport) INT32 mmMutexUnLock(mmMutex_t *mutex);
  234. _declspec(dllexport) INT32 mmMutexDestroy(mmMutex_t *mutex);
  235. _declspec(dllexport) INT32 mmCondInit(mmCond *cond);
  236. _declspec(dllexport) INT32 mmCondLockInit(mmMutexFC *mutex);
  237. _declspec(dllexport) INT32 mmCondLock(mmMutexFC *mutex);
  238. _declspec(dllexport) INT32 mmCondUnLock(mmMutexFC *mutex);
  239. _declspec(dllexport) INT32 mmCondLockDestroy(mmMutexFC *mutex);
  240. _declspec(dllexport) INT32 mmCondWait(mmCond *cond, mmMutexFC *mutex);
  241. _declspec(dllexport) INT32 mmCondTimedWait(mmCond *cond, mmMutexFC *mutex, UINT32 milliSecond);
  242. _declspec(dllexport) INT32 mmCondNotify(mmCond *cond);
  243. _declspec(dllexport) INT32 mmCondNotifyAll(mmCond *cond);
  244. _declspec(dllexport) INT32 mmCondDestroy(mmCond *cond);
  245. _declspec(dllexport) INT32 mmGetPid(VOID);
  246. _declspec(dllexport) INT32 mmGetTid(VOID);
  247. _declspec(dllexport) INT32 mmGetPidHandle(mmProcess *processHandle);
  248. _declspec(dllexport) INT32 mmGetLocalTime(mmSystemTime_t *sysTime);
  249. _declspec(dllexport) INT32 mmSemInit(mmSem_t *sem, UINT32 value);
  250. _declspec(dllexport) INT32 mmSemWait(mmSem_t *sem);
  251. _declspec(dllexport) INT32 mmSemPost(mmSem_t *sem);
  252. _declspec(dllexport) INT32 mmSemDestroy(mmSem_t *sem);
  253. _declspec(dllexport) INT32 mmOpen(const CHAR *pathName, INT32 flags);
  254. _declspec(dllexport) INT32 mmOpen2(const CHAR *pathName, INT32 flags, MODE mode);
  255. _declspec(dllexport) INT32 mmClose(INT32 fd);
  256. _declspec(dllexport) mmSsize_t mmWrite(INT32 fd, VOID *buf, UINT32 bufLen);
  257. _declspec(dllexport) mmSsize_t mmRead(INT32 fd, VOID *buf, UINT32 bufLen);
  258. _declspec(dllexport) mmSockHandle mmSocket(INT32 sockFamily, INT32 type, INT32 protocol);
  259. _declspec(dllexport) INT32 mmBind(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t addrLen);
  260. _declspec(dllexport) INT32 mmListen(mmSockHandle sockFd, INT32 backLog);
  261. _declspec(dllexport) mmSockHandle mmAccept(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t *addrLen);
  262. _declspec(dllexport) INT32 mmConnect(mmSockHandle sockFd, mmSockAddr *addr, mmSocklen_t addrLen);
  263. _declspec(dllexport) INT32 mmCloseSocket(mmSockHandle sockFd);
  264. _declspec(dllexport) mmSsize_t mmSocketRecv(mmSockHandle sockFd, VOID *recvBuf, INT32 recvLen, INT32 recvFlag);
  265. _declspec(dllexport) mmSsize_t mmSocketSend(mmSockHandle sockFd, VOID *sendBuf, INT32 sendLen, INT32 sendFlag);
  266. _declspec(dllexport) INT32 mmSAStartup(VOID);
  267. _declspec(dllexport) INT32 mmSACleanup(VOID);
  268. _declspec(dllexport) VOID *mmDlopen(const CHAR *fileName, INT mode);
  269. _declspec(dllexport) VOID *mmDlsym(VOID *handle, CHAR *fileName);
  270. _declspec(dllexport) INT32 mmDlclose(VOID *handle);
  271. _declspec(dllexport) CHAR *mmDlerror(VOID);
  272. _declspec(dllexport) INT32
  273. mmCreateAndSetTimer(mmTimer *timerHandle, mmUserBlock_t *timerBlock, UINT milliSecond, UINT period);
  274. _declspec(dllexport) INT32 mmDeleteTimer(mmTimer timerHandle);
  275. _declspec(dllexport) INT32 mmStatGet(const CHAR *path, mmStat_t *buffer);
  276. _declspec(dllexport) INT32 mmStat64Get(const CHAR *path, mmStat64_t *buffer);
  277. _declspec(dllexport) INT32 mmMkdir(const CHAR *pathName, mmMode_t mode);
  278. _declspec(dllexport) INT32 mmSleep(UINT32 milliSecond);
  279. _declspec(dllexport) INT32 mmCreateTaskWithAttr(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  280. _declspec(dllexport) INT32 mmGetProcessPrio(mmProcess pid);
  281. _declspec(dllexport) INT32 mmSetProcessPrio(mmProcess pid, INT32 processPrio);
  282. _declspec(dllexport) INT32 mmGetThreadPrio(mmThread *threadHandle);
  283. _declspec(dllexport) INT32 mmSetThreadPrio(mmThread *threadHandle, INT32 threadPrio);
  284. _declspec(dllexport) INT32 mmAccess(const CHAR *pathName);
  285. _declspec(dllexport) INT32 mmAccess2(const CHAR *pathName, INT32 mode);
  286. _declspec(dllexport) INT32 mmRmdir(const CHAR *pathName);
  287. _declspec(dllexport) INT32 mmIoctl(mmProcess fd, INT32 ioctlCode, mmIoctlBuf *bufPtr);
  288. _declspec(dllexport) INT32 mmSemTimedWait(mmSem_t *sem, INT32 timeout);
  289. _declspec(dllexport) mmSsize_t mmWritev(mmSockHandle fd, mmIovSegment *iov, INT32 iovcnt);
  290. _declspec(dllexport) VOID mmMb();
  291. _declspec(dllexport) INT32 mmInetAton(const CHAR *addrStr, mmInAddr *addr);
  292. _declspec(dllexport) mmProcess mmOpenFile(const CHAR *fileName, UINT32 access, mmCreateFlag fileFlag);
  293. _declspec(dllexport) mmSsize_t mmReadFile(mmProcess fileId, VOID *buffer, INT32 len);
  294. _declspec(dllexport) mmSsize_t mmWriteFile(mmProcess fileId, VOID *buffer, INT32 len);
  295. _declspec(dllexport) INT32 mmCloseFile(mmProcess fileId);
  296. _declspec(dllexport) mmAtomicType mmSetData(mmAtomicType *ptr, mmAtomicType value);
  297. _declspec(dllexport) mmAtomicType mmValueInc(mmAtomicType *ptr, mmAtomicType value);
  298. _declspec(dllexport) mmAtomicType mmValueSub(mmAtomicType *ptr, mmAtomicType value);
  299. _declspec(dllexport) INT32 mmCreateTaskWithDetach(mmThread *threadHandle, mmUserBlock_t *funcBlock);
  300. _declspec(dllexport) INT32 mmCreateNamedPipe(mmPipeHandle pipe[], CHAR *pipeName[], INT32 waitMode);
  301. _declspec(dllexport) INT32 mmOpenNamePipe(mmPipeHandle pipe[], CHAR *pipeName[], INT32 waitMode);
  302. _declspec(dllexport) VOID mmCloseNamedPipe(mmPipeHandle namedPipe[]);
  303. _declspec(dllexport) INT32 mmCreatePipe(mmPipeHandle pipe[], CHAR *pipeName[], UINT32 pipeCount, INT32 waitMode);
  304. _declspec(dllexport) INT32 mmOpenPipe(mmPipeHandle pipe[], CHAR *pipeName[], UINT32 pipeCount, INT32 waitMode);
  305. _declspec(dllexport) VOID mmClosePipe(mmPipeHandle pipe[], UINT32 pipeCount);
  306. _declspec(dllexport) mmCompletionHandle mmCreateCompletionPort();
  307. _declspec(dllexport) VOID mmCloseCompletionPort(mmCompletionHandle handle);
  308. _declspec(dllexport) INT32 mmPoll(mmPollfd *fds, INT32 fdCount, INT32 timeout, mmCompletionHandle handleIOCP,
  309. pmmPollData polledData, mmPollBack pollBack);
  310. _declspec(dllexport) INT32 mmGetErrorCode();
  311. _declspec(dllexport) INT32 mmGetTimeOfDay(mmTimeval *timeVal, mmTimezone *timeZone);
  312. _declspec(dllexport) mmTimespec mmGetTickCount();
  313. _declspec(dllexport) INT32 mmGetRealPath(CHAR *path, CHAR *realPath);
  314. _declspec(dllexport) INT32 mmRealPath(const CHAR *path, CHAR *realPath, INT32 realPathLen);
  315. _declspec(dllexport) INT32 mmDup2(INT32 oldFd, INT32 newFd);
  316. _declspec(dllexport) INT32 mmUnlink(const CHAR *filename);
  317. _declspec(dllexport) INT32 mmChmod(const CHAR *filename, INT32 mode);
  318. _declspec(dllexport) INT32 mmFileno(FILE *stream);
  319. _declspec(dllexport) INT32 mmScandir(const CHAR *path, mmDirent ***entryList, mmFilter filterFunc, mmSort sort);
  320. _declspec(dllexport) VOID mmScandirFree(mmDirent **entryList, INT32 count);
  321. _declspec(dllexport) mmMsgid mmMsgCreate(mmKey_t key, INT32 msgFlag);
  322. _declspec(dllexport) mmMsgid mmMsgOpen(mmKey_t key, INT32 msgFlag);
  323. _declspec(dllexport) INT32 mmMsgRcv(mmMsgid msqid, VOID *buf, INT32 bufLen, INT32 msgFlag);
  324. _declspec(dllexport) INT32 mmMsgSnd(mmMsgid msqid, VOID *buf, INT32 bufLen, INT32 msgFlag);
  325. _declspec(dllexport) INT32 mmMsgClose(mmMsgid msqid);
  326. _declspec(dllexport) INT32 mmLocalTimeR(const time_t *timep, struct tm *result);
  327. _declspec(dllexport) INT32 mmGetOpt(INT32 argc, char *const *argv, const char *opts);
  328. _declspec(dllexport) INT32
  329. mmGetOptLong(INT32 argc, CHAR *const *argv, const CHAR *opts, const mmStructOption *longopts, INT32 *longindex);
  330. _declspec(dllexport) LONG mmLseek(INT32 fd, INT64 offset, INT32 seekFlag);
  331. _declspec(dllexport) INT32 mmFtruncate(mmProcess fd, UINT32 length);
  332. _declspec(dllexport) INT32 mmTlsCreate(mmThreadKey *key, VOID (*destructor)(VOID *));
  333. _declspec(dllexport) INT32 mmTlsSet(mmThreadKey key, const VOID *value);
  334. _declspec(dllexport) VOID *mmTlsGet(mmThreadKey key);
  335. _declspec(dllexport) INT32 mmTlsDelete(mmThreadKey key);
  336. _declspec(dllexport) INT32 mmGetOsType();
  337. _declspec(dllexport) INT32 mmFsync(mmProcess fd);
  338. _declspec(dllexport) INT32 mmChdir(const CHAR *path);
  339. _declspec(dllexport) INT32 mmUmask(INT32 pmode);
  340. _declspec(dllexport) INT32 mmWaitPid(mmProcess pid, INT32 *status, INT32 options);
  341. _declspec(dllexport) INT32 mmGetCwd(CHAR *buffer, INT32 maxLen);
  342. _declspec(dllexport) CHAR *mmStrTokR(CHAR *str, const CHAR *delim, CHAR **saveptr);
  343. _declspec(dllexport) INT32 mmGetEnv(const CHAR *name, CHAR *value, UINT32 len);
  344. _declspec(dllexport) INT32 mmSetEnv(const CHAR *name, const CHAR *value, INT32 overwrite);
  345. _declspec(dllexport) CHAR *mmDirName(CHAR *path);
  346. _declspec(dllexport) CHAR *mmBaseName(CHAR *path);
  347. _declspec(dllexport) INT32 mmGetDiskFreeSpace(const char *path, mmDiskSize *diskSize);
  348. _declspec(dllexport) INT32 mmSetThreadName(mmThread *threadHandle, const CHAR *name);
  349. _declspec(dllexport) INT32 mmGetThreadName(mmThread *threadHandle, CHAR *name, INT32 size);
  350. _declspec(dllexport) INT32 mmSetCurrentThreadName(const CHAR *name);
  351. _declspec(dllexport) INT32 mmGetCurrentThreadName(CHAR *name, INT32 size);
  352. _declspec(dllexport) INT32 mmGetFileSize(const CHAR *fileName, ULONGLONG *length);
  353. _declspec(dllexport) INT32 mmIsDir(const CHAR *fileName);
  354. _declspec(dllexport) INT32 mmGetOsName(CHAR *name, INT32 nameSize);
  355. _declspec(dllexport) INT32 mmGetOsVersion(CHAR *versionInfo, INT32 versionLength);
  356. _declspec(dllexport) INT32 mmGetMac(mmMacInfo **list, INT32 *count);
  357. _declspec(dllexport) INT32 mmGetMacFree(mmMacInfo *list, INT32 count);
  358. _declspec(dllexport) INT32 mmGetCpuInfo(mmCpuDesc **cpuInfo, INT32 *count);
  359. _declspec(dllexport) INT32 mmCpuInfoFree(mmCpuDesc *cpuInfo, INT32 count);
  360. _declspec(dllexport) INT32
  361. mmCreateProcess(const CHAR *fileName, const mmArgvEnv *env, const char *stdoutRedirectFile, mmProcess *id);
  362. _declspec(dllexport) INT32
  363. mmCreateTaskWithThreadAttr(mmThread *threadHandle, const mmUserBlock_t *funcBlock, const mmThreadAttr *threadAttr);
  364. #ifdef __cplusplus
  365. #if __cplusplus
  366. }
  367. #endif /* __cpluscplus */
  368. #endif /* __cpluscplus */
  369. #endif /* _MMPA_WIN_MMPA_WIN_H_ */

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