#include "megbrain_build_config.h" #pragma GCC visibility push(default) #include #define LOGE(fmt, v...) fprintf(stderr, "err: " fmt "\n", ##v) extern "C" { #include "cuda.h" } #include "cudaProfiler.h" #pragma GCC diagnostic ignored "-Wdeprecated-declarations" static void log_failed_load(int func_idx); namespace { template T on_init_failed(int func_idx); template <> CUresult on_init_failed(int func_idx) { log_failed_load(func_idx); return CUDA_ERROR_UNKNOWN; } } // namespace #define _WRAPLIB_API_CALL CUDAAPI #define _WRAPLIB_CALLBACK CUDA_CB #if CUDA_VERSION == 10010 #include "./libcuda-wrap_10.1.h" //! as some symbols link from cuda lib, but used at other module, export here #ifdef WIN32 #pragma comment(linker, "/export:cudaSetDevice") #pragma comment(linker, "/export:cuCtxGetCurrent") #pragma comment(linker, "/export:cudaGetDeviceCount") #pragma comment(linker, "/export:cudaGetDeviceProperties") #pragma comment(linker, "/export:cudaRuntimeGetVersion") #pragma comment(linker, "/export:cudaGetDevice") #pragma comment(linker, "/export:cudaDeviceSynchronize") #endif #elif CUDA_VERSION == 10020 #include "./libcuda-wrap_10.2.h" //! as some symbols link from cuda lib, but used at other module, export here #ifdef WIN32 #pragma comment(linker, "/export:cudaSetDevice") #pragma comment(linker, "/export:cuCtxGetCurrent") #pragma comment(linker, "/export:cudaGetDeviceCount") #pragma comment(linker, "/export:cudaGetDeviceProperties") #pragma comment(linker, "/export:cudaRuntimeGetVersion") #pragma comment(linker, "/export:cudaGetDevice") #pragma comment(linker, "/export:cudaDeviceSynchronize") #endif #elif CUDA_VERSION == 11010 #include "./libcuda-wrap_11.1.h" #elif CUDA_VERSION == 11020 #include "./libcuda-wrap_11.2.h" #else #error "cuda stub not support this cuda version, you can close cuda stub to passby" #endif #undef _WRAPLIB_CALLBACK #undef _WRAPLIB_API_CALL static const char* default_so_name = #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) "nvcuda.dll"; #elif defined(__APPLE__) || defined(__MACOSX) "libcuda.dylib"; #else "libcuda.so.1"; #endif // Harvested from cuda_drvapi_dynlink.c static const char* default_so_paths[] = { #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) "nvcuda.dll", #elif defined(__unix__) || defined(__QNX__) || defined(__APPLE__) || \ defined(__MACOSX) #if defined(__APPLE__) || defined(__MACOSX) "/usr/local/cuda/lib/libcuda.dylib", #elif defined(__ANDROID__) #if defined(__aarch64__) "/system/vendor/lib64/libcuda.so", #elif defined(__arm__) "/system/vendor/lib/libcuda.so", #endif #else "libcuda.so.1", #endif #else #error "Unknown platform" #endif }; static const char* extra_so_paths[] = { "/usr/lib/x86_64-linux-gnu/libcuda.so", "/usr/local/nvidia/lib64/libcuda.so", }; static const char* g_default_api_name = "cuda"; #include "./dlopen_helper.h"