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.

libnvrtc-wrap.h 16 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. // generated by wraplib.py
  2. // --- begin functions to be implemented
  3. #ifndef _WRAPLIB_API_CALL
  4. #define _WRAPLIB_API_CALL
  5. #endif
  6. #ifndef _WRAPLIB_CALLBACK
  7. #define _WRAPLIB_CALLBACK
  8. #endif
  9. #ifndef ON_ENTRY
  10. #define ON_ENTRY(x)
  11. #endif
  12. static void* get_library_handle();
  13. static void* resolve_library_func(void*, const char*);
  14. namespace {
  15. template <typename T>
  16. T on_init_failed(int func_idx);
  17. }
  18. // --- end functions to be implemented
  19. #include <cstddef>
  20. #include <mutex>
  21. extern "C" {
  22. const char _WRAPLIB_API_CALL* nvrtcGetErrorString(nvrtcResult arg0);
  23. nvrtcResult _WRAPLIB_API_CALL nvrtcVersion(int* arg0, int* arg1);
  24. nvrtcResult _WRAPLIB_API_CALL nvrtcGetNumSupportedArchs(int* arg0);
  25. nvrtcResult _WRAPLIB_API_CALL nvrtcGetSupportedArchs(int* arg0);
  26. nvrtcResult _WRAPLIB_API_CALL nvrtcCreateProgram(nvrtcProgram* arg0,
  27. const char* arg1,
  28. const char* arg2, int arg3,
  29. const char* const* arg4,
  30. const char* const* arg5);
  31. nvrtcResult _WRAPLIB_API_CALL nvrtcDestroyProgram(nvrtcProgram* arg0);
  32. nvrtcResult _WRAPLIB_API_CALL nvrtcCompileProgram(nvrtcProgram arg0, int arg1,
  33. const char* const* arg2);
  34. nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTXSize(nvrtcProgram arg0, size_t* arg1);
  35. nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTX(nvrtcProgram arg0, char* arg1);
  36. nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBINSize(nvrtcProgram arg0,
  37. size_t* arg1);
  38. nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBIN(nvrtcProgram arg0, char* arg1);
  39. nvrtcResult _WRAPLIB_API_CALL nvrtcGetProgramLogSize(nvrtcProgram arg0,
  40. size_t* arg1);
  41. nvrtcResult _WRAPLIB_API_CALL nvrtcGetProgramLog(nvrtcProgram arg0, char* arg1);
  42. nvrtcResult _WRAPLIB_API_CALL nvrtcAddNameExpression(nvrtcProgram arg0,
  43. const char* const arg1);
  44. nvrtcResult _WRAPLIB_API_CALL nvrtcGetLoweredName(nvrtcProgram arg0,
  45. const char* const arg1,
  46. const char** arg2);
  47. }
  48. static void load_library();
  49. static const char _WRAPLIB_API_CALL* nvrtcGetErrorString_init(
  50. nvrtcResult arg0) {
  51. load_library();
  52. return nvrtcGetErrorString(arg0);
  53. }
  54. static const char _WRAPLIB_API_CALL* nvrtcGetErrorString_error(nvrtcResult) {
  55. return on_init_failed<const char*>(0);
  56. }
  57. static nvrtcResult _WRAPLIB_API_CALL nvrtcVersion_init(int* arg0, int* arg1) {
  58. load_library();
  59. return nvrtcVersion(arg0, arg1);
  60. }
  61. static nvrtcResult _WRAPLIB_API_CALL nvrtcVersion_error(int*, int*) {
  62. return on_init_failed<nvrtcResult>(1);
  63. }
  64. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetNumSupportedArchs_init(int* arg0) {
  65. load_library();
  66. return nvrtcGetNumSupportedArchs(arg0);
  67. }
  68. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetNumSupportedArchs_error(int*) {
  69. return on_init_failed<nvrtcResult>(2);
  70. }
  71. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetSupportedArchs_init(int* arg0) {
  72. load_library();
  73. return nvrtcGetSupportedArchs(arg0);
  74. }
  75. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetSupportedArchs_error(int*) {
  76. return on_init_failed<nvrtcResult>(3);
  77. }
  78. static nvrtcResult _WRAPLIB_API_CALL nvrtcCreateProgram_init(
  79. nvrtcProgram* arg0, const char* arg1, const char* arg2, int arg3,
  80. const char* const* arg4, const char* const* arg5) {
  81. load_library();
  82. return nvrtcCreateProgram(arg0, arg1, arg2, arg3, arg4, arg5);
  83. }
  84. static nvrtcResult _WRAPLIB_API_CALL
  85. nvrtcCreateProgram_error(nvrtcProgram*, const char*, const char*, int,
  86. const char* const*, const char* const*) {
  87. return on_init_failed<nvrtcResult>(4);
  88. }
  89. static nvrtcResult _WRAPLIB_API_CALL
  90. nvrtcDestroyProgram_init(nvrtcProgram* arg0) {
  91. load_library();
  92. return nvrtcDestroyProgram(arg0);
  93. }
  94. static nvrtcResult _WRAPLIB_API_CALL nvrtcDestroyProgram_error(nvrtcProgram*) {
  95. return on_init_failed<nvrtcResult>(5);
  96. }
  97. static nvrtcResult _WRAPLIB_API_CALL
  98. nvrtcCompileProgram_init(nvrtcProgram arg0, int arg1, const char* const* arg2) {
  99. load_library();
  100. return nvrtcCompileProgram(arg0, arg1, arg2);
  101. }
  102. static nvrtcResult _WRAPLIB_API_CALL
  103. nvrtcCompileProgram_error(nvrtcProgram, int, const char* const*) {
  104. return on_init_failed<nvrtcResult>(6);
  105. }
  106. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTXSize_init(nvrtcProgram arg0,
  107. size_t* arg1) {
  108. load_library();
  109. return nvrtcGetPTXSize(arg0, arg1);
  110. }
  111. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTXSize_error(nvrtcProgram,
  112. size_t*) {
  113. return on_init_failed<nvrtcResult>(7);
  114. }
  115. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTX_init(nvrtcProgram arg0,
  116. char* arg1) {
  117. load_library();
  118. return nvrtcGetPTX(arg0, arg1);
  119. }
  120. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTX_error(nvrtcProgram, char*) {
  121. return on_init_failed<nvrtcResult>(8);
  122. }
  123. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBINSize_init(nvrtcProgram arg0,
  124. size_t* arg1) {
  125. load_library();
  126. return nvrtcGetCUBINSize(arg0, arg1);
  127. }
  128. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBINSize_error(nvrtcProgram,
  129. size_t*) {
  130. return on_init_failed<nvrtcResult>(9);
  131. }
  132. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBIN_init(nvrtcProgram arg0,
  133. char* arg1) {
  134. load_library();
  135. return nvrtcGetCUBIN(arg0, arg1);
  136. }
  137. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBIN_error(nvrtcProgram, char*) {
  138. return on_init_failed<nvrtcResult>(10);
  139. }
  140. static nvrtcResult _WRAPLIB_API_CALL
  141. nvrtcGetProgramLogSize_init(nvrtcProgram arg0, size_t* arg1) {
  142. load_library();
  143. return nvrtcGetProgramLogSize(arg0, arg1);
  144. }
  145. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetProgramLogSize_error(nvrtcProgram,
  146. size_t*) {
  147. return on_init_failed<nvrtcResult>(11);
  148. }
  149. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetProgramLog_init(nvrtcProgram arg0,
  150. char* arg1) {
  151. load_library();
  152. return nvrtcGetProgramLog(arg0, arg1);
  153. }
  154. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetProgramLog_error(nvrtcProgram,
  155. char*) {
  156. return on_init_failed<nvrtcResult>(12);
  157. }
  158. static nvrtcResult _WRAPLIB_API_CALL
  159. nvrtcAddNameExpression_init(nvrtcProgram arg0, const char* const arg1) {
  160. load_library();
  161. return nvrtcAddNameExpression(arg0, arg1);
  162. }
  163. static nvrtcResult _WRAPLIB_API_CALL
  164. nvrtcAddNameExpression_error(nvrtcProgram, const char* const) {
  165. return on_init_failed<nvrtcResult>(13);
  166. }
  167. static nvrtcResult _WRAPLIB_API_CALL nvrtcGetLoweredName_init(
  168. nvrtcProgram arg0, const char* const arg1, const char** arg2) {
  169. load_library();
  170. return nvrtcGetLoweredName(arg0, arg1, arg2);
  171. }
  172. static nvrtcResult _WRAPLIB_API_CALL
  173. nvrtcGetLoweredName_error(nvrtcProgram, const char* const, const char**) {
  174. return on_init_failed<nvrtcResult>(14);
  175. }
  176. static constexpr size_t NR_FUNC = 15;
  177. static void* g_func_table[NR_FUNC] = {(void*)(&nvrtcGetErrorString_init),
  178. (void*)(&nvrtcVersion_init),
  179. (void*)(&nvrtcGetNumSupportedArchs_init),
  180. (void*)(&nvrtcGetSupportedArchs_init),
  181. (void*)(&nvrtcCreateProgram_init),
  182. (void*)(&nvrtcDestroyProgram_init),
  183. (void*)(&nvrtcCompileProgram_init),
  184. (void*)(&nvrtcGetPTXSize_init),
  185. (void*)(&nvrtcGetPTX_init),
  186. (void*)(&nvrtcGetCUBINSize_init),
  187. (void*)(&nvrtcGetCUBIN_init),
  188. (void*)(&nvrtcGetProgramLogSize_init),
  189. (void*)(&nvrtcGetProgramLog_init),
  190. (void*)(&nvrtcAddNameExpression_init),
  191. (void*)(&nvrtcGetLoweredName_init)};
  192. static void* g_func_table_error[NR_FUNC] = {
  193. (void*)(&nvrtcGetErrorString_error),
  194. (void*)(&nvrtcVersion_error),
  195. (void*)(&nvrtcGetNumSupportedArchs_error),
  196. (void*)(&nvrtcGetSupportedArchs_error),
  197. (void*)(&nvrtcCreateProgram_error),
  198. (void*)(&nvrtcDestroyProgram_error),
  199. (void*)(&nvrtcCompileProgram_error),
  200. (void*)(&nvrtcGetPTXSize_error),
  201. (void*)(&nvrtcGetPTX_error),
  202. (void*)(&nvrtcGetCUBINSize_error),
  203. (void*)(&nvrtcGetCUBIN_error),
  204. (void*)(&nvrtcGetProgramLogSize_error),
  205. (void*)(&nvrtcGetProgramLog_error),
  206. (void*)(&nvrtcAddNameExpression_error),
  207. (void*)(&nvrtcGetLoweredName_error)};
  208. static const char* const g_func_name[NR_FUNC] = {"nvrtcGetErrorString",
  209. "nvrtcVersion",
  210. "nvrtcGetNumSupportedArchs",
  211. "nvrtcGetSupportedArchs",
  212. "nvrtcCreateProgram",
  213. "nvrtcDestroyProgram",
  214. "nvrtcCompileProgram",
  215. "nvrtcGetPTXSize",
  216. "nvrtcGetPTX",
  217. "nvrtcGetCUBINSize",
  218. "nvrtcGetCUBIN",
  219. "nvrtcGetProgramLogSize",
  220. "nvrtcGetProgramLog",
  221. "nvrtcAddNameExpression",
  222. "nvrtcGetLoweredName"};
  223. static void load_library() {
  224. static bool done = false;
  225. static std::mutex mtx;
  226. std::lock_guard<std::mutex> lg{mtx};
  227. if (done)
  228. return;
  229. void* handle = get_library_handle();
  230. for (size_t i = 0; i < NR_FUNC; ++i) {
  231. void* func;
  232. if (!handle) {
  233. func = nullptr;
  234. } else {
  235. func = resolve_library_func(handle, g_func_name[i]);
  236. }
  237. if (!func) {
  238. func = g_func_table_error[i];
  239. }
  240. __atomic_store_n(g_func_table + i, func, __ATOMIC_RELAXED);
  241. }
  242. done = true;
  243. }
  244. const char _WRAPLIB_API_CALL* nvrtcGetErrorString(nvrtcResult arg0) {
  245. typedef const char*(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcResult);
  246. ON_ENTRY(nvrtcGetErrorString);
  247. f_ptr_t f = (f_ptr_t)(g_func_table[0]);
  248. return f(arg0);
  249. }
  250. nvrtcResult _WRAPLIB_API_CALL nvrtcVersion(int* arg0, int* arg1) {
  251. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(int*, int*);
  252. ON_ENTRY(nvrtcVersion);
  253. f_ptr_t f = (f_ptr_t)(g_func_table[1]);
  254. return f(arg0, arg1);
  255. }
  256. nvrtcResult _WRAPLIB_API_CALL nvrtcGetNumSupportedArchs(int* arg0) {
  257. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(int*);
  258. ON_ENTRY(nvrtcGetNumSupportedArchs);
  259. f_ptr_t f = (f_ptr_t)(g_func_table[2]);
  260. return f(arg0);
  261. }
  262. nvrtcResult _WRAPLIB_API_CALL nvrtcGetSupportedArchs(int* arg0) {
  263. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(int*);
  264. ON_ENTRY(nvrtcGetSupportedArchs);
  265. f_ptr_t f = (f_ptr_t)(g_func_table[3]);
  266. return f(arg0);
  267. }
  268. nvrtcResult _WRAPLIB_API_CALL nvrtcCreateProgram(nvrtcProgram* arg0,
  269. const char* arg1,
  270. const char* arg2, int arg3,
  271. const char* const* arg4,
  272. const char* const* arg5) {
  273. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(
  274. nvrtcProgram*, const char*, const char*, int, const char* const*,
  275. const char* const*);
  276. ON_ENTRY(nvrtcCreateProgram);
  277. f_ptr_t f = (f_ptr_t)(g_func_table[4]);
  278. return f(arg0, arg1, arg2, arg3, arg4, arg5);
  279. }
  280. nvrtcResult _WRAPLIB_API_CALL nvrtcDestroyProgram(nvrtcProgram* arg0) {
  281. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram*);
  282. ON_ENTRY(nvrtcDestroyProgram);
  283. f_ptr_t f = (f_ptr_t)(g_func_table[5]);
  284. return f(arg0);
  285. }
  286. nvrtcResult _WRAPLIB_API_CALL nvrtcCompileProgram(nvrtcProgram arg0, int arg1,
  287. const char* const* arg2) {
  288. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram, int,
  289. const char* const*);
  290. ON_ENTRY(nvrtcCompileProgram);
  291. f_ptr_t f = (f_ptr_t)(g_func_table[6]);
  292. return f(arg0, arg1, arg2);
  293. }
  294. nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTXSize(nvrtcProgram arg0, size_t* arg1) {
  295. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram, size_t*);
  296. ON_ENTRY(nvrtcGetPTXSize);
  297. f_ptr_t f = (f_ptr_t)(g_func_table[7]);
  298. return f(arg0, arg1);
  299. }
  300. nvrtcResult _WRAPLIB_API_CALL nvrtcGetPTX(nvrtcProgram arg0, char* arg1) {
  301. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram, char*);
  302. ON_ENTRY(nvrtcGetPTX);
  303. f_ptr_t f = (f_ptr_t)(g_func_table[8]);
  304. return f(arg0, arg1);
  305. }
  306. nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBINSize(nvrtcProgram arg0,
  307. size_t* arg1) {
  308. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram, size_t*);
  309. ON_ENTRY(nvrtcGetCUBINSize);
  310. f_ptr_t f = (f_ptr_t)(g_func_table[9]);
  311. return f(arg0, arg1);
  312. }
  313. nvrtcResult _WRAPLIB_API_CALL nvrtcGetCUBIN(nvrtcProgram arg0, char* arg1) {
  314. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram, char*);
  315. ON_ENTRY(nvrtcGetCUBIN);
  316. f_ptr_t f = (f_ptr_t)(g_func_table[10]);
  317. return f(arg0, arg1);
  318. }
  319. nvrtcResult _WRAPLIB_API_CALL nvrtcGetProgramLogSize(nvrtcProgram arg0,
  320. size_t* arg1) {
  321. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram, size_t*);
  322. ON_ENTRY(nvrtcGetProgramLogSize);
  323. f_ptr_t f = (f_ptr_t)(g_func_table[11]);
  324. return f(arg0, arg1);
  325. }
  326. nvrtcResult _WRAPLIB_API_CALL nvrtcGetProgramLog(nvrtcProgram arg0,
  327. char* arg1) {
  328. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram, char*);
  329. ON_ENTRY(nvrtcGetProgramLog);
  330. f_ptr_t f = (f_ptr_t)(g_func_table[12]);
  331. return f(arg0, arg1);
  332. }
  333. nvrtcResult _WRAPLIB_API_CALL nvrtcAddNameExpression(nvrtcProgram arg0,
  334. const char* const arg1) {
  335. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(nvrtcProgram,
  336. const char* const);
  337. ON_ENTRY(nvrtcAddNameExpression);
  338. f_ptr_t f = (f_ptr_t)(g_func_table[13]);
  339. return f(arg0, arg1);
  340. }
  341. nvrtcResult _WRAPLIB_API_CALL nvrtcGetLoweredName(nvrtcProgram arg0,
  342. const char* const arg1,
  343. const char** arg2) {
  344. typedef nvrtcResult(_WRAPLIB_API_CALL * f_ptr_t)(
  345. nvrtcProgram, const char* const, const char**);
  346. ON_ENTRY(nvrtcGetLoweredName);
  347. f_ptr_t f = (f_ptr_t)(g_func_table[14]);
  348. return f(arg0, arg1, arg2);
  349. }

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台