bool load_kernels(bool experimental) { /* check if cuda init succeeded */ if(cuContext == 0) return false; /* check if GPU is supported with current feature set */ if(!support_device(experimental)) return false; /* get kernel */ string cubin = compile_kernel(); if(cubin == "") return false; /* open module */ cuda_push_context(); CUresult result = cuModuleLoad(&cuModule, cubin.c_str()); if(cuda_error_(result, "cuModuleLoad")) cuda_error_message(string_printf("Failed loading CUDA kernel %s.", cubin.c_str())); cuda_pop_context(); return (result == CUDA_SUCCESS); }
CUDADevice(DeviceInfo& info, Stats &stats, bool background_) : Device(stats) { background = background_; cuDevId = info.num; cuDevice = 0; cuContext = 0; /* intialize */ if(cuda_error(cuInit(0))) return; /* setup device and context */ if(cuda_error(cuDeviceGet(&cuDevice, cuDevId))) return; CUresult result; if(background) { result = cuCtxCreate(&cuContext, 0, cuDevice); } else { result = cuGLCtxCreate(&cuContext, 0, cuDevice); if(result != CUDA_SUCCESS) { result = cuCtxCreate(&cuContext, 0, cuDevice); background = true; } } if(cuda_error_(result, "cuCtxCreate")) return; cuda_pop_context(); }