gpt4 book ai didi

memory-leaks - Valgrind 和 CUDA : Are reported leaks real?

转载 作者:行者123 更新时间:2023-12-04 01:56:52 29 4
gpt4 key购买 nike

我的应用程序中有一个非常简单的 CUDA 组件。 Valgrind 报告了很多泄漏和仍然可以访问的问题,所有这些都与 cudaMalloc 调用有关。

这些泄漏是真的吗?我打电话cudaFreecudaMalloc .这个 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<<<blocks, 512>>>(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

最佳答案

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/

关于memory-leaks - Valgrind 和 CUDA : Are reported leaks real?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20593450/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com