cudaError_t cudaLaunch(const void *entry) { static cudaError_t (*nv_cudaLaunch)(const char *) = NULL; cudaError_t ret; struct timeval t; if(!nv_cudaLaunch) { nv_cudaLaunch = dlsym(RTLD_NEXT, "cudaLaunch"); if(!nv_cudaLaunch) { fprintf(stderr, "failed to find symbol cudaLaunch: %s\n", dlerror()); return cudaErrorSharedObjectSymbolNotFound; } } gettimeofday(&t, NULL); printf("[gvm] %lf intercepting cudaLaunch\n", t.tv_sec + t.tv_usec / 1000000.0); ret = nv_cudaLaunch(entry); cudaThreadSynchronize(); gettimeofday(&t, NULL); printf("[gvm] %lf intercepted cudaLaunch\n", t.tv_sec + t.tv_usec / 1000000.0); return ret; }
GMM_EXPORT cudaError_t cudaLaunch(const void *entry) { cudaError_t ret; if (initialized) ret = gmm_cudaLaunch(entry); else { gprint(WARN, "cudaLaunch called outside GMM\n"); ret = nv_cudaLaunch(entry); } return ret; }