gpt4 book ai didi

memory-leaks - clGetPlatformIDs 内存泄漏

转载 作者:行者123 更新时间:2023-12-01 02:27:47 25 4
gpt4 key购买 nike

我正在使用 NVIDIA 硬件在 Ubuntu 12.04 上测试我的代码。

没有实际的 OpenCL 处理发生;但我的初始化代码仍在运行。此代码调用 clGetPlatformIDs。但是,Valgrind 报告内存泄漏:

==2718== 8 bytes in 1 blocks are definitely lost in loss record 4 of 74
==2718== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2718== by 0x509ECB6: ??? (in /usr/lib/nvidia-current/libOpenCL.so.1.0.0)
==2718== by 0x50A04E1: ??? (in /usr/lib/nvidia-current/libOpenCL.so.1.0.0)
==2718== by 0x509FE9F: clGetPlatformIDs (in /usr/lib/nvidia-current/libOpenCL.so.1.0.0)

我不知道这甚至是可能的。这可以解决吗?请注意,当前没有进行特殊的取消初始化——在此之后我需要调用什么吗? docs不要提及必须取消分配任何内容。

最佳答案

关于:“请查看:devgurus.amd.com/thread/136242。valgrind 无法按设计处理自定义内存分配器,OpenCL 可能正在使用它”

引用给出的链接:“虽然在导出处不释放池的行为可以称为库的错误。”

如果您想创建一个内存池并从中分配,请继续;但你仍然应该正确地释放它。整个内存池的复杂性不亚于常规内存引用的复杂性,并且至少应该受到同样的关注,如果不是更多,则是常规引用的关注。此外,8 字节结构极不可能是内存池。

蒂姆 child 将有一个关于如何使用clGetPlatformIds如果它的目的是要返回分配的内存点。然而,阅读http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetPlatformIDs.html我不太相信情况应该如此。

有问题的泄漏可能严重也可能不严重,可能会或可能不会通过连续调用累积,但您可能只能选择将错误报告给 nvidia,希望他们修复它或找到不同的 opencl 实现进行开发。尽管如此,从 valgrind 的角度来看,opencl 库可能有理由创建对未使用的数据的引用。

可悲的是,这仍然给我们留下了由我们无法控制的外部因素引起的内存泄漏,并且仍然给我们留下了过多的 valgrind 输出。

假设您非常确定您不对这次泄漏负责(例如,我们知道一个事实,即 nvidia 工程师在 OpenCL.so 中分配了一个随机值,他并没有解除分配只是为了冒犯您)。 Valgrind 有一个标志 --gen-suppressions=yes,您可以使用它来抑制有关特定警告的警告,您可以使用 --suppressions=$filename 将这些警告反馈给 valgrind。阅读 valgrind 页面以了解有关其工作原理的更多详细信息。

但是要非常谨慎地使用抑制。显然,抑制错误并不能修复它们,自由使用该机制会导致您抑制代码所产生的错误,而不是 nvidia 或 valgrind。不要压制您不确定它们来自哪里的警告,或者定期重申您的压制。

关于memory-leaks - clGetPlatformIDs 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15014078/

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