我的应用程序中有一个非常简单的CUDA组件.Valgrind报告了许多泄漏和仍然可达,这些都与cudaMalloc调用有关.
这些泄漏真的存在吗?我呼吁cudaFree
每一个人cudaMalloc
.这个valgrind无法解释GPU内存分配吗?如果这些泄漏不是真的,我可以抑制它们并让valgrind只分析应用程序的非gpu部分吗?
extern "C" unsigned int *gethash(int nodec, char *h_nodev, int len) { unsigned int *h_out = (unsigned int *)malloc(sizeof(unsigned int) * nodec); char *d_in; unsigned int *d_out; cudaMalloc((void**) &d_in, sizeof(char) * len * nodec); cudaMalloc((void**) &d_out, sizeof(unsigned int) * nodec); cudaMemcpy(d_in, h_nodev, sizeof(char) * len * nodec, cudaMemcpyHostToDevice); int blocks = 1 + nodec / 512; cube<<>>(d_out, d_in, nodec, len); cudaMemcpy(h_out, d_out, sizeof(unsigned int) * nodec, cudaMemcpyDeviceToHost); cudaFree(d_in); cudaFree(d_out); return h_out; }
Valgrind输出的最后一位:
... ==5727== 5,468 (5,020 direct, 448 indirect) bytes in 1 blocks are definitely lost in loss record 506 of 523 ==5727== at 0x402B965: calloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==5727== by 0x4843910: ??? (in /usr/lib/nvidia-319-updates/libcuda.so.319.60) ==5727== by 0x48403E9: ??? (in /usr/lib/nvidia-319-updates/libcuda.so.319.60) ==5727== by 0x498B32D: ??? (in /usr/lib/nvidia-319-updates/libcuda.so.319.60) ==5727== by 0x494A6E4: ??? (in /usr/lib/nvidia-319-updates/libcuda.so.319.60) ==5727== by 0x4849534: ??? (in /usr/lib/nvidia-319-updates/libcuda.so.319.60) ==5727== by 0x48191DD: cuInit (in /usr/lib/nvidia-319-updates/libcuda.so.319.60) ==5727== by 0x406B4D6: ??? (in /usr/lib/i386-linux-gnu/libcudart.so.5.0.35) ==5727== by 0x406B61F: ??? (in /usr/lib/i386-linux-gnu/libcudart.so.5.0.35) ==5727== by 0x408695D: cudaMalloc (in /usr/lib/i386-linux-gnu/libcudart.so.5.0.35) ==5727== by 0x804A006: gethash (hashkernel.cu:36) ==5727== by 0x804905F: chkisomorphs (bdd.c:326) ==5727== ==5727== LEAK SUMMARY: ==5727== definitely lost: 10,240 bytes in 6 blocks ==5727== indirectly lost: 1,505 bytes in 54 blocks ==5727== possibly lost: 7,972 bytes in 104 blocks ==5727== still reachable: 626,997 bytes in 1,201 blocks ==5727== suppressed: 0 bytes in 0 blocks
mirichan.. 6
这是一个众所周知的问题,valgrind报告了一堆CUDA的误报.避免看到它的最好方法是使用valgrind抑制,你可以在这里阅读所有内容:http: //valgrind.org/docs/manual/manual-core.html#manual-core.suppress
如果你想快速开始更接近你的具体问题,那么在Nvidia开发论坛上有一个有趣的帖子.它有一个指向样本抑制规则文件的链接. https://devtalk.nvidia.com/default/topic/404607/valgrind-3-4-suppressions-a-little-howto/
这是一个众所周知的问题,valgrind报告了一堆CUDA的误报.避免看到它的最好方法是使用valgrind抑制,你可以在这里阅读所有内容:http: //valgrind.org/docs/manual/manual-core.html#manual-core.suppress
如果你想快速开始更接近你的具体问题,那么在Nvidia开发论坛上有一个有趣的帖子.它有一个指向样本抑制规则文件的链接. https://devtalk.nvidia.com/default/topic/404607/valgrind-3-4-suppressions-a-little-howto/