mirror of
https://github.com/NVIDIA/cuda-samples.git
synced 2026-04-02 23:55:41 +08:00
Bug 5952280: Add cuModuleUnload(Module) to release resource for 6 samples
This commit is contained in:
parent
5cf83b5a98
commit
e32d17e67e
@ -255,6 +255,7 @@ void runTest(int argc, char **argv)
|
|||||||
checkCudaErrors(cuMemFree(d_A));
|
checkCudaErrors(cuMemFree(d_A));
|
||||||
checkCudaErrors(cuMemFree(d_B));
|
checkCudaErrors(cuMemFree(d_B));
|
||||||
checkCudaErrors(cuMemFree(d_C));
|
checkCudaErrors(cuMemFree(d_C));
|
||||||
|
checkCudaErrors(cuModuleUnload(cuModule));
|
||||||
checkCudaErrors(cuCtxDestroy(cuContext));
|
checkCudaErrors(cuCtxDestroy(cuContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -68,6 +68,7 @@ extern "C" void computeGold(float *, const float *, const float *, unsigned int,
|
|||||||
// Globals
|
// Globals
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
CUcontext g_cuContext;
|
CUcontext g_cuContext;
|
||||||
|
CUmodule g_cuModule;
|
||||||
bool noprompt = false;
|
bool noprompt = false;
|
||||||
|
|
||||||
static const char *sSDKsample = "matrixMulDynlinkJIT (CUDA dynamic linking)";
|
static const char *sSDKsample = "matrixMulDynlinkJIT (CUDA dynamic linking)";
|
||||||
@ -90,7 +91,6 @@ CUresult initCUDA(int argc, char **argv, CUfunction *pMatrixMul, int *block_size
|
|||||||
{
|
{
|
||||||
CUresult status;
|
CUresult status;
|
||||||
CUdevice cuDevice;
|
CUdevice cuDevice;
|
||||||
CUmodule cuModule;
|
|
||||||
CUfunction cuFunction;
|
CUfunction cuFunction;
|
||||||
int major, minor, block_size, devID = 0;
|
int major, minor, block_size, devID = 0;
|
||||||
char deviceName[256];
|
char deviceName[256];
|
||||||
@ -185,10 +185,10 @@ CUresult initCUDA(int argc, char **argv, CUfunction *pMatrixMul, int *block_size
|
|||||||
|
|
||||||
#if defined(_WIN64) || defined(__LP64__)
|
#if defined(_WIN64) || defined(__LP64__)
|
||||||
status =
|
status =
|
||||||
cuModuleLoadDataEx(&cuModule, matrixMul_kernel_64_ptxdump, jitNumOptions, jitOptions, (void **)jitOptVals);
|
cuModuleLoadDataEx(&g_cuModule, matrixMul_kernel_64_ptxdump, jitNumOptions, jitOptions, (void **)jitOptVals);
|
||||||
#else
|
#else
|
||||||
status =
|
status =
|
||||||
cuModuleLoadDataEx(&cuModule, matrixMul_kernel_32_ptxdump, jitNumOptions, jitOptions, (void **)jitOptVals);
|
cuModuleLoadDataEx(&g_cuModule, matrixMul_kernel_32_ptxdump, jitNumOptions, jitOptions, (void **)jitOptVals);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printf("> PTX JIT log:\n%s\n", jitLogBuffer);
|
printf("> PTX JIT log:\n%s\n", jitLogBuffer);
|
||||||
@ -206,9 +206,10 @@ CUresult initCUDA(int argc, char **argv, CUfunction *pMatrixMul, int *block_size
|
|||||||
|
|
||||||
// retrieve CUDA function from the compiled module
|
// retrieve CUDA function from the compiled module
|
||||||
status = cuModuleGetFunction(
|
status = cuModuleGetFunction(
|
||||||
&cuFunction, cuModule, (block_size == 16) ? "matrixMul_bs16_32bit" : "matrixMul_bs32_32bit");
|
&cuFunction, g_cuModule, (block_size == 16) ? "matrixMul_bs16_32bit" : "matrixMul_bs32_32bit");
|
||||||
|
|
||||||
if (CUDA_SUCCESS != status) {
|
if (CUDA_SUCCESS != status) {
|
||||||
|
cuModuleUnload(g_cuModule);
|
||||||
cuCtxDestroy(g_cuContext);
|
cuCtxDestroy(g_cuContext);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -337,6 +338,7 @@ int main(int argc, char **argv)
|
|||||||
checkCudaErrors(cuMemFree(d_A));
|
checkCudaErrors(cuMemFree(d_A));
|
||||||
checkCudaErrors(cuMemFree(d_B));
|
checkCudaErrors(cuMemFree(d_B));
|
||||||
checkCudaErrors(cuMemFree(d_C));
|
checkCudaErrors(cuMemFree(d_C));
|
||||||
|
checkCudaErrors(cuModuleUnload(g_cuModule));
|
||||||
checkCudaErrors(cuCtxDestroy(g_cuContext));
|
checkCudaErrors(cuCtxDestroy(g_cuContext));
|
||||||
|
|
||||||
printf("Test run %s\n", (1 == res) ? "success!" : "failed!");
|
printf("Test run %s\n", (1 == res) ? "success!" : "failed!");
|
||||||
|
|||||||
@ -297,6 +297,7 @@ void runTest(int argc, char **argv)
|
|||||||
free(image_path);
|
free(image_path);
|
||||||
free(ref_path);
|
free(ref_path);
|
||||||
|
|
||||||
|
checkCudaErrors(cuModuleUnload(cuModule));
|
||||||
checkCudaErrors(cuCtxDestroy(cuContext));
|
checkCudaErrors(cuCtxDestroy(cuContext));
|
||||||
|
|
||||||
exit(bTestResults ? EXIT_SUCCESS : EXIT_FAILURE);
|
exit(bTestResults ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
|||||||
@ -211,6 +211,7 @@ int CleanupNoFailure()
|
|||||||
free(h_C);
|
free(h_C);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkCudaErrors(cuModuleUnload(cuModule));
|
||||||
checkCudaErrors(cuCtxDestroy(cuContext));
|
checkCudaErrors(cuCtxDestroy(cuContext));
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
@ -247,6 +247,7 @@ int CleanupNoFailure()
|
|||||||
free(h_C);
|
free(h_C);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkCudaErrors(cuModuleUnload(cuModule));
|
||||||
checkCudaErrors(cuCtxDestroy(cuContext));
|
checkCudaErrors(cuCtxDestroy(cuContext));
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
@ -419,6 +419,7 @@ static void childProcess(int devId, int id, char **argv)
|
|||||||
|
|
||||||
// Clean up!
|
// Clean up!
|
||||||
checkCudaErrors(cuStreamDestroy(stream));
|
checkCudaErrors(cuStreamDestroy(stream));
|
||||||
|
checkCudaErrors(cuModuleUnload(cuModule));
|
||||||
checkCudaErrors(cuCtxDestroy(ctx));
|
checkCudaErrors(cuCtxDestroy(ctx));
|
||||||
|
|
||||||
// Unmap the allocations from our address space. Unmapping will also free the
|
// Unmap the allocations from our address space. Unmapping will also free the
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user