gpt4 book ai didi

c++ - cuda-memcheck,如何从地址到源代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:51 26 4
gpt4 key购买 nike

我成功地使用 cuda-memcheck 获取有关错误内存访问的错误。使用 -g -G 编译 cuda 代码给出了很好的源位置,如下所示:

========= Error: process didn't terminate successfully
========= Invalid __global__ read of size 1
========= at 0x00000710 in /some/path/somefile.cu:117:some_function
========= by thread (0,14,0) in block (1,16,0)
========= Address 0x00abac20 is out of bounds

现在我尝试使用 -l 开关来获取内存泄漏信息。然而,在这里,我只得到地址:

========= CUDA-MEMCHECK
========= Leaked 3630 bytes at 0x007d2800
=========
========= Leaked 14740 bytes at 0x008e0700
...
=========
========= LEAK SUMMARY: 11122140 bytes leaked in 39 allocations
========= ERROR SUMMARY: 0 errors
400 bytes at 0x005d2000

如何从中获取实际代码位置?

最佳答案

为泄漏提供的地址不是代码地址,而是数据位置。遗憾的是,要查看这些位置的分配位置并不容易。

鉴于内存可以在任何地方分配(记住指针可以传递、别名等),检查泄漏(即未释放的已分配内存)的唯一方法是在程序退出时。因此,当您的程序退出时,cuda-memcheck 检查已分配但未释放的内存块,并为您提供内存块的地址,但它无法将其与分配时间联系起来。

相反,最简单的方法是手动检查您的代码以检查所有 cudaMalloc() 调用是否具有匹配的 cudaFree() 调用。然而,这可能是一个相当费力的过程......

关于c++ - cuda-memcheck,如何从地址到源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615249/

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